displacement mapping

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

Upload: nieve

Post on 23-Feb-2016

102 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Bevezets

Displacement mappingGrafikus jtkok fejlesztseSzcsi Lszl2011.03.30. g11-physicsDisplacement mappingegyszer geometria + fellet elmozdulsok textrbanbucka lekpezs [bump mapping]normal mappingparallax mappingsphere tracingvertex displacementElmozduls viszonytsi rendszeremodellezsi trben [object space]egyszerj pos = rgi pos + elmozdulsnem j, habump map: elmozduls mindig a norml mentnnem 1-1 az UV lekpezspl. ismtld mintavltozik a fellet orientcija modelltrbenpl. karakteranimcims vertex shader trkkkElmozduls viszonytsi rendszererinthz kpest [tangent space]ki kell szmtani a bzisvektorokatnorml, tangens, binorml minden vertexre

s(u,v)rint(tangens):T = suBinorml:B = svNorml:N = su x sv B x N = TN x T= BTangent frame DirectXbenD3DXComputeTangentFrameEx(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 LPD3DXMESHezekbe a vertex buffer elemekbekell rakni a szmtott vektorokatvektorok hossza jelezhetia texel/hossz arnytBump maptextrban csak buckamagassg (elmozduls a sima norml mentn)ebbl kell kiszmtani a rcsks normlvektort az rnyalshozs(u,v): sima felletr(u,v): rcsks fellet

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)Nd(u,v)Normlvektor perturbciNN + (du T + dv B)NrNormlvektor a buckaderivltakblNormal mapugyanaz, csak nem kell a derivltakkal vacakolni, mert elre ki van szmtva s letrolvafloat4 psNormalMapped(VS_OUTPUT IN) : COLOR{//mtrix a vektorokblfloat3x3 ModelToTangent = TransfModelToTangent(IN.Tangent, IN.Binormal, IN.Normal );//tangent space norml kiolvassafloat3 tNormal = tex2D(NormalMapSampler, IN.TexCoord).rgb;//vilg normlfloat3 mNormal = normalize( mul( tNormal, ModelToTangent ) );//ezzel lehet rnyalni...Parallax mapnormal map + kis trkk

j pozcival aztn normal map + texture maprcsks felleteredeti felletkzelt felletj textra pozciscalebiasParallax map HLSLfloat3 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 koordintt hasznljuk mindenre

tView.xytView.zh?Bump s parallax

Offset limited parallax maprcsks felleteredeti felletkzelt felletj textra pozciscalebiasParallax meredek szgekre tView.z-vel oszts miatt nagyon messzirl olvasOffset limited parallax mapLegyen a max. korrekci a magassgHagyjuk el az osztstha tView.z 1, ugyanazha tView.z 0, a limitls miatt tView.xy / tView.z tView.xy kellfloat h = tex2D(heightMap, tex) * HEIGHT_SCALE + HEIGHT_BIAS;float2 newTex = tex + h * tView.xy / tView.z ;Parallax s offset limited parallax

Slope parallaxrcsks felleteredeti felletj textra pozcikzelt rintfelletSlope parallaxfloat 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;Offset limited parallax s slope parallax

Iteratv keressMagassgmez-sugr metszspont keressParallax is erre kzeltsIteratv parallaxSlope parallax s iteratv parallax

Binris keressBinris keress

Szekns keressLineris keressEls pont megtalls legyen biztos

Relief mapping, steep parallax mappingLineris keress

Extra informci mapPyramidal displacement tracingSphere tracingCone tracingSphere tracing3D textrares gmbsugarakkalSphere tracing

Cone tracing2D textrares kpnylsszgekkelCone tracing

Procedurlis cscs elmozdts procedurlis modellkonkrt geometria helyett az azt elllt algoritmus paramtereit adjuk megpl. termszeti jelensgeknagy kiterjeds, nagy rszletessg, sszetett dinamizmusnem mkdik a klasszikus munkamenetmodellez eszkz hromszghl + keyframehromszghl megjelentse grafikus HWenProcedurlis modellkompakt lersnzetfgg kibontsfizikai alapokon nyugv animciProcedurlis modellek megjelentseminl ksbb bontsuk ki a modelltnzetfggengrafikus krtynmag-geometria rajzolsageometria rnyalj geometria gyrtscscspont rnyalfelszn vltoztatskppont rnyalsugrkvetsfizikai szimulci, modell kibontsa s a megjelents egyidbenPlda: cennhny klnbz hullmhossz hullmsorozat szuperpozcijanzetfgg ocen-skfelleti pontok elmozdtsa a hullmok mechanikja alapjnsekly vz, part figyelembe vtelepartra fut hullmok, habtarajos hullmoklebeg testekNylt vza nylt cenon a felleti cseppecskk krmozgst vgeznek

trochoid hullmformahullmhosszhullmmagassgamplitdcsepp plyjahullm terjedsegerincvlgy2.5D imposztorokGmbplaktok

Billboard vgsi problmk

billboardrszecske

Frame AFrame B

Billboard felbukkansi problmk

Spherical billboards

Mlysg kp:

Sugrkvets a GPUnA grafikus krtya kpessgeiGPUnagy teljestmnyprhuzamostspipelinekorltokinkrementlis kpszintzisre alkottkpr regiszternyi memriakorlzott dinamikus program-vgrehajts (flow control: if, while)Kpszintzis

pixel

A sugrkvets szerepesugrkvetskpszintzisrnyalsi egyenlet numerikus megoldsamintk: fnyutaklegltalnosabb mdszer: sugrkvetsgloblis illumincis mdszerekphoton tracingphoton mapvirtulis fnyforrsokLthatsg a szemblpixelray(t) = eye + v t, t > 0FirstIntersect(ray t, iobject, x) t = FLT_MAX; FOR each objecttnew = Intersect( ray, object );// < 0 if no intersectionIF (tnew > 0 && tnew < t ) t = tnew, iobject = object ENDFOR IF (t < FLT_MAX) x = eye + v t; RETURN (t, iobject, x); RETURN no intersectionENDSugrkvets primitvjeiolyan alakzatok, amire a sugr-objektum metszspont-szmts elvgezhetskkvadratikus felletek xAxT = 0gmb, ellipszoid, henger, kp, etc.truszhromszgaz interaktv grafikban gyis hromszghlkkal kell dolgoznunkMetszspont szmts: hromszg1. Skmetszs: (ray(t) - r1) n = 0, t > 0norml: n = (r2 - r1) x (r3 - r1)

2. A metszspont a hromszgn bell van-e?((r2 - r1) x (p - r1)) n > 0 ((r3 - r2) x (p - r2)) n > 0 ((r1 - r3) x (p - r3)) n > 0 r1r1r2pr3Felleti normlis: nvagy shading normalsSugr-hromszg metszshrom feladatsugr-sk metszspontpont-hromszg tartalmazscscsokban adott rtkek interpollsatextra-koordintknormlvektorokkettt egy csapsrabaricentrikus koordintk szmtsaabcpSugr-hromszg metszsv1a + v2b + v3c = p[a b c] = p[v1 v2 v3]-1

IVMidelis hromszg-reprezentcia skegyenlet is knnyen szmolhat belleIVM sk metszspont baricentrikus koordintk interpolciTranszformlt objektumokT1T2T1-1T2 -1Sugrgp [ray engine]sugr textraRT primitvekfull screenquadPixel shaderray-primitiveintersectiondrawfetchz-testsugr tallatokTrfelosztsAdatstruktra:Ha ismert a sugr, akkor a potencilis metszett objektumok szmt cskkentiHa a potencilisak kzl tallunk egyet, akkor a tbbi nem lehet kzelebbEl-feldolgozsobjektumokTrpartcionladatstruktraSugrkvetsElsmetszspontRegulris trhlelfeldolgozsminden cellra objektumlistabejrskvetkez cellra lpsminden objektumra a cellban metszspontszmtsha van metszsont a celln bell, kszkd-fakd-fabinris fa [BSP], koordintaskokkal prhuzamos vgskok

legjobb trfelosztsszntrtl fggetlenl hatkonyrzketlen a teskanna a stadionban esetrekd-fa rekurzv bejrsaVeremsugrkvets: rekurzv bejrs

GPU: verem nlkl minden cella utn a gykrbl indulvarosszabb mint a CPU implementciA laza kd-faklasszikusobjektum tartozhat tbb cellhozkilghat a celljbl

levl-lista bonyolultextra ellenrzseklazacellk tlapoldhatnakobjektum csak egy cellbannem lghat ki

egyetlen rendezett tmbkt metszspont prhuzamosan