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

Displacement mapping Grafikus játékok fejlesztése Szécsi László 2011.03.30. g11-physics.

Hasonló előadás


Az előadások a következő témára: "Displacement mapping Grafikus játékok fejlesztése Szécsi László 2011.03.30. g11-physics."— Előadás másolata:

1 Displacement mapping Grafikus játékok fejlesztése Szécsi László 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 s(u,v) Érintő(tangens): T = s u Binormál: B = s v Normál: N = s u x s v B x N = T N x T= B

5 Tangent frame DirectXben 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); ki/be LPD3DXMESH 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 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)  = r u x r v = (s u +d u N+d N u ) x (s v +d v N+d N v )= s u x s v + (d u N x s v + d v s u x N) N d(u,v) Normálvektor perturbáció N N + (d u T + d v B) Nr Normálvektor a buckaderiváltakból

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 rücskös felület eredeti felület közelítő felület új textúra pozíció scale bias

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 tView.xy tView.z h ?

11 Bump és parallax

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

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 rücskös felület eredeti felületúj textúra pozíció közelítő érintő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

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 hullámmagasság amplitúdó csepp pályája hullám terjedése gerinc völgy

36 2.5D imposztorok Gömbplakátok

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

38 Frame AFrame B Billboard felbukkanási problémák

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

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 xAx T = 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 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 r1 r2 p r3 Felületi normális: n vagy „shading normals”

47 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 a b c p

48 Sugár-háromszög metszés v 1 ·a + v 2 ·b + v 3 ·c = p [a b c] = p[v 1 v 2 v 3 ] -1 IVM ideális háromszög-reprezentáció – a síkegyenlet is könnyen számolható belőle IVM → sík → metszéspont → baricentrikus koordináták → interpoláció

49 Transzformált objektumok T1T1 T2T2 T 1 -1 T 2 -1

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

51 Térfelosztás Adatstruktúra: Ha ismert a sugár, akkor a potenciális metszett objektumok számát csökkenti Ha a potenciálisak közül találunk egyet, akkor a többi nem lehet közelebb Elő- feldolgozás objektumok Térpartícionáló adatstruktúra Sugár követés Első metszéspont

52 Reguláris térháló előfeldolgozás – minden cellára objektumlista bejárás – következő cellára lépés – minden objektumra a cellában metszéspontszámítás ha van metszésont a cellán belül, kész

53 kd-fa – bináris fa [BSP], koordinátasíkokkal párhuzamos vágósíkok – „legjobb” térfelosztás színtértől függetlenül hatékony érzéketlen a „teáskanna a stadionban” esetre

54 kd-fa rekurzív bejárása Verem sugárkövetés: rekurzív bejárás GPU: verem nélkül minden cella után a gyökérből indulva – rosszabb mint a CPU implementáció

55 A laza kd-fa klasszikus -objektum tartozhat több cellához -kilóghat a cellájából -levél-lista bonyolult -extra ellenőrzések laza -cellák átlapolódhatnak -objektum csak egy cellában -nem lóghat ki -egyetlen rendezett tömb -két metszéspont párhuzamosan


Letölteni ppt "Displacement mapping Grafikus játékok fejlesztése Szécsi László 2011.03.30. g11-physics."

Hasonló előadás


Google Hirdetések