Udostępnij za pośrednictwem


głębokości (Direct3D 9)

Bufor głębokości, często nazywany buforem z lub buforem w, jest właściwością urządzenia, która przechowuje szczegółowe informacje, które mają być używane przez funkcję Direct3D. Gdy funkcja Direct3D renderuje scenę na powierzchnię docelową, może używać pamięci na skojarzonej powierzchni bufora głębokości jako obszaru roboczego, aby określić, w jaki sposób piksele rastrowanych wielokątów occlude siebie nawzajem. Funkcja Direct3D używa powierzchni Direct3D poza ekranem jako miejsca docelowego, do którego zapisywane są końcowe wartości kolorów. Powierzchnia buforu głębokości, która jest skojarzona z powierzchnią docelową renderowania, służy do przechowywania informacji o głębokości, które informują Direct3D, jak głęboko każdy widoczny piksel znajduje się w scenie.

Gdy scena jest rasteryzowana z włączonym buforowaniem głębokości, każdy punkt na powierzchni renderowania jest testowany. Wartości w buforze głębokości mogą być współrzędną z punktu lub jego jednorodną współrzędną w - z punktu (x,y,z,w) w przestrzeni projekcji. Bufor głębokości używający wartości z jest często nazywany buforem z, a buforem, który używa wartości w, jest nazywany buforem w. Każdy typ buforu głębokości ma zalety i wady, które zostały omówione w dalszej części.

Na początku testu wartość głębokości buforu głębokości jest ustawiona na największą możliwą wartość dla sceny. Wartość koloru na powierzchni renderowania jest ustawiona na wartość koloru tła lub wartość koloru tekstury tła w tym momencie. Każdy wielokąt w scenie jest testowany, aby sprawdzić, czy przecina się z bieżącą współrzędną (x,y) na powierzchni renderowania. Jeśli tak, wartość głębokości — która będzie współrzędną z w buforze z, a współrzędna w buforze w - w bieżącym punkcie jest testowana, aby sprawdzić, czy jest mniejsza niż wartość głębokości przechowywana w buforze głębokości. Jeśli głębokość wartości wielokąta jest mniejsza, jest przechowywana w buforze głębokości, a wartość koloru z wielokąta jest zapisywana do bieżącego punktu na powierzchni renderowania. Jeśli wartość głębokości wielokąta w tym punkcie jest większa, zostanie przetestowany następny wielokąt na liście. Ten proces przedstawiono na poniższym diagramie.

diagram wartości głębokości testowania

Nuta

Mimo że większość aplikacji nie używa tej funkcji, można zmienić porównanie używane przez funkcję Direct3D w celu określenia, które wartości są umieszczane w buforze głębokości, a następnie na powierzchni docelowej renderowania. W tym celu zmień wartość stanu renderowania D3DRS_ZFUNC. Na pewnym sprzęcie zmiana funkcji compare może wyłączyć hierarchiczne testowanie z.

 

Prawie wszystkie akceleratory na rynku obsługują buforowanie z, dzięki czemu z są obecnie najbardziej typowym typem buforu głębokości. Jednak wszechobecne z mają swoje wady. Ze względu na matematykę wygenerowane wartości z w buforze z zwykle nie są równomiernie rozłożone w zakresie buforu z (zazwyczaj od 0,0 do 1,0, włącznie). W szczególności stosunek między odległymi i zbliżonymi płaszczyznami wycinków silnie wpływa na rozkład nierównomiernie z wartości. Użycie odległości dalekiej płaszczyzny do stosunku odległości bliskiej płaszczyzny do 100, 90 procent zakresu buforu głębokości jest wydawane na pierwsze 10 procent zakresu głębokości sceny. Typowe zastosowania do symulacji rozrywkowych lub wizualnych ze scenami zewnętrznymi często wymagają proporcji dalekiego płaszczyzny/bliskiej płaszczyzny z dowolnego miejsca w zakresie od 1000 do 10 000. W stosunku do 1000, 98 procent zakresu jest wydawane na pierwsze 2 procent zakresu głębokości, a rozkład staje się gorszy z wyższymi współczynnikami. Może to spowodować ukryte artefakty powierzchni w odległych obiektach, zwłaszcza w przypadku korzystania z głębokości 16-bitowej, najczęściej obsługiwanej głębokości bitów.

Z drugiej strony bufor głębokości oparty na rdzeniach jest częściej bardziej równomiernie rozłożony między płaszczyznami zbliżonymi i dalekimi niż bufor z. Kluczową korzyścią jest to, że stosunek odległości dla odległych i bliskich płaszczyzn wycinków nie jest już problemem. Dzięki temu aplikacje mogą obsługiwać duże maksymalne zakresy, jednocześnie uzyskując stosunkowo dokładne buforowanie głębokości w pobliżu punktu widzenia. Bufor głębokości opartej na sieci nie jest doskonały i czasami może wykazywać ukryte artefakty powierzchni dla obiektów zbliżonych. Kolejną wadą buforowanego podejścia jest obsługa sprzętowa: buforowanie w-buforowanie nie jest obsługiwane tak szeroko w sprzęcie, jak buforowanie z.

Użycie buforu z wymaga nakładu pracy podczas renderowania. Różne techniki mogą służyć do optymalizowania renderowania podczas korzystania z z. Aby uzyskać szczegółowe informacje, zobacz wydajność buforu Z-Buffer.

Nuta

Rzeczywista interpretacja wartości głębokości jest specyficzna dla modułu renderowania.

 

W tej sekcji przedstawiono informacje na temat używania głębokości do usuwania ukrytej linii i ukrytej powierzchni.

renderowania Direct3D