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