Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Jeni László Attila Klár Gergely

Hasonló előadás


Az előadások a következő témára: "Jeni László Attila Klár Gergely"— Előadás másolata:

1 Jeni László Attila jedi@inf.elte.hu Klár Gergely tremere@elte.hu
„Mappings” 2. Jeni László Attila Klár Gergely

2 Miről lesz szó? Bump mapping, Normal mapping Displacement mapping
Environment mapping

3 Bucka és normál leképzés
Feladat: részletgazdagabbá akarunk tenni egy felületet, hogy apró egyenetlenségek is meglátszódjanak rajta, miközben a geometriát nem akarjuk megváltoztatni

4 Bucka és normál leképzés
Tároljuk a felületi normálvektor perturbációt egy térképben. Ezeket az információkat felhasználva árnyalásnál módosítjuk a visszaverődő S vektor irányát (és ezáltal a megfigyelő által észlelt fényerő mértékét). Nem módosítunk a geometrián.

5 Bucka és normál leképzés
Bucka térkép Normál térkép

6 Bucka leképzés

7 Bucka térkép előállítása
A nagyobb tesszellációval rendelkező modell segítségével meghatározhatjuk a bucka térképeket a kisebb tesszelláltságú modellhez.

8 Bucka térkép előállítása
Procedurális textúrák segítségével Rajzoló programmal

9 Normál térkép használata
A kép RGB csatornáin XYZ értékeket tárolunk Ezek értéke [0,1] tartományban lehet De egy normálvektor koordinátái [-1, 1] között vehetnek fel értéket! NormalVector = (NormalTexture-0.5)*2

10 Normál térkép használata
Az így kapott vektor adja az adott pontbeli normálvektor. Probléma: fontos a normál térkép sodrása! Jobbkezes térkép balkezes rendszerben hibás árnyékokat eredményez, és viszont!

11 Textúra és világ koordináta rendszerek
A normál térképben tárolt vektorok a textúra síkjához képest adottak, azaz helyes értéket (transzformációk nélkül) csak az XY síkon fekvő, és a +Z felelő néző objektumokra adnak

12 Normál térképek transzformálása (Texture-Space Normal Mapping)
A probléma, hogy a textúra-tér és az objektum-tér inkonzisztens egymással Egy megoldás, ha az fény számításnál használt vektorokat (directionToLight, directionToCamera) elforgatjuk a textúra-térbe. Ez csak ritkán használható megoldás, mivel az elforgatás csak objektumonként adott, de nekünk felületenként (gyak. háromszögenként) lenne rá szükségünk

13 Texture-Space Normal Mapping

14 Normál, tangens, bitangens
Egy forgatási mátrix megadható a fenti három vektor segítségével Célunk, hogy a textúra-tér XY síkja a „normál leképezés alá kerülő” háromszög síkjába kerüljön Ha ismert a fenti három vektor, akkor belőlük képzett forgatási mátrix pontosan ezt a transzformációt végzi el.

15 Normál, tangens, bitangens vektorok számítása
Ha a háromból kettő adott, akkor a harmadik számítható az alábbi képletek alapján: N általában adott Sok 3D-s program támogatja a tangens és/vagy bitanges exportálását A bitangest (tévesen) szokás néha binormálisnak is nevezni

16 További olvasnivalók Leírás a bucka illetve normál leképezésekről, shader kódokkal: Tangens, bitangens vektorok számítása:

17 Eltolás leképzés Displacement mapping
A textúrázást felhasználhatjuk arra is, hogy elmozdítsuk az objektum felületi pontjait.

18 Előnyök, hátrányok Valóban megváltoztatja a felület geometriáját, nem csak azt az érzetet kelti Ellenpélda normál leképezésnél: Csak annyira lesz részletes, amennyire a felület felbontása az:

19 Környezet leképzés Tükröző és törő felületű objektumok modellezésére használhatjuk. Nem szükséges hozzá pontos fizikai modellezés Visszaverődő sugár: A kamerából induló nézeti fénysugár és az objektum metszéspontjához a visszaverődő fénysugár és a közvetítőfelület metszéspontját rendeljük (environment mapping ).

20 Környezet leképzés Gömbi leképzéssel:

21 Környezet leképzés Blinn-Newell leképzéssel:

22 Környezet leképzés Kocka leképzéssel:

23 Kocka textúrák A kocka textúrák (cube maps) különleges, hat lapból álló textúrák, amik három koordinátával címezhetők. A hat lap a +X, -X, +Y, -Y, +Z, -Z irányoknak felelnek meg, mindegyik egy lapja a kockának.

24 Környezet leképzés, tükröződés
A kocka leképzéssel bonyolult transzformációk nélkül megkaphatjuk a textúra koordinátákat. Az kocka textúra megfelelő pontját a kamerába mutató vektor normál vektorra vett tükörképe adja. A kapott pontból kell olvasni a textúrából float3 R = reflect(-directionToCamera, input.Normal); float4 envColor = texCUBE(envMapSampler, R);

25

26 Környezet leképzés, fénytörés
Hasonlóan járunk el, mint a tükröződés esetén Fénytörés során, a sugár elhajlását a Snellius–Descartes-törvény adja, ami szerint Az kocka textúra megfelelő pontját a refract függvény adja. A kapott pontból kell olvasni a textúrából float3 R = refract(-directionToCamera, input.Normal, 1.01); float4 envColor = texCUBE(envMapSampler, R);

27

28 További környezet leképzésen alapuló technikák
Chromatikus diszperzió R,G,B csatornánként külön számítjuk a fénytörés, kissé eltérő törésmutatókkal. Példa kód: float4 envColor = 1; float3 R = refract(-directionToCamera, input.Normal, 1.01); envColor.r = texCUBE(envMapSampler, R).r; R = refract(-directionToCamera, input.Normal, 1.04); envColor.g = texCUBE(envMapSampler, R).g; R = refract(-directionToCamera, input.Normal, 1.07); envColor.b = texCUBE(envMapSampler, R).b;

29

30 További környezet leképzésen alapuló technikák
Fresnel hatás Egyszerre használunk tükröződést illetve fénytörést A visszavert és átengedett fény arányát a beesési szög és az anyagjellemzők határozzák meg Példa kód: float power = 5; float reflectionCoefficient = max(0, min(1, 1-pow(dot(directionToCamera, input.Normal), power))); float3 Rfl = reflect(-directionToCamera, input.Normal); float3 Rfr = refract(-directionToCamera, input.Normal, 1.05); float4 envColor = reflectionCoefficient*texCUBE(envMapSampler, Rfl)+(1-reflectionCoefficient)*texCUBE(envMapSampler, Rfr);

31

32 További környezet leképzésen alapuló technikák
SkyBox/SkySphere Egy olyan modellt hozunk létre, ami teljesen tartalmazza a színteret, végtelenül távol van, elérni nem lehet, de „forgásra” változik. Ehhez a verex shader-ben a modellt eltoljuk a hátsó vágósíkhoz, textúra-koordinátáknak pedig a csúcspontok eredeti pozícióit használjuk.

33 További környezet leképzésen alapuló technikák
SkyBox/SkySphere Példa kód: void VertexShaderFunction(float3 Position : POSITION0, out float4 SkyPos : POSITION0, out float3 SkyCoord : TEXCOORD0) { float3 worldPosition = mul(Position, World); float3 viewPosition = mul(worldPosition, View); SkyPos = mul(float4(viewPosition, 1), Projection).xyww; SkyCoord = Position; }


Letölteni ppt "Jeni László Attila Klár Gergely"

Hasonló előadás


Google Hirdetések