2017. november 25., szombat

Kivágási rendszerek (view-frustum, occlusion és backface culling)

  • (p)
Írta: Abu85 | Utoljára frissítve: 2013-11-29 13:50

A számítógépes grafika megrajzolásakor az egyik legfontosabb szabály, hogy a grafikus vezérlőt a szükségesnél jobban nem szabad megterhelni, így a biztosan nem látható objektumokat már a képkocka számításának megkezdése előtt el kell dobni. Erre az elmúlt nagyjából két évtizedben nem egy módszer született, melyeket a mai napig mindenki alkalmaz. A legfontosabb megérteni, hogy a képkocka csupán egy korlátozott látószögben készült fénykép az adott virtuális világ éppen aktuális állapotáról, tehát maga világ teljes szimuláción megy keresztül, de tulajdonképpen a felhasználónak szóló képkocka szempontjából teljesen lényegtelen, hogy mi történik egy bizonyos távolságon túl, vagy éppen a kamera mögött, ugyanis erről nem kell információt biztosítani az adott jelentről készült kép számítása során.

A kivágási rendszereket három nagy csoportra lehet osztani, melyekkel majdnem tökéletesen eltávolíthatók az adott képkocka számára érdektelen információk. Az első lépésben úgynevezett view-frustum culling alkalmazása szükséges. Ennek elvi működése rendkívül egyszerű. Tulajdonképpen a virtuális térben elhelyezkedő kamera – egyénileg paraméterezett – látószöge meghatározott, így minden olyan objektum, ami ebbe nem esik bele helyből kivágható. Ez persze még így nem teljes megoldás, ugyanis a nagyon távoli objektumok sem túl lényegesek, így érdemes meghatározni egy olyan távolságot, ami után szintén ki lehet vágni mindent. Szintén meg kell határozni egy minimális távolságot, így ha bármi ennél közelebb van a kamerához az szintén kivágható. Az így kapott alakzat egy csúcsától megfosztott szabályos piramis lesz, és minden olyan objektum, ami ezen belül helyezkedik el potenciálisan látható lehet a végső képkockán. Ezt az alábbi kép jól reprezentálja.

Amellett, hogy már most rengeteg felesleges számítástól sikerült megkímélni a grafikus vezérlőt, még nem lehet elkezdeni a tényleges munkát, ugyanis attól, hogy valami benne van a vágott piramisban még nem biztos, hogy tényleg látható. A következő lépésben azokat az objektumokat kell eltüntetni, amelyeket a view-frustum culling meghagyott, de például ha egy nagy objektum több kis objektumot eltakar, akkor utóbbiak számítása például felesleges, mert ez a képkockán nem fog plusz információt jelenteni. Erre megoldást jelent az occlusion culling, ami felfogható egyfajta előzetes leképzésnek is, mivel a látható objektumokat egyszerű téglalapokkal rajzolja ki, és az így szerzett eredmények alapján a központi processzor dönt arról, hogy mi látszik és mi nem. Természetesen ezután a grafikus vezérlőnek csak azokat az objektumokat kell elküldeni kirajzolásra, amelyekről az előbbi szűrő lefuttatása után is kiderült, hogy valóban láthatók.

Ezen a ponton lényegében az összes nem látható objektum ki lett vágva, de maradt még egy probléma. Nevezetesen arról van szó, hogy még a látható objektumokból sem látszik minden. Mivel a hardverek kifejezetten érzékenyek a háromszögek feldolgozására is, így a tényleges munka megkezdése előtt érdemes bevetni a backface culling eljárást. Ez szintén nagyon egyszerű ötletre épül, hiszen teljesen egyértelmű, hogy egy virtuális alakzatnak csak az az oldala számít, ami az adott nézőpontból látszik. Ennek a szűrése nagyon egyszerű, mivel – szakmailag korrekt megfogalmazással élve – minden olyan háromszög eldobható, melyek normálvektorai a nézőpont irányvektorával 90 foknál nagyobb szöget zárnak be. Hétköznapi nyelven megfogalmazva az adott objektum kamerán keresztül nem látható oldalával nem kell foglalkozni.

Persze felesleges számítások még a fenti feladatok lefuttatása után is lesznek, de ezekre már nem alkalmazható egyértelmű kivágási rendszer, vagyis a hatékony feldolgozás innentől már az adott hardveren múlik.

Ha pontatlanságot találsz a cikkben, kérjük, írd meg a szerzőnek!
A bejegyzés utolsó frissítésének időpontja: 2013-11-29 13:50

H​i​r​detés

Hird​e​té​s

Copyright © 2000-2017 PROHARDVER Informatikai Kft.