1 / 33

„ Mappings ” 2.

„ Mappings ” 2. Jeni László Attila jedi @ inf.elte.hu Klár Gergely tremere @ elte.hu. Miről lesz szó?. Bump mapping , Normal mapping Displacement mapping Environment mapping. Bucka és normál leképzés.

spence
Download Presentation

„ Mappings ” 2.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Miről lesz szó? • Bumpmapping, Normalmapping • Displacementmapping • Environmentmapping

  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 • http://www.filterforge.com/ • Rajzoló programmal • http://nifelheim.dyndns.org/~cocidius/normalmap/ • http://developer.nvidia.com/object/photoshop_dds_plugins.html

  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-SpaceNormalMapping) • 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-SpaceNormalMapping

  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: • http://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter08.html • Tangens, bitangens vektorok számítása: • http://www.terathon.com/code/tangent.html

  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 (cubemaps) 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. 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 refractfü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);

  26. 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;

  27. 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: floatpower = 5; floatreflectionCoefficient = 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);

  28. 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 verexshader-bena modellt eltoljuk a hátsó vágósíkhoz, textúra-koordinátáknak pedig a csúcspontok eredeti pozícióit használjuk.

  29. További környezet leképzésen alapuló technikák • SkyBox/SkySphere • Példa kód: voidVertexShaderFunction(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; }

More Related