Mélységi pufferek (Direct3D 9)
A mélységi puffer, amelyet gyakran z-puffernek vagy w-puffernek is neveznek, az eszköz azon tulajdonsága, amely a Direct3D által használandó mélységi információkat tárolja. Amikor a Direct3D egy jelenetet egy célfelületre jelenít meg, a kapcsolódó mélységi pufferfelület memóriáját munkaterületként használhatja annak meghatározására, hogy a raszterizált sokszögek képpontjai hogyan kapcsolják el egymást. A Direct3D egy külső Direct3D felületet használ a végső színértékek megírásának céljaként. A renderelési célfelülethez társított mélységpuffer felület olyan mélységi információk tárolására szolgál, amelyek jelzik a Direct3D-nek, hogy az egyes látható képpontok milyen mélyek a jelenetben.
Ha egy jelenet raszterizálva van, és engedélyezve van a mélységi pufferelés, a renderelési felület minden pontjának tesztelése történik. A mélységi puffer értékei lehetnek egy pont z koordinátái vagy homogén w-koordinátái – a pont (x,y,z,w) helyéről a vetítési térben. A z értékeket használó mélységi puffereket gyakran z-puffernek nevezik, a w értékeket használót pedig w-puffernek. A mélységi pufferek minden típusa rendelkezik előnyökkel és hátrányokkal, amelyeket később tárgyalunk.
A teszt elején a mélységi puffer mélységi értéke a jelenet lehető legnagyobb lehetséges értékére van állítva. A renderelési felületen a színérték a háttérszín értékére vagy a háttérmintázat színértékére van beállítva. A jelenet minden poligonját teszteli, hogy láthassa, hogy az a renderelési felületen az aktuális koordinátával (x,y) metszi-e egymást. Ha igen, akkor a mélységi érték - amely a z-puffer z koordinátája lesz, és a w-puffer w koordinátája - az aktuális ponton tesztelve lesz, hogy kisebb-e, mint a mélységi pufferben tárolt mélységi érték. Ha a sokszög értékének mélysége kisebb, a rendszer a mélységi pufferben tárolja, és a sokszög színértéke a renderelési felület aktuális pontjára lesz írva. Ha a sokszög mélységi értéke ennél a pontnál nagyobb, a listában szereplő következő sokszög lesz tesztelve. Ez a folyamat az alábbi ábrán látható.
Jegyzet
Bár a legtöbb alkalmazás nem használja ezt a funkciót, módosíthatja a Direct3D által használt összehasonlítást annak meghatározásához, hogy mely értékek kerülnek a mélységi pufferbe, majd a renderelési célfelületre. Ehhez módosítsa a D3DRS_ZFUNC renderelési állapot értékét. Egyes hardvereken a compare függvény módosítása letilthatja a hierarchikus z tesztelést.
A piacon szinte minden gyorsító támogatja a z-pufferelést, így a z-pufferek ma a leggyakoribb mélységi puffertípus. A z-puffereknek azonban mindenhol megvannak a hátrányai. Az érintett matematika miatt a z-pufferben előállított z értékek általában nem egyenletesen oszlanak el a z-puffertartományban (általában 0,0 és 1,0 közötti értékeket is beleértve). Pontosabban a távoli és a közeli kivágási síkok közötti arány erősen befolyásolja a z értékek eloszlását. Ha 100-nak a síkközközeli távolság arányát használjuk, a mélységi puffertartomány 90%-át a jelenetmélységtartomány első 10 százalékára fordítjuk. A szórakoztató vagy vizuális szimulációkhoz használt tipikus alkalmazásokhoz a külső jelenetekhez gyakran 1000 és 10 000 közötti távolsági/síkközeli arányokra van szükség. 1000 arányban a tartomány 98 százaléka a mélységtartomány első 2 százalékára kerül, és az eloszlás egyre rosszabb lesz a magasabb arányokkal. Ez rejtett felületi összetevőket okozhat távoli objektumokban, különösen 16 bites mélységi pufferek használatakor, amelyek a leggyakrabban támogatott bitmélység.
A w-alapú mélységpufferek viszont gyakran egyenletesebben oszlanak el a közeli és a távoli vágósíkok között, mint a z-pufferek. A fő előnye az, hogy a távoli és közeli vágósíkok távolságainak aránya már nem jelent problémát. Ez lehetővé teszi, hogy az alkalmazások nagy maximális tartományokat támogassanak, miközben viszonylag pontos mélységpufferelést kapnak a szempont közelében. A w-alapú mélységpuffer nem tökéletes, és néha rejtett felületi összetevőket is mutathat közeli objektumokhoz. A w-pufferelt megközelítés másik hátránya a hardvertámogatás: a w-pufferelés nem támogatott olyan széles körben a hardverekben, mint a z-pufferelés.
A z-puffer használata többletterhelést igényel a renderelés során. A z-pufferek használatakor különböző technikák használhatók a renderelés optimalizálására. További információ: Z-Puffer teljesítmény.
Jegyzet
A mélységi érték tényleges értelmezése a renderelőre jellemző.
Ez a szakasz a mélységi pufferek rejtett vonal- és rejtett felületeltávolításhoz való használatával kapcsolatos információkat mutatja be.
- A mélységi puffer támogatásának lekérdezése (Direct3D 9)
- Mélységi puffer (Direct3D 9) létrehozása
- Mélységi pufferelés engedélyezése (Direct3D 9)
- Mélységi puffer (Direct3D 9) beolvasása
- törlési mélységpufferek (Direct3D 9)
- a mélységi puffer írási hozzáférésének (Direct3D 9)
- Mélységi puffer összehasonlító függvények (Direct3D 9)
Kapcsolódó témakörök