Tiefenpuffer (Direct3D 9)

Ein Tiefenpuffer, häufig als Z-Puffer oder W-Puffer bezeichnet, ist eine Eigenschaft des Geräts, das Tiefeninformationen speichert, die von Direct3D verwendet werden sollen. Wenn Direct3D eine Szene auf einer Zieloberfläche rendert, kann der Arbeitsspeicher in einer zugeordneten Tiefenpufferoberfläche als Arbeitsbereich verwendet werden, um zu bestimmen, wie sich die Pixel gerasterter Polygone gegenseitig verdecken. Direct3D verwendet eine Direct3D-Oberfläche außerhalb des Bildschirms als Ziel, in das endgültige Farbwerte geschrieben werden. Die Tiefenpufferoberfläche, die der Renderzieloberfläche zugeordnet ist, wird verwendet, um Tiefeninformationen zu speichern, die Direct3D darüber informieren, wie tief die einzelnen sichtbaren Pixel in der Szene sind.

Wenn eine Szene mit aktivierter Tiefenpufferung gerastert wird, wird jeder Punkt auf der Renderingoberfläche getestet. Die Werte im Tiefenpuffer können die Z-Koordinate eines Punkts oder seine homogene w-Koordinate sein– von der Position des Punkts (x,y,z,w) im Projektionsbereich. Ein Tiefenpuffer, der Z-Werte verwendet, wird häufig als Z-Puffer bezeichnet, und einer, der w-Werte verwendet, wird als W-Puffer bezeichnet. Jeder Typ von Tiefenpuffer hat Vor- und Nachteile, die später erläutert werden.

Zu Beginn des Tests wird der Tiefenwert im Tiefenpuffer auf den größtmöglichen Wert für die Szene festgelegt. Der Farbwert auf der Renderingoberfläche wird entweder auf den Hintergrundfarbwert oder den Farbwert der Hintergrundtextur an diesem Punkt festgelegt. Jedes Polygon in der Szene wird getestet, um festzustellen, ob es sich mit der aktuellen Koordinate (x,y) auf der Renderingoberfläche überschneidet. Andernfalls wird der Tiefenwert , bei dem es sich um die z-Koordinate in einem Z-Puffer und die w-Koordinate in einem w-Puffer handelt, am aktuellen Punkt getestet, um festzustellen, ob er kleiner als der im Tiefenpuffer gespeicherte Tiefenwert ist. Wenn die Tiefe des Polygonwerts kleiner ist, wird er im Tiefenpuffer gespeichert, und der Farbwert aus dem Polygon wird an den aktuellen Punkt auf der Renderingoberfläche geschrieben. Wenn der Tiefenwert des Polygons an diesem Punkt größer ist, wird das nächste Polygon in der Liste getestet. Dieser Prozess ist im folgenden Diagramm dargestellt.

Diagramm der Testtiefewerte

Hinweis

Obwohl die meisten Anwendungen dieses Feature nicht verwenden, können Sie den Vergleich ändern, den Direct3D verwendet, um zu bestimmen, welche Werte im Tiefenpuffer und anschließend auf der Renderzieloberfläche platziert werden. Ändern Sie zu diesem Zwecke den Wert für den _ D3DRS-RENDERZUSTAND. Auf einigen Hardwarekomponenten kann das Ändern der Compare-Funktion hierarchische z-Tests deaktivieren.

Fast alle Accelerators auf dem Markt unterstützen Z-Pufferung, sodass Z-Puffer heute die gängigste Art von Tiefenpuffer sind. Allerdings haben Z-Puffer ihre Nachteile. Aufgrund der beteiligten Mathematik werden die generierten Z-Werte in einem Z-Puffer in der Regel nicht gleichmäßig über den Z-Pufferbereich verteilt (in der Regel 0,0 bis 1,0, einschließlich). Insbesondere wirkt sich das Verhältnis zwischen der fernen und der nähen Clippingebene stark darauf aus, wie ungleichmäßig z-Werte verteilt werden. Bei Verwendung eines Abstands der fernen Ebene zum Abstand der näheren Ebene von 100 werden 90 Prozent des Tiefenpufferbereichs für die ersten 10 Prozent des Szenentiefebereichs aufgewendet. Typische Anwendungen für Unterhaltungs- oder visuelle Simulationen mit Außenszenen erfordern häufig ein Verhältnis zwischen 1.000 und 10.000 ebenen- und nahebenen. Bei einem Verhältnis von 1.000 werden 98 Prozent des Bereichs für die ersten 2 Prozent des Tiefenbereichs aufgewendet, und die Verteilung wird mit höheren Verhältnissen schlechter. Dies kann zu verborgenen Oberflächenartefakten in entfernten Objekten führen, insbesondere bei Verwendung von 16-Bit-Tiefenpuffern, der am häufigsten unterstützten Bittiefe.

Ein w-basierter Tiefenpuffer hingegen ist häufig gleichmäßiger auf die nah- und fernen Clipebenen verteilt als ein Z-Puffer. Der Hauptvorteil besteht darin, dass das Verhältnis der Entfernungen für die entfernungen und die nähen Clippingebenen kein Problem mehr ist. Dadurch können Anwendungen große maximale Bereiche unterstützen und dennoch relativ genaue Tiefenpufferung in der Nähe des Augenpunkts erhalten. Ein w-basierter Tiefenpuffer ist nicht perfekt und kann manchmal verborgene Oberflächenartefakte für nahe Objekte aufweisen. Ein weiterer Nachteil des w-buffered-Ansatzes ist die Hardwareunterstützung: W-Pufferung wird in der Hardware nicht so häufig unterstützt wie Z-Pufferung.

Die Verwendung eines Z-Puffers erfordert mehr Aufwand während des Renderings. Bei Verwendung von Z-Puffern können verschiedene Techniken verwendet werden, um das Rendering zu optimieren. Weitere Informationen finden Sie unter Z-Buffer-Leistung.

Hinweis

Die tatsächliche Interpretation eines Tiefenwerts ist spezifisch für den Renderer.

Dieser Abschnitt enthält Informationen zur Verwendung von Tiefenpuffern zum Entfernen ausgeblendeter Linien und ausgeblendeter Oberflächen.

Direct3D-Rendering