2010. január 12., kedd

Megjelenítés

Most akkor írnék egy kicsit a kirajzolásról. A részletekbe nem mennék túlságosan bele, inkább csak felületes áttekintőt mutatnék a különböző technikákról. A technika itt a különböző megjelenítési típusokat jelenti (egy modellen belül akár több is).

Kis kitérő:
Az objektumok ún. vertexekből (nagyjából háromdimenziós pontot jelent) állnak. A shaderrel történő renderelésnek (megjelenítés/kirajzolás) alapvetően két lépését különböztetjük meg: Vertex shader és Pixel shader. Ahogy a nevük is mutatja, az előbbi csak annyiszor fut le egy képkocka létrehozása közben, ahány vertex látható éppen a képernyőn, az utóbbi viszont azokra a pixelekre (képpont), ahol látható az adott object. Tehát például egy 30 vertexet tartalmazó, egész képernyőt befedő objektum 800x600-as felbontáson történő kirajzolása közben a vertex shader 30x fut le, míg a pixel shader 480000x (Természetesen ez az egyszerű eset, hiszen akár többször is lefuthat a pixel shader, ha például először kirajzolunk egy teáskannát, majd elé egy falat. Lefut a teáskannára is először, majd a falra. Erre kitaláltak többféle gyorsító eljárást is, esetleg későbbi bejegyzésben írok róluk).
Ezért is szoktak ún. lowpoly objektumokat használni. Pontosabb lenne a lowtriangle elnevezés, hiszen játékoknál háromszögekkel számlunk (három vertex foglal be egy háromszöget).

Nézzük akkor sorban őket (a számításokba nem mennék bele, inkább csak bemutató) :

- Alapvetően az ún. Normal mapping-et használjuk, ami nagyjából azt jelenti, hogy a felületen kis "buckákat" szimulálunk. Igen, szimuláljuk, hiszen "igazából" nincs ott annyi vertex, mint amennyinek látszik. Ez is felfogható valamilyen szinten gyorsító eljárásnak, hiszen nem kell lowpoly helyett highpoly modelleket kirajzolni.


- Most következzen a Cubemap (environment) reflection. Visszatükrözi az adott "dobozra" ráfeszített textúrákat. Ez nem "igazi" visszatükrözés, ahhoz raytracingre (sugárkövetés) lenne szükség (a kabin üvegén látszik).


- Végül az Alpha mapping: Ha van a diffuse (szín) textúránk mellé egy fekete-fehér alpha/opacity (átlátszóság) textúránk, akkor meg tudjuk oldani, hogy például a faág levelei ne modellek legyenek, hanem egy egyszerű plane (~lap) levél kinézetű átlátszósági textúrával. Erre mutatok példát:


Végül annyit tennék hozzá, hogy mindegyikkel képesek vagyunk valós idejű (real-time) árnyékot számolni. Talán későbbi postban erről is bővebben.
Ennyi fért most ebbe a rövid kis áttekintőbe. Alant látható egy összefoglaló videó az egészről.



Nincsenek megjegyzések:

Megjegyzés küldése