Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaZsigmond Székely Megváltozta több, mint 8 éve
1
Anyagok, megvilágítás
2
Rendering egyenlet I(x, )=I e (x, )+ I(h(x,- ’ , ’) f r ( ’,x, ) cos ’d ’
3
Képszintézis = valós világ illúziója Tone mapping Valós világszínérzet pixelVirtuális világ
5
Irányok, irány halmazok : 3D Irány: , szögek 2 referencia iránytól Irány halmaz: térszög [sr] tartomány az egységgömbön Méret: tartomány területe Teljes halmaz: 4
6
Sugársűrűség (Radiancia): I(x,w) Egy egységnyi látható felület által egységnyi térszög alatt kibocsátott teljesítmény [Watt/ sr/ m2] dd dAdA dd I(x, ) = d dA cos d
7
Fény-felület kölcsönhatás x dd w( ’,x, ) d = Pr{foton d -ba megy | ’-ből jön} ’’ Visszaverődés valószínűség sűrűségfüggvénye: = f r ( ’,x, ) w( ’,x, ) cos BRDF: f r ( ’,x, ) [1/sr]
8
Rendering egyenlet I(x, )=I e (x, )+ I(h(x,- ’ , ’) f r ( ’,x, ) cos ’d ’ I = I e + I ’’ f r ( ’,x, ) h(x,- I(x, ) x ’’ I(h(x,- , )
9
f r ( ’,x, ) cos ’d ’ Albedo Tetszőleges irányú visszaverődés valószínűsége.
10
Absztrakt fényforrások ha csak egy irányból jön be fény, nem kell az integrál – pontfényforrás – irányfényforrás I(x, )=I e (x, )+ I(h(x,- ’ , ’) f r ( ’,x, ) cos ’d ’ I out = I in f r cos ’d ’ mezei jelöléssel I out =I in f r cos ’
11
Ambiens tag Lokális illumináció + ambiens tag GI L (V) l L l (L l )* f r (L l,N,V) cos l ’ + k a *L a
12
Mért BRDF adatok reprezentálása 11 11 22 22 BRDF 5-változós függvény: 1, 1, 2, 2, Tábla méret: 100x100x100x100x10 = 10 9
13
Matematikai BRDF modellek 11221122 Anyagcsaládra jellemző matematikai képlet frfr BRDF paraméterek
14
BRDF tulajdonságok 1. Pozitív 1. Pozitív 2. Szimmetrikus 2. Szimmetrikus 3. Energia megmaradást nem sértő: 3. Energia megmaradást nem sértő: a visszavert energia kisebb mint a beérkezőa visszavert energia kisebb mint a beérkező a visszaverési valószínűség 1-nél kisebba visszaverési valószínűség 1-nél kisebb f r ( ’,x, ) = f r ( ,x, ’)
15
Diffúz visszaverődés (Lambert) Radiancia a nézeti iránytól független Radiancia a nézeti iránytól független Szimmetrikus: BRDF a megvilágítástól is független Szimmetrikus: BRDF a megvilágítástól is független A BRDF konstans: A BRDF konstans: f r ( ’,x, ) = k d ( ) ’’ ’’
16
Lambert árnyalás I out =I in f r cos ’ I out =I in k d cos ’
17
Ideális visszaverődés Visszaverődés a tükörirányba Visszaverődés a tükörirányba A BRDF Dirac-delta: A BRDF Dirac-delta: itt nem a fényforrás, hanem a BRDF miatt nem kell integrálni itt nem a fényforrás, hanem a BRDF miatt nem kell integrálni f r ( ’,x, ) = r k r /cos ’ ’’ ’’ ’’ rr I out =I reflect k r
18
Spekuláris visszaverődés: Phong modell ’’ ’r’r ’’ ’r’r = diffúz + Kell egy függvény, ami nagy =0 -ra és gyorsan csökken I out =I in k s cos n
19
Diffúz+Phong anyagok 5 10 20 50n= diffúz Phong diffúz + Phong
20
Render target textures Input Assembler I. input streaming Vertex Shader Geometry Shader Vertex buffer Instance buffer Index buffer RESOURCESPIPELINE STAGESRENDER STATES Input layout Input Assembler II. primitive setup Primitive type Rasterizer face culling depth bias adjustment clipping homogenous division viewport transformation output filtering Fragment Shader Output merger stencil test depth test blending vertex data, instance data processed vertex data primitive data primitive strip data fragments with interpolated data fragment color and depth Output buffer Render target textures Depth-stencil texture Depth-stencil state Constant buffers and textures Constant buffers and textures Constant buffers and textures Shader program Blending state Viewport Filtering Cull mode Depth bias Uniform parameters Shader program Uniform parameters Shader program Uniform parameters Fill mode
21
Lépések I. vertexek összeállítása Vertex Shader – model trafó – árnyalás – view és proj trafó primitívek összeállítása Geometry Shader [csak DX10] – extra geometria előállítása
22
Lépések II. raszterizálás – hátsólap-eldobás – vágás – homogén osztás – viewport trafó Pixel shader – pixel szín meghatározása z-teszt blending
23
Vertexek összeállítása Vertex buffer – rekordok tömbje posnormaltexposnormaltexposnormaltex vertex
24
Vertex shader bejövő adat – uniform: model, view, proj mátrixok, fények,... – minden vertexre más: [pozíció, normál, szín, texcoord] kimenő adat – pozíció homogén normalizált képernyő koordinátákban – árnyalás eredménye [szín] – bármi más [normál, texcoord]
25
Primitívek összeállítása non-indexed – vertex bufferben egymás után következők 1234561234 triangle listtriangle strip 5 1 2 3 4 5 1 2 3 4 5 6 1234 triangle fan 5 1 2 3 4 5
26
Lapeldobás körüljárási irány (képernyőn) alapján eldobhatunk lapokat ha a modellünkben (index bufferben) konzisztens a háromszögek körüljárási iránya, ezzel eldobhatjuk a test hátsó lapjait – a belsejét úgysem látjuk, ha poliéder
27
Vágás ami kilógna a képernyőről, vágjuk le normalizált képernyőkoordinátákban – [-1, -1, 0] [1, 1, 1] téglatestre vágunk
28
Raszterizáció viewport trafó: pixel koordináták lineáris interpoláció – vertex output adatok (kivéve pozíció) interpolálása minden kitöltendő pixelhez – pixel shader indítása minden pixelszín meghatározásához
29
Pixel shader bejövő adat – vertex shader kimenő adatai lineárisan interpolálva – pixel koordináták kimenő adat – pixel szín [RGBA] – mélység, ha felül akarjuk írni a háromszög csúcsainak z-jéből interpolált eredetit ha nem, akkor a z-teszt előrehozható a pixel shader elé
30
Kimeneti műveletek bufferek – célterület: frame buffer vagy textúra – mélység-stencil buffer műveletek – mélység teszt – stencil teszt – keverés [alfa blending]
31
Z-teszt a 3D takarási probléma megoldására 1325 628 1325 628 3325 1.2.3.
32
Stencil teszt a stencil buffer a z-buffer pár használatlan bitje beállítódik valamire, ha a pixelbe rajzoltunk valamit később feltételként szabhatjuk a pixel felülírására a stencil buffer értéket pl. kirajzoljuk a tükör téglalapját, utána a tökörben látható objektumokat csak a tükör pixeleire rajzoljuk
33
Keverés A célterületen már meglevő érték [dest] és az újonnan számított szín [src] kombinálása mindkettőhöz megadható egy súly (0, 1, srcalpha, dstalpha, 1-alpha...) megadható a függvény (add, subtract, min, max...) – átlátszóság: hátulról előre rajzolás + blending – src * srcalpha + dst * (1- srcalpha)
34
Új projekt
35
Múlt órai anyagban volt a teáskancsó, importáljuk be (helyezzük az origóba) Múlt órai anyagban volt a TargetCamera.cs szkript, ezt is importáljuk be, és adjuk hozzá a kameraához Állítsuk be (rotate speed, zoom speed, target)
36
Futtassunk
37
Shader-Material Egy material egy shader-re hivatkozik Egy shaderre több material hivatkozhat Több objektumnak is lehet ugyanaz a material-ja A material a shader egy példánya, egy konkrét beállításkonfigurációval Magát az árnyalás menetét, a konkrét számítási módot a shader írja le A material a shader bemeneteitnek értékét adja meg
38
Saját Shader Az alap Standard shader elég komplex Készítsünk sajátot Asset nézet, jobb klikk, create, shader, standard surface shader Legyen a neve TestShader
39
Saját Shader Klikkeljünk rá duplán Megjelenik a shader kódja Ez is bonyolultnak tűnik elsőre, módosítsuk: Shader "Custom/TestShader" { Properties { _Color ("Color", Color) = (1,1,1,1) } SubShader { Pass { } } FallBack "Diffuse" }
40
Saját Shader használata A teáskancsóhoz rendelt material nem ezt a shadert használja Válasszuk ki a material-t (defaultMat) és állítsuk be neki ezt a shadert
41
Saját shader használata Meg is változott a teáskancsó, egyszínű fehér lett
42
Shader változók Shader "Custom/TestShader" { Properties { _Color ("Color", Color) = (1,1,1,1) } SubShader { Pass { } } FallBack "Diffuse" } Megjelent az Inspector-ban A változó neve a shaderkódon belül A változó neve az Inspector-ban A változó típusa A változó alapértelmezett értéke
43
SubShader, Pass, Fallback Shader "Custom/TestShader" { Properties { _Color ("Color", Color) = (1,1,1,1) } SubShader { Pass { } Pass { } … } SubShader { … } … FallBack "Diffuse" }
44
Használjuk a változót! Shader "Custom/TestShader" { Properties { _Color ("Color", Color) = (1,1,1,1) } SubShader { Pass { Color [_Color] } } FallBack "Diffuse" }
45
Skybox, GI kikapcsolása Az egyszerű tesztekhez zavaró a skybox, kapcsoljuk ki Window menü, Lighting
46
Futtatás
47
Árnyalás Shader "Custom/TestShader" { Properties { _Color ("Color", Color) = (1,1,1,1) } SubShader { Pass { Lighting On Material { Diffuse [_Color] } } } FallBack "Diffuse" } Scene nézetben is a jelenet fényforrásait használja
48
Árnyalás Shader "Custom/TestShader" { Properties { _Color ("Color", Color) = (1,1,1,1) _Ambient ("Ambient", Color) = (1,1,1,1) _Emissive ("Emissive", Color) = (0,0,0,1) _Specular ("Specular", Color) = (1,1,1,1) _Shininess ("Shininess", Float) = 0.1 } SubShader { Pass { Lighting On SeparateSpecular On Material { Diffuse [_Color] Ambient [_Ambient] Emission [_Emissive] Specular [_Specular] Shininess [_Shininess] } } } FallBack "Diffuse" }
49
Árnyalás _Shininess ("Shininess", Float) = 0.1 helyett _Shininess ("Shininess", Range (0, 1)) = 0.1 Játszunk a paraméterekkel Fényforrás iránnyal Ambiens fény erősségével
50
Árnyalás Tipp: – A Diffuse és az Ambient színt érdemes ugyanazon tartani – A specular szín általában fehér, de meg lehet tartani változtatás lehetőségét Shader "Custom/TestShader" { Properties { _Color ("Color", Color) = (1,1,1,1) _Emissive ("Emissive", Color) = (0,0,0,1) _Specular ("Specular", Color) = (1,1,1,1) _Shininess ("Shininess", Range (0.0, 1.0)) = 0.1 } SubShader { Pass { Lighting On SeparateSpecular On Material { Diffuse [_Color] Ambient [_Color] Emission [_Emissive] Specular [_Specular] Shininess [_Shininess] } } } FallBack "Diffuse" }
51
Fényforrások A fényforrás paramétereivel is játszunk kicsit. – Type – Range – Color – Intensity – Pozíciója – Orientációja A fényforrásokra még visszatérünk …
52
Több material Ha több objektum van a színtérben, ezeknek más-más lehet az anyagjellemzőjük Készítsünk új materialt és állítsuk be a saját shader-ünket rá. Változtassuk meg a paramétereket
53
Textúrák Készítsünk új shadert TestShaderTextured Legyen ugyan olyan, mint az előző Hozzunk létre egy új materialt (pl. TexturedMat), ami ezt a shadert használja Rakjuk rá a materialt egy objektumra (pl. a talajra) Importáljunk be egy képet (akármi lehet)
54
TestShaderTextured Shader "Custom/TestShaderTextured" { Properties { _Color ("Color", Color) = (1,1,1,1) _Albedo("Albedo", 2D) = "" {} _Emissive ("Emissive", Color) = (0,0,0,1) _Specular ("Specular", Color) = (1,1,1,1) _Shininess ("Shininess", Range (0.0, 1.0)) = 0.1 } SubShader { Pass { Lighting On SeparateSpecular On Material { Diffuse [_Color] Ambient [_Color] Emission [_Emissive] Specular [_Specular] Shininess [_Shininess] } SetTexture [_Albedo] { combine primary * texture } } } FallBack "Diffuse" }
55
Bolygók Gyakorlásképpen beimportálhatjuk a múlt órai bolygó modelleket és textúrákat A materiálok használják a textured shadert A napnak emissziója van, amit textúrával adtunk meg – Emisszió legyen fehér, a többi szí fekete, és állítsuk be a nap textúrát
56
Új shader Keszítsünk új shadert: TestShader2 Legyen ugyanaz a tartalma, mint az első shaderünknek Készítsünk materialt, ami használja Rakjuk rá ezt a materialt egy objektumra, egy teáskannára
57
Culling Shader "Custom/TestShader2" { Properties { _Color ("Color", Color) = (1,1,1,1) _Emissive ("Emissive", Color) = (0,0,0,1) _Specular ("Specular", Color) = (1,1,1,1) _Shininess ("Shininess", Range (0.0, 1.0)) = 0.1 } SubShader { Pass { Cull Front Lighting On SeparateSpecular On Material … Lehet még Back és Off
58
Z-test Shader "Custom/TestShader2" { Properties { _Color ("Color", Color) = (1,1,1,1) _Emissive ("Emissive", Color) = (0,0,0,1) _Specular ("Specular", Color) = (1,1,1,1) _Shininess ("Shininess", Range (0.0, 1.0)) = 0.1 } SubShader { Pass { ZTest Always Lighting On SeparateSpecular On Material … Less | Greater | LEqual | GEqual | Equal | NotEqual | Always
59
Z-Write Shader "Custom/TestShader2" { Properties { _Color ("Color", Color) = (1,1,1,1) _Emissive ("Emissive", Color) = (0,0,0,1) _Specular ("Specular", Color) = (1,1,1,1) _Shininess ("Shininess", Range (0.0, 1.0)) = 0.1 } SubShader { Tags { "Queue" = "Geometry-1" } Pass { ZWrite Off Lighting On
60
Tag Queue Background : 1000 Geometry (default) : 2000 AlphaTest : 2450 Transparent : 3000 Overlay: 4000
61
ColorMask Shader "Custom/TestShader2" { Properties { _Color ("Color", Color) = (1,1,1,1) _Emissive ("Emissive", Color) = (0,0,0,1) _Specular ("Specular", Color) = (1,1,1,1) _Shininess ("Shininess", Range (0.0, 1.0)) = 0.1 } SubShader { Tags { "Queue" = "Geometry-1" } Pass { ColorMask 0 Lighting On ColorMask RGB | A | 0 | any combination of R, G, B, A
62
Blending Shader "Custom/TestShader2" { Properties { _Color ("Color", Color) = (1,1,1,1) _Emissive ("Emissive", Color) = (0,0,0,1) _Specular ("Specular", Color) = (1,1,1,1) _Shininess ("Shininess", Range (0.0, 1.0)) = 0.1 } SubShader { Tags { "Queue" = "Transparent" } Pass { BlendOp Add Blend SrcAlpha OneMinusSrcAlpha Lighting On
63
Blending faktorok One Zero SrcColor SrcAlpha DstColor DstAlpha OneMinusSrcColor OneMinusSrcAlpha OneMinusDstColor OneMinusDstAlpha
64
Blending operatorok Add: SrfFac*SrcCol+DstFac*DstCol Sub: SrfFac*SrcCol-DstFac*DstCol RevSub: DstFac*DstCol - SrfFac*SrcCol Min: Min(SrfFac*SrcCol, DstFac*DstCol) Max: Max(SrfFac*SrcCol, DstFac*DstCol) …
65
Blending Tipikus beállítások: Add operator – SrcAlpha, OneMinusSrcAlpha (általános átlátszó dolgok) – One, One (pl. tűz) – SrcAlpha, One (ezek is világító dolgok, alfában van tárolva az erőssége)
66
Többmenetes renderelés Shader "Custom/TestShader2" { Properties { _Color ("Color", Color) = (1,1,1,1) _Emissive ("Emissive", Color) = (0,0,0,1) _Specular ("Specular", Color) = (1,1,1,1) _Shininess ("Shininess", Range (0.0, 1.0)) = 0.1 } SubShader { Tags { "Queue" = "Transparent"} Pass { colormask 0 } Pass { Blend srcalpha Oneminussrcalpha Lighting On
67
Stencil test I. Beimportálunk egy poharat Szeretnénk, ha folyadék lenne benne Egy átlátszó síklap lehetne a folyadékfelület De a pohárból kilógó részeket le kellene vágni
68
Stencil Test II. Csináljunk két új shadert: – Custom/Glass – Custom/Water Csináljunk két új materiált – Glass – Water Importaljuk be a pohár mesht: glass.obj Adjuk hozzá a jelenethez, állítsuk be rá a glass materialt Adjunk a jelenethez egy síklapot (GameObject/3D/Plane), állítsuk be rá a Water materiált Rendezgessük el őket a jelenetben
69
Stencil Test III. Shader "Custom/Glass" { Properties { _Color ("Color", Color) = (1,1,1,1) _Emissive ("Emissive", Color) = (0,0,0,1) _Specular ("Specular", Color) = (1,1,1,1) _Shininess ("Shininess", Range (0.0, 1.0)) = 0.1 } SubShader { Tags { "Queue" = "Transparent+1" } pass { Cull Off colormask 0 } Pass { Cull Front colormask 0 Stencil { Ref 1 Pass Replace } } … … Pass { Cull Off Lighting On SeparateSpecular On Material { Diffuse [_Color] Ambient [_Color] Emission [_Emissive] Specular [_Specular] Shininess [_Shininess] } } } }
70
Stencil Test IV. Shader "Custom/Water" { Properties { _Color ("Color", Color) = (1,1,1,1) _Emissive ("Emissive", Color) = (0,0,0,1) _Specular ("Specular", Color) = (1,1,1,1) _Shininess ("Shininess", Range (0.0, 1.0)) = 0.1 } SubShader { Tags { "Queue" = "Transparent+2" } Pass { Stencil { Ref 1 Comp Equal } Blend srcalpha Oneminussrcalpha Lighting On SeparateSpecular On Material { Diffuse [_Color] Ambient [_Color] Emission [_Emissive] Specular [_Specular] Shininess [_Shininess] } } } }
71
Stencil Test V. Próbálgassuk a jelenetet A folyadékfelületet a pohárban meg lehet emelni, meg lehet dönteni stb … Ha írunk rá szkriptet, azt is megcsinálhatjuk, ahogy a felület mindig vízszintes legyen
72
GrabPass I. Érdekes funkció A képernyő aktuális tartalmát el lehet menteni textúrába Ezt a textúrát ugyanúgy beköthetjük, mint bármi más textúrát
73
GrabPass II. Készítsünk új shadert: GrabPassTest Készítsünk új materiált: GrabPassTest A material az új shadert kell használja Adjunk hozzá a jelenethez egy nagyobb álló síklapot,a többi objektum mögé Állítsuk be rá az új materiált
74
GrabPass III. Shader "Custom/GrabPassTest" { Properties { _Color ("Color", Color) = (1,1,1,1) } SubShader { Tags { "Queue" = "Transparent+3" } GrabPass{} Pass { Color [_Color] SetTexture [_GrabTexture] { combine primary * texture } } } FallBack "Diffuse" }
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.