HTML

gondolataim elsősorban játékfejlesztésről

Elsősorban játékfejlesztés magyarul: az enginem fejlesztése során felmerülő problémák, ötletek, tévutak stb dokumentálása, amely számomra és talán mások számára is hasznos lehet később Másodsorban gondolatok szavakban...

Kapcsolat:
aalberik 'at' gmail 'dot' com

Haletető

Galéria

Címkék

Összes

Linkblog

Naptár

április 2024
Hét Ked Sze Csü Pén Szo Vas
<<  < Archív
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Cull me, cull me

2010.06.08. 16:56 :: syam

Körülbelül a 3D renderelés gondolatával együtt születhetett meg a kérdés, hogy hogyan lehet elfedni/megtalálni (és esetleg kihagyni a számításokból) a nem látható háromszögeket egy adott jelenetből ill. hogyan lehet megtalálni a láthatóakat (hidden surface determination, visibility determination).

Természetesen rengeteg megoldás született ezen kérdés megválaszolására. Legtöbbjük a vertex szintű feldolgozás előtt (VSZFE) eldobja a háromszögeket azonban akad olyan is, amely vertex feldolgozás után (VSZFU) avagy fragment szinten (FSZF) végzi eldobást.

Face culling

Ez a legegyszerűbb esete az eldobásnak. VSZFU típusú vagyis (általában) hardver végzi és csak fillrate-t lehet megtakarítani. A háromszög orientációját alapul véve dobja el azt-hagyományos esetben ez back face cullingot jelent.

Z-buffer és depth test

Ez hardverekben történő megjelenésekor igen nagy újításnak számított. FSZF típusú. Lényege, hogy a fragment generálásakor képződő mélységértéket is figyelembe vesszük rendereléskor. Ehhez szükséges egy mélység buffer, amely minden egyes pixelhez eltárol egy mélységértéket is.

Rendereléskor a bejövő fragment mélysége összehasonlításra kerül a mélység buffer azon értékével, amely a fragmentnek megfelelő helyről származik és csak azon fragmentek kerülnek kirajzolásra (vagyis a szín és mélység tárolására), amelyekre igaz lett az összehasonlítás eredménye. A mélységérték és mélységbuffer precizitásától függően ez az összehasonlítás vezethet z-fightinghoz.

Ezzel az eljárással elérhetjük azt, hogy a közelebbi fragmentek kitakarják a távoliabbakat a háromszögek renderelési sorrendjétől függetlenül.

 

 

 

A most következő megoldások mindegyike VSZFE típusú vagyis ezek az igazán alkalmasak nagy terek valósidejű rendereléséhez. Ezen eljárásokkal kiválogatott háromszögeket már cpu oldalon eldobjuk.

View-frustum culling

Az általános működési elve: a látótérből kieső háromszögeket eldobjuk. Önmagában csak kisebb jelenetekre alkalmazható megoldás. Ennek hierarchizált térfelosztással kombinált esete a

Hierarchical view-frustum culling

Ennek feltétele (vagy legalábbis a hatékonyság miatt igencsak ajánlott) egy olyan térfelosztó hierarchia, amelyben az elemek nem fedik át egymást. Ez biztosítja azt, hogy ha egy elem teljes mértékben látható akkor az összes gyermeke is ill. fordítva. Ha egy elem teljesen kiesik a látótérből akkor az összes gyermeke is.

Occlusion culling

A view-frustum culling ellentétének is tekinthető abból a szempontból, hogy ilyenkor nem a látható, hanem a kitakart háromszögeket keresünk. Feltételezi, hogy ki tudjunk választani olyan háromszögeket/felületeket (occluder), amelyek biztosan kitakarják a mögöttük lévő teret. Minden egyes olyan háromszög, amely biztosan ebben a térben helyezkedik el eldobható. Tetszőlegesen kombinálható mindkét view-frustum culling-gal.

PVS

A rövidítés a potentially visible set-ből származik. Feltételez egy olyan térfelosztó módszert, amely egyértelműen körülhatároló részekre darabolja a teret. Később ezen részek közötti láthatóságot tárolja el egy "tömbben" (innen ered a set elnevezés). Előre is kiszámítható, de futás időbeni megoldások is léteznek.

Portal culling

Az elnevezés (legalább) két dolgot takar.
Elsőként a portált tekinthetjük az occluder (ilyen összefüggésben az occludert nevezhetjük antiportálnak) ellentétének vagyis olyan felület/háromszög ami mögött lévő háromszögek biztosan láthatók.
Másodsorban egy térfelosztó technika része, amelyben a térrészek egymással a portálokon keresztül állnak összeköttetésben. A térrészek láthatóságát a portálok segítségével vizsgáljuk.

 

 

 

Léteznek még olyan technikák, amelyek segítségével z-buffer hiányában a mélységi takarást megoldható. Ezek jobbára VSZFE megoldások.
Bizonyos algoritmusok mélységi sorbarendezés elvén működnek. Ehhez kiváló segítség a BSP-fa, amelyben a háromszögek egyértelműen sorbarendezhetők.
Más algoritmusok a képernyőn megjelenített háromszögekkel végeznek el vágást. Ezekhez már kiegészítő buffer szükséges, melyek némileg hasonlóan működnek, mint a z-buffer azonban nem per-pixel tárolják a szükséges adatokat. Ilyen például a coverage-buffer és a surface-buffer.
Megjegyzendő, hogy ma már gyakorlatilag nem létezik olyan hardveres renderelő, amely nem biztosítana z-buffert.

 

Szólj hozzá!

Címkék: térfelosztás tér fa bsp tree z fight

A bejegyzés trackback címe:

https://sakura7.blog.hu/api/trackback/id/tr362066069

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása