Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaHanna Szőkené Megváltozta több, mint 10 éve
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.