1 / 55

Displacement mapping

Displacement mapping. Grafikus játékok fejlesztése Szécsi László 2011.03.30 . g 11 - physics. Displacement mapping. egyszer ű geometria + fel ület elmozdulások textúrában bucka leképezés [ bump mapping ] normal mapping parallax mapping sphere tracing vertex displacement.

nieve
Download Presentation

Displacement mapping

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. Displacement mapping Grafikus játékok fejlesztése Szécsi László 2011.03.30. g11-physics

  2. Displacement mapping • egyszerű geometria + felület elmozdulások textúrában • bucka leképezés [bump mapping] • normal mapping • parallax mapping • sphere tracing • vertex displacement

  3. Elmozdulás viszonyítási rendszere • modellezési térben [object space] • egyszerű • új pos = régi pos + elmozdulás • nem jó, ha • bump map: elmozdulás mindig a normál mentén • nem 1-1 az UV leképezés • pl. ismétlődő minta • változik a felület orientációja modelltérben • pl. karakteranimáció • más vertex shader trükkök

  4. Elmozdulás viszonyítási rendszere • érintőhöz képest [tangent space] • ki kell számítani a bázisvektorokat • normál, tangens, binormál minden vertexre Binormál: B= sv Normál: N= su x sv B x N = T N x T= B Érintő(tangens): T = su s(u,v)

  5. Tangent frame DirectXben ki/be LPD3DXMESH D3DXComputeTangentFrameEx(mesh, D3DDECLUSAGE_TEXCOORD, 0, D3DDECLUSAGE_TANGENT, 0, D3DDECLUSAGE_BINORMAL, 0, D3DDECLUSAGE_NORMAL, 0, D3DXTANGENT_DONT_NORMALIZE_PARTIALS | D3DXTANGENT_GENERATE_IN_PLACE | D3DXTANGENT_CALCULATE_NORMALS, NULL, 0.01f, 0.25f, 0.01f, NULL, NULL); ezekbe a vertex buffer elemekbe kell rakni a számított vektorokat vektorok hossza jelezheti a texel/hossz arányt

  6. Bump map • textúrában csak buckamagasság (elmozdulás a “sima” normál mentén) • ebből kell kiszámítani a “rücskös” normálvektort az árnyaláshoz

  7. Normálvektor a buckaderiváltakból N Nr s(u,v): sima felület r(u,v): rücskös felület r(u,v) = s(u,v) + d(u,v) N(u,v) = ru x rv = (su+duN+d Nu) x (sv+dvN+d Nv)= su x sv + (duNx sv + dv su x N) d(u,v) N Normálvektor perturbáció N+ (du T+ dv B)

  8. Normal map • ugyanaz, csak nem kell a deriváltakkal vacakolni, mert előre ki van számítva és letárolva float4 psNormalMapped(VS_OUTPUT IN) : COLOR { //mátrix a vektorokból float3x3 ModelToTangent = TransfModelToTangent(IN.Tangent, IN.Binormal, IN.Normal ); //tangent space normál kiolvasása float3 tNormal = tex2D(NormalMapSampler, IN.TexCoord).rgb; //világ normál float3 mNormal = normalize( mul( tNormal, ModelToTangent ) ); //ezzel lehet árnyalni ...

  9. Parallax map • normal map + kis trükk • új pozícióval aztán normal map + texture map scale bias közelítő felület rücskös felület új textúra pozíció eredeti felület

  10. Parallax map HLSL float3 tView = mul(ModelToTangent, worldViewDir); float h = tex2D(heightMap, tex) * HEIGHT_SCALE + HEIGHT_BIAS; float2 newTex = tex + h * tView.xy / tView.z; innen ugyanaz mint a normal map, csak az új tex koordinátát használjuk mindenre ? h tView.z tView.xy

  11. Bump és parallax

  12. Offset limited parallax map • Parallax meredek szögekre tView.z-vel osztás miatt nagyon messziről olvas scale bias közelítő felület rücskös felület új textúra pozíció eredeti felület

  13. Offset limited parallax map • Legyen a max. korrekció a magasság • Hagyjuk el az osztást • ha tView.z  1, ugyanaz • ha tView.z  0, a limitálás miatt tView.xy / tView.z → tView.xy kell float h = tex2D(heightMap, tex) * HEIGHT_SCALE + HEIGHT_BIAS; float2 newTex = tex + h * tView.xy / tView.z ;

  14. Parallax és offset limited parallax

  15. Slope parallax közelítő érintőfelület rücskös felület új textúra pozíció eredeti felület

  16. Slope parallax float h = tex2D(heightMap, tex) * HEIGHT_SCALE + HEIGHT_BIAS; float3 tNormal = tex2D(normalMap, tex); float2 newTex = tex + h * tNormal.z / dot(tNormal, tView) * tView.xy; offset limited: float2 newTex = tex + h * tNormal.z / dot(tNormal, tView) * tView.xy;

  17. Offset limited parallax és slope parallax

  18. Iteratív keresés • Magasságmező-sugár metszéspont keresés • Parallax is erre közelítés

  19. Iteratív parallax

  20. Slope parallax és iteratív parallax

  21. Bináris keresés

  22. Bináris keresés

  23. Szekáns keresés

  24. Lineáris keresés • Első pont megtalálás legyen biztos • Relief mapping, steep parallax mapping

  25. Lineáris keresés

  26. Extra információ map • Pyramidal displacement tracing • Sphere tracing • Cone tracing

  27. Sphere tracing 3D textúra üres gömb sugarakkal

  28. Sphere tracing

  29. Cone tracing 2D textúra üres kúp nyílásszögekkel

  30. Cone tracing

  31. Procedurális csúcs elmozdítás • procedurális modell • konkrét geometria helyett az azt előállító algoritmus paramétereit adjuk meg • pl. természeti jelenségek • nagy kiterjedés, nagy részletesség, összetett dinamizmus • nem működik a klasszikus munkamenet • modellező eszköz → háromszögháló + keyframe • háromszögháló megjelenítése grafikus HWen

  32. Procedurális modell • kompakt leírás • nézetfüggő kibontás • fizikai alapokon nyugvó animáció

  33. Procedurális modellek megjelenítése • minél később bontsuk ki a modellt • nézetfüggően • grafikus kártyán • mag-geometria rajzolása • geometria árnyaló új geometria gyártás • csúcspont árnyaló felszín változtatás • képpont árnyaló sugárkövetés • fizikai szimuláció, modell kibontása és a megjelenítés egyidőben

  34. Példa: óceán • néhány különböző hullámhosszú hullámsorozat szuperpozíciója • nézetfüggő oceán-sík • felületi pontok elmozdítása a hullámok mechanikája alapján • sekély víz, part figyelembe vétele • partra futó hullámok, hab • tarajos hullámok • lebegő testek

  35. Nyílt víz • a nyílt óceánon a felületi cseppecskék körmozgást végeznek • trochoid hullámforma hullámhossz gerinc amplitúdó hullámmagasság völgy csepp pályája hullám terjedése

  36. 2.5D imposztorokGömbplakátok

  37. Billboard vágási problémák részecske billboard

  38. Billboard felbukkanási problémák Frame A Frame B

  39. Mélység kép: Spherical billboards

  40. Sugárkövetés a GPUn

  41. A grafikus kártya képességei • GPU • nagy teljesítmény • párhuzamosítás • pipeline • korlátok • inkrementális képszintézisre alkották • pár regiszternyi memória • korlázott dinamikus program-végrehajtás (flow control: if, while)

  42. Képszintézis pixel

  43. A sugárkövetés szerepe • sugárkövetés • képszintézis • árnyalási egyenlet numerikus megoldása • minták: fényutak • legáltalánosabb módszer: sugárkövetés • globális illuminációs módszerek • photon tracing • photon map • virtuális fényforrások

  44. Láthatóság a szemből pixel ray(t) = eye + v ·t, t > 0 FirstIntersect(ray  t, iobject, x) t = FLT_MAX; FOR each object tnew = Intersect( ray, object ); // < 0 if no intersection IF (tnew > 0 && tnew < t ) t = tnew, iobject = object ENDFOR IF (t < FLT_MAX) x = eye + v ·t; RETURN (t, iobject, x); RETURN „no intersection” END

  45. Sugárkövetés primitívjei • olyan alakzatok, amire a sugár-objektum metszéspont-számítás elvégezhető • sík • kvadratikus felületek xAxT = 0 • gömb, ellipszoid, henger, kúp, etc. • tórusz • háromszög • az interaktív grafikában úgyis háromszöghálókkal kell dolgoznunk

  46. Metszéspont számítás: háromszög r3 p r1 r2 r1 1. Síkmetszés: (ray(t) - r1) ·n = 0, t > 0 normál: n = (r2 - r1) x (r3 - r1) 2. A metszéspont a háromszögön belül van-e? ((r2 - r1) x (p - r1)) ·n > 0 ((r3 - r2) x (p - r2)) ·n > 0 ((r1 - r3) x (p - r3)) ·n > 0 Felületi normális: n vagy „shading normals”

  47. a b c Sugár-háromszög metszés • három feladat • sugár-sík metszéspont • pont-háromszög tartalmazás • csúcsokban adott értékek interpolálása • textúra-koordináták • normálvektorok • kettőt egy csapásra • baricentrikus koordináták számítása p

  48. Sugár-háromszög metszés • v1·a+ v2·b + v3·c = p • [a b c] = p[v1 v2 v3]-1 • IVM • ideális háromszög-reprezentáció • a síkegyenlet is könnyenszámolható belőle • IVM → sík → metszéspont → baricentrikus koordináták → interpoláció

  49. Transzformált objektumok T1 T1-1 T2 T2 -1

  50. Sugárgép [ray engine] sugár textúra sugár találatok RT primitívek fetch z-test Pixel shader ray-primitive intersection draw full screen quad

More Related