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

Slides:



Advertisements
Hasonló előadás
Rendering pipeline Ogre3D
Advertisements

Többmenetes renderelés Grafikus játékok fejlesztése Szécsi László g11-multipass.
A digitális kép bevezetés. A digitális kép tulajdonságai 1. Egyszerű Windows Intéző nézet És még: IrfanView (társított alkalmazás), KB („nagy”
Beruházási és finanszírozási döntések kölcsönhatásai 1.
Informatikai rendszerek általános jellemzői 1.Hierarchikus felépítés Rendszer → alrendszer->... → egyedi komponens 2.Az elemi komponensek halmaza absztrakciófüggő.
A vállalatok marketingtevékenysége és a Magyar Marketing Szövetség megítélése Kutatási eredmények az MMSZ részére (2008. július)
BEST-INVEST Független Biztosításközvetítő Kft.. Összes biztosítási díjbevétel 2004 (600 Mrd Ft)
avagy a háromszög technika
A TF Könyvtár katalógusának használata
Lieszkovszky József Pál (PhD hallgató, RGDI
A kérdőívek, a kérdőívszerkesztés szabályai
Adatbázis normalizálás
3D grafika összefoglalás
Pályaválasztási tanácsadás
Alhálózat számítás Osztályok Kezdő Kezdete Vége Alapértelmezett CIDR bitek alhálózati maszk megfelelője A /8 B
Becslés gyakorlat november 3.
Áramlástani alapok évfolyam
A színkezelés alapjai a GIMP programban
Lighting III.
Általános célú számítások a GPU-n
Beck Róbert Fizikus PhD hallgató
Montázs készítése.
Scilab programozás alapjai
Unity, Anyagok, megvilágítás
Programozás III. Gyakorlás.
Vizualizáció és képszintézis
Levegőtisztaság-védelem 6. előadás
Szécsi László 3D Grafikus Rendszerek 14. előadás
Technológiai folyamatok optimalizálása
Ez az én művem Készítsünk tájképet! Készítette: Puskás Rebeka
Rendszerező összefoglalás
Végeselemes modellezés matematikai alapjai
Szervezetfejlesztés II. előadás
Komplex természettudomány 9.évfolyam
Szécsi László 3D Grafikus Rendszerek 1. labor
Hipotézisvizsgálat.
Operációkutatás I. 7. előadás
Animációk.
Tömör testmodellek globális kapcsolatai
Gazdaságstatisztika Korreláció- és regressziószámítás II.
A Nemzeti Szakképzési és Felnőttképzési Intézet Konferenciája
Bevezetés Az ivóvizek minősége törvényileg szabályozott
2. Bevezetés A programozásba
Unity.
Kvantitatív módszerek
Business Mathematics
Algoritmusok és Adatszerkezetek I.
Dr. habil. Gulyás Lajos, Ph.D. főiskolai tanár
Körmendi Dániel MAS Meeting Scheduler.
Számítógépes Hálózatok
OpenGL kiterjesztések (extensions)
STRUKTURÁLT SERVEZETEK: funkció, teljesítmény és megbízhatóság
Monitor(LCD).
Tilk Bence Konzulens: Dr. Horváth Gábor
Készítette: Sinkovics Ferenc
Beépített assetek (Standard Assets).
Szoftverrobotok vs biorobotok Bemutatkozik Albert, a vállalati robot
Informatikai gyakorlatok 11. évfolyam
A csoportok tanulása, mint a szervezeti tanulás alapja
Képzés a Városi Közlekedési Ütemterv eszközről Gyakorlati feladat
A Microsoft SharePoint testreszabása Online webhely
A távoli asztal, valamint az Endnote használata a távoli asztalon
Bináris kereső fák Definíció: A bináris kereső fa egy bináris fa,
A szállítási probléma.
SQL jogosultság-kezelés
Dr. Vasas Lívia, PhD december
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Vektorok © Vidra Gábor,
Hagyományos megjelenítés
Hipotéziselmélet Adatelemzés.
Előadás másolata:

Anyagok, megvilágítás

Rendering egyenlet I(x,  )=I e (x,  )+   I(h(x,-  ’ ,  ’) f r (  ’,x,  ) cos  ’d  ’

Képszintézis = valós világ illúziója Tone mapping Valós világszínérzet pixelVirtuális világ

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   

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 

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] 

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,- ,  )

  f r (  ’,x,  ) cos  ’d  ’ Albedo Tetszőleges irányú visszaverődés valószínűsége.

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  ’

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

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

Matematikai BRDF modellek 11221122 Anyagcsaládra jellemző matematikai képlet frfr  BRDF paraméterek

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,  ’)

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 ( ) ’’ ’’

Lambert árnyalás I out =I in f r cos  ’ I out =I in k d cos  ’

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

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 

Diffúz+Phong anyagok n= diffúz Phong diffúz + Phong

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

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

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

Vertexek összeállítása Vertex buffer – rekordok tömbje posnormaltexposnormaltexposnormaltex vertex

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]

Primitívek összeállítása non-indexed – vertex bufferben egymás után következők triangle listtriangle strip triangle fan

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

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

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

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é

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]

Z-teszt a 3D takarási probléma megoldására 

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

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)

Új projekt

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)

Futtassunk

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

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

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" }

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

Saját shader használata Meg is változott a teáskancsó, egyszínű fehér lett

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

SubShader, Pass, Fallback Shader "Custom/TestShader" { Properties { _Color ("Color", Color) = (1,1,1,1) } SubShader { Pass { } Pass { } … } SubShader { … } … FallBack "Diffuse" }

Használjuk a változót! Shader "Custom/TestShader" { Properties { _Color ("Color", Color) = (1,1,1,1) } SubShader { Pass { Color [_Color] } } FallBack "Diffuse" }

Skybox, GI kikapcsolása Az egyszerű tesztekhez zavaró a skybox, kapcsoljuk ki Window menü, Lighting

Futtatás

Á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

Á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" }

Á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

Á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" }

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 …

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

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)

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" }

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

Ú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

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

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

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

Tag Queue Background : 1000 Geometry (default) : 2000 AlphaTest : 2450 Transparent : 3000 Overlay: 4000

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

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

Blending faktorok One Zero SrcColor SrcAlpha DstColor DstAlpha OneMinusSrcColor OneMinusSrcAlpha OneMinusDstColor OneMinusDstAlpha

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) …

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)

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

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

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

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] } } } }

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] } } } }

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

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

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

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" }