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

Anyagok, megvilágítás. Rendering egyenlet I(x,  )=I e (x,  )+   I(h(x,-  ’ ,  ’) f r (  ’,x,  ) cos  ’d  ’

Hasonló előadás


Az előadások a következő témára: "Anyagok, megvilágítás. Rendering egyenlet I(x,  )=I e (x,  )+   I(h(x,-  ’ ,  ’) f r (  ’,x,  ) cos  ’d  ’"— Előadás másolata:

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

4

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] dd dAdA   dd I(x,  ) = d  dA cos  d 

7 Fény-felület kölcsönhatás x  dd 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 11 11 22 22 BRDF 5-változós függvény:  1,  1,  2,  2, Tábla méret: 100x100x100x100x10 = 10 9

13 Matematikai BRDF modellek 11221122 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  ’ ’’ ’’ ’’ rr 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" }


Letölteni ppt "Anyagok, megvilágítás. Rendering egyenlet I(x,  )=I e (x,  )+   I(h(x,-  ’ ,  ’) f r (  ’,x,  ) cos  ’d  ’"

Hasonló előadás


Google Hirdetések