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

május 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 31

Cukor a szemben 1

2009.03.31. 18:50 :: syam

Eye-candy vagyis hogyan tudjuk az egyszerű háromszögeket minél látványosabban megjeleníteni a képernyőn.

Nevezzük ezeket egyszerűen effekteknek, melyekből alapvetően kétféle lehet: inprocess és postprocess. A megkülönböztetés alapja az, hogy a háromszög közvetlen renderelésekor történik-e az effekt alkalmazása (inprocess) vagy a már lerenderelt, color bufferben lévő képre alkalmazzuk (postprocess) azt.

Inprocess technikák:

Elsőként tekintsük át az árnyalással kapcsolatos technikákat.

A legegyszerűbb ebből a szempontból a ma már szinte történelminek számító per-vertex árnyalás. Már itt is "extraként" emlegették a a spekulár árnyalási összetevő kiszámítását, hiszen az árnyalási egyenletet (jóval) költségesebbé teszi. Hiába nagyon régi ez az árnyalási forma nem elhanyagolható ma sem, hiszen (elméletileg) ennek használatával érhető el a legnagyobb teljesítmény valamint nincs tulzottan magas hardverigénye sem, amely lehetővé teszi, hogy az effekt használható szinte minden konfiguráción.

Az árnyalást fragmentenként is kiszámolhatjuk ebből eredően ezen technikák jóval költségesebbek. Ahhoz azonban olyan videokártya ajánlott, amiben van legalább vertex shader és "elegendő" textura unitot képes kezelni, de leginkább vertex + pixel shader kombinációja szükséges mindehhez (de pl. legelvetemültebb esetben cpuval számolhatjuk ki a fényvektorokat, texture environmenttel normalizálhatjuk a vektorokat és vehetünk skalár szorzatot belőlük, de ehhez legalább 3 textura unit szükséges és amelyik videokártya már rendelkezik ennyivel ott már várható vmilyen pixel shader is).

Miután per-fragment értékeljük ki az árnyalási egyenletet lehetőség nyílik arra is, hogy az adott felületet az árnyalás során további részletességgel gazdagítsuk. Ezt az effekt-családot hívjuk bump mappingnek, amelyben az elnevezések sokszor nem egyértelműek ill. nem egy értelemben használatosak. Három nagy csoportjuk van: tangent space bump mapping, object space bump mapping és emboss bump mapping. Ez utóbbit csak megemlítem, mert kilóg a sorból (a legolcsóbb és talán a legrégebbi bump mapping effekt, ma már alig használt, müködési és használati elve más, mint az előzőké)

Működési elvük igen egyszerű: a felület normálját avagy a fény vektort elforgatva a felületet látszólagosan egyenetlenségekkel (repedések, lyukak) tarkíthatjuk az ún. normal map segítségével. A normal mapet a height mapből, amelyet néha bump mapként is emlegetnek, állítják elő és a felület relatív magasságait tárolja.

A két módszer abban különbözik egymástól, hogy

  • a tsbm, a felületre érkező fény vektorát forgatja el az un. tangent spacebe és a normal map ebben a térben tárolja a normálokat (mivel a tangent spaceben nincs értelme a negatív z-iránynak, elégséges az x,y komponenst tárolni - lásd félgömb ujraleképzés)
  • az osbm, a felület normálját forgatja a model space-be és a normal map az objektum terében tárolja a normálokat

és ebből következik a nagy hátránya, hogy egy normal mapet csak egy adott modellhez lehet használni. Ezen ok miatt ma a tsbm a leginkább elterjedt (de pl. domborzat árnyalásához kitünő!!)

Természetesen ezzel a technikával az árnyalás diffúz és spekulár kompononse is kiszámítható és nagyon sok esetben - figyelembe véve a technika per-fragment voltát -létrehoznak egy un. specular mapet is (az effekt neve specular mapping), amely topológiailag megfelel a normal mapnek, de nem normálokat, hanem a felület tükröződési képességét tárolja texelenként, mivel a legtöbb felület nem minden pontja ugyanolyan mértékben veri vissza a fényt.

 

A következő technikák önmagukban általában nem használatosak, hanem valamelyik bump mapping technikát egészítik ki hangsúlyozva ezzel a felület részletességét.

Felületi árnyékolás, amikor a felület virtuális domborulatai árnyékot vethetnek, de természetesen csakis egymásra; ez az ún. interactive horizon mapping.

Az ún. displacement mapping technika virtuális formái vagyis amikor extra vertexek létrehozása nélkül érzékeltetjük a felület domborzatát: igen egyszerű és olcsó effekt a parallax mapping (teljes nevén parallax mapping with offset limiting) másik nevén parallax occlusion mapping, amely azonban könnyen renderelési hibákat okozhat. Jóval bonyolultabb változat a relief mapping, amely korrekt módon képes megjeleníteni a felület virtuális összetettségét pláne akkor, ha önárnyékolást is számol (amely természetesen igen-igen költséges). Mindkettő használatához szükséges height map hasonlóképpen a normal map generálásához.

Összegezve, manapság forward shadinget használva egy "fullextrás" effekt: bump mapping + specular mapping + relief mapping önárnyékkal

Ami még jön a témához:

Fresnel effekt

detail mapping, detail normal mapping 

environment mapping, environment bump mapping

multilayer material

esetleg még subsurface scattering

Szólj hozzá!

Címkék: inprocess postprocess tangent space bump mapping object space bump mapping emboss bump mapping displacement mapping

A bejegyzés trackback címe:

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

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