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

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

Hasonló előadás


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

1 Grafikus játékok fejlesztése Szécsi László 2011.03.30. g11-physics
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 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
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 + (duN x 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 bias scale 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 bias scale 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:

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 csepp pályája völgy hullám terjedése

36 2.5D imposztorok Gö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 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
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
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 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 a b c

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önnyen számolható belőle IVM → sík → metszéspont → baricentrikus koordináták → interpoláció

49 Transzformált objektumok

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

51 Térfelosztás objektumok Elő- feldolgozás Sugár követés Térpartícionáló
adatstruktúra Első metszéspont 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

52 Reguláris térháló előfeldolgozás bejárás minden cellára objektumlista
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 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
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ó Verem

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

Hasonló előadás


Google Hirdetések