´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ıtog ´ epes ´ Szam´ Grafika ´ Gergely Klar
[email protected] ¨ os ¨ Lorand ´ ´ Eotv Tudomanyegyetem Informatikai Kar
´ ev ´ 2010/2011. tavaszi fel
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
Tartalom
1
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
2
´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
´ o´ 1. Generaci
NVIDIA TNT2, ATI Rage, 3dfx Voodoo3 ´ ak ´ kiegesz´ ´ ıtese ´ A standard 2d-s videokarty ´ okat ´ ´ a CPU csinalja! ´ Csucspont transzformaci meg ´ ´ ´ ast, ´ Z-buffer kezelest ´ vegezte ´ A kartya csak a textur ´ az
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
´ o´ (1999-2000) 2. Generaci
NVIDIA GeForce 256, GeForce 2, ATI Radeon 7500 ´ ´ ok ´ es ´ az arnyal ´ ´ kezeles ´ et ´ a Atveszik a transzformaci as ´ CPU-tol. ´ DirectX 7 is tamogatja ´ Az OpenGL es a hardveres ´ okat ´ csucspont transzformaci ´ ´ as ´ megjelenese: ´ Multi-textur bump map, light map ´ az ´ ´ nem Konfiguralhat o´ (driver szinten), de meg programozhato´
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
´ o´ (2001) 3. Generaci
NVIDIA GeForce 3, GeForce 4 Ti, Xbox, ATI Radeon 8500 ´ ´ aga ´ A csucspont pipeline korlatozott programozhatos ´ ´ as, ´ de meg ´ nem Fejlettebb pixel szintu˝ konfigural ´ programozas ´ tobbsz ¨ ¨ os ¨ mintavetelez ´ ´ (antialias-hoz) 3d-s textur or es ´ ak,
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
´ o´ (2002) 4. Generaci
NVIDIA GeForce FX, ATI Radeon 9700 ´ pixel pipeline teljesen programozhato´ A csucspont es ´ ˝ ´ ´ ´ meg ´ vannak) (eroforr as-korl atok azert ´ Magas szintu˝ arnyal o´ nyelvek (shading languages) ´ (NVIDIA Cg, Microsoft HLSL, OpenGL GLSL) megjelenese Shader Model 2.0 (simple branching)
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
´ o´ (2004) 5. Generaci
NVIDIA GeForce 6, ATI Radeon X, GeForce 7 ¨ puffer szimultan ´ renderelese ´ Tobb 64bites pipeline PCIe busz ¨ memoria, ´ ´ Tobb hosszabb csucspont arnyal o´ programok ´ Shader Model 3.0 (branching and looping in the pixel shader (physics)) HDRI, SLI, TSAA, TMAA
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
´ o´ (2007) 6. Generaci
DirectX 10 Shader Model 4.0 (Unified Shader Model, geometry shader) Unified Shading Architecture Shading performance 2x pixel, 12x vertex above G71 700 Mtransistors 130W to 300W
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
´ o´ (2009-) 7. Generaci
DirectX 11, OpenGL 4.1 Shader Model 5.0 (Compute Shader, Tesselation Shaders: Hull Shader & Domain Shader) ¨ ´ us ´ Tobbsz all ´ ag ´ asok ´ Dynamic Shader Linkage: OOP jellegu˝ szolgatat HLSL-ben 3000+ Mtransistors 1000 GFLOPs
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
˝ SM3.0 – Grafikus szereloszalag
Vertex Shader Primitive Assembly Rasterisation Fragment Shader Pixel Rendering
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
Vertex Shader ´ eszkoz ¨ Feladata: csucspontok modell k.r. Ñ normalizalt ´ k.r. ´ lefut A vertex buffer minden elemen ´ Bemenet: csucsok modell k.r.-ben + egyeb ´ ´ a csucspont ´ legalabb pozicioja ´ ´ ´ adat, ami a vertex buffer-ben meg van barmilyen egyeb adva
´ eszkoz ¨ k.r.-ben + egyeb ´ Kimenet: csucs ´ normalizalt ´ a csucspont ´ legalabb pozicioja ´ ´ ´ adat barmilyen egyeb
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
Pixel Shader ´ Masik neve: fragment shader ´ u˝ 3Ds darabka Fragment: pixel meret ´ PS feladata: az egyes fragment-ek sz´ınenek ´ ´ meghataroz asa ´ haromsz ´ ¨ ´ A raszterizalt ogek minden egyes fragment-jere lefut. Az adott fragment-et eldobhatja. ´ Bemenete: A vertex shader kimeno˝ parametereinek ´ interpolaltjai. Kimenete: Az adott fragment-hez rendelendo˝ sz´ın.
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
˝ SM4 – Grafikus szereloszalag
Input Assambler Vertex Shader Geometry Shader Stream Output Rasterizer Pixel Shader Output Merger
msdn.microsoft.com
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
Geometry Shader
´ asa, ´ ´ eltuntet ´ Feladata: uj (vagy regi ese) ´ geometria general ¨ ´ ´ transzformalt ´ primit´ıvekre fut let. A vertex shader altal mar ´ agi ´ infokkal, ´ Bemenete: teljes primit´ıv (szomszeds ha vannak) Kimenete: ujabb primit´ıv[ek], vagy semmi. ´ Kimeneti t´ıpusok:PointStream, LineStream, vagy TriangleStream
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
Algoritmusok
Point Sprite Expansion Dynamic Particle Systems Fur/Fin Generation Shadow Volume Generation Single Pass Render-to-Cubemap Per-Primitive Material Swapping Per-Primitive Material Setup
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
Input Assambler Vertex Shader Hull Shader Tesselator Domain Shader Geometry Shader Stream Output Rasterizer Pixel Shader Output Merger ˝ szereloszalagon k´ıvul: ¨ Compute Shader http://cg.elte.hu
msdn.microsoft.com
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
´ os ´ lep ´ esek ´ Tesszelaci ´ primit´ıv tipusokat hasznal ´ Specialis ´ ¨ foltok (patches) negysz og ´ ¨ foltok haromsz og iso-vonalak
¨ ´ okat ´ ´ u´ Alapotlet: a transzformaci az alacsony felbontas ´ ´ tesszelaci ´ oval, ´ foltokon vegezz uk, hardveresen bontjuk ¨ es ´ tesszuk ´ ´ fel kisebb darabokra es a. ¨ reszletgazdagg ´ o: ´ Hasznalat displacement mapping ´ nezet fugg ¨ o˝ dinamikus LOD (level of detail) ´ ´ morph-olasok gyors´ıtasa
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
Hull Shader Stage ´ dolgozza fel a Foltonkent bementi pontokat. Konstansokat rendel a folthoz, ´ as ´ modj ´ at ´ amik a tesszelal ´ ´ meg. hatarozz ak ´ o´ mert ´ ek ´ et. ´ Megadja a tesszelaci ´ kul ¨ kimenet: Ket ¨ on ´ o˝ pontok a Domain Vezerl Shader-nek Konstansok a Tesselator Stage-nek
http://cg.elte.hu
˝ as ´ 10. eload
msdn.microsoft.com
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
Tesselator Stage
´ Nem programozhato. ´ ´ ¨ Felbontja a tartomanyt kisebb darabokra (negsz og, ´ ¨ szakasz). haromsz og, ´ ´ akat ´ ´ ıt elo˝ kimenetkent. ´ u, v (opcionalisan w) koordinat all´ ´ ´ ´ ok ´ a primitive ”Lathatatlan” kimenet: topologiai informaci assembly-nek
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
Domain Shader Stage ´ A Tesselator Stage soran ´ ıtott minden egyes pontra elo˝ all´ lefut. Bemenete: ˝ A Tesselator Stage-tol: u, v , pw q-k. ˝ A Hull Shader-tol: ´ ˝ vezerlo pontok ˝ A Hull Shader-tol: ´ os ´ faktorok tesszelaci
msdn.microsoft.com
˝ egyetlen A bemetekbol ´ ıt elo, ˝ es ´ az lesz a csucspontot all´ ´ kimenet. http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ok ´ Generaci ´ korabban) ´ Shader Model 3.0 (es Shader Model 4.0 Shader Model 5.0
Compute Shader ´ anos ´ ´ u´ szam´ ´ ıtasokat ´ ˝ e´ a GPU-n. Altal cel tesz lehetov ´ adatszerkezeteket hasznal. ´ Specialis ´ ´ bemenetekre. Nincsenek megszor´ıtasok a ki- es ´ asai: ´ Felhasznal ´ ´ Kepfeldolgoz as/post-processing Ray-tracing Fizika AI
´ ”Testverei” CUDA OpenCL
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
Tartalom
1
´ arty ´ ak ´ Grafikus gyors´ıtok
2
´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´ ´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ ´ Absztrakt fenyforr asok (ism.) ´ fenyforr ´ ´ Irany as ´ csak iranya van ´ k.r. beli) vektor megadja egyetlen (vilag ´ ´ a fenysugarakat parhuzamosnak tekintjuk ¨ ´ ´ ´ ´ ara ´ hasznalhat ´ tavoli fenyforr asok megadas o´
´ ´ Pont fenyforr as ´ van csak poz´ıcioja ´ k.r.-ben egy ponttal adjuk meg, vilag ¨ Pl.: villanykorte
´ ´ Spot fenyforr as ´ ´ es ´ ”fenyk ´ ¨ iranya, pozicioja ore” van ´ szog ¨ + egy pont es ´ egy vektor adja meg (vilag ´ k.r. !) ket ´ Pl.: asztali lampa http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ ´ Absztrakt fenyforr asok (ism.) ´ fenyforr ´ ´ Irany as ´ csak iranya van ´ k.r. beli) vektor megadja egyetlen (vilag ´ ´ a fenysugarakat parhuzamosnak tekintjuk ¨ ´ ´ ´ ´ ara ´ hasznalhat ´ tavoli fenyforr asok megadas o´
´ ´ Pont fenyforr as ´ van csak poz´ıcioja ´ k.r.-ben egy ponttal adjuk meg, vilag ¨ Pl.: villanykorte
´ ´ Spot fenyforr as ´ ´ es ´ ”fenyk ´ ¨ iranya, pozicioja ore” van ´ szog ¨ + egy pont es ´ egy vektor adja meg (vilag ´ k.r. !) ket ´ Pl.: asztali lampa http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ ´ Absztrakt fenyforr asok (ism.) ´ fenyforr ´ ´ Irany as ´ csak iranya van ´ k.r. beli) vektor megadja egyetlen (vilag ´ ´ a fenysugarakat parhuzamosnak tekintjuk ¨ ´ ´ ´ ´ ara ´ hasznalhat ´ tavoli fenyforr asok megadas o´
´ ´ Pont fenyforr as ´ van csak poz´ıcioja ´ k.r.-ben egy ponttal adjuk meg, vilag ¨ Pl.: villanykorte
´ ´ Spot fenyforr as ´ ´ es ´ ”fenyk ´ ¨ iranya, pozicioja ore” van ´ szog ¨ + egy pont es ´ egy vektor adja meg (vilag ´ k.r. !) ket ´ Pl.: asztali lampa http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
¨ esek ´ Jelol (ism.)
~v : ω a nezeti ´ ´ irany 1 ~l : ω a megvilag´ ´ ıto, ´ a fenyt ´ ´ pont fele mutato´ vektor ”ado” ~n a feluleti ´ normalis ¨ ~ ~ ~v , l, n egysegvektorok ´ 1 ~ ´ a ~n altal ´ ´ szog ¨ θ a l es bezart
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
Ambiens tag
´ ´ ´ A sz´ınteren mindenutt eg. ¨ jelenlevo˝ fenymennyis ´ Keplet: ka La . ˝ fugg, ka a felulett legyen ¨ ol ¨ float4 ambientColor. ´ ´ atsz ´ og ´ as. ´ A float4 az egy rgba negyes, ahol a az atl ´ ol, ˝ felulett ˝ fuggetlen. ´ legyen La fenyt Szinten ¨ ol ¨ float4 ambientLight, de a 1. ´ ´ Pixel shaderben hasznalhat o: ambientColor*ambientLight
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
Ambiens tag
´ ´ ´ A sz´ınteren mindenutt eg. ¨ jelenlevo˝ fenymennyis ´ Keplet: ka La . ˝ fugg, ka a felulett legyen ¨ ol ¨ float4 ambientColor. ´ ´ atsz ´ og ´ as. ´ A float4 az egy rgba negyes, ahol a az atl ´ ol, ˝ felulett ˝ fuggetlen. ´ legyen La fenyt Szinten ¨ ol ¨ float4 ambientLight, de a 1. ´ ´ Pixel shaderben hasznalhat o: ambientColor*ambientLight
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
Ambiens tag
´ ´ ´ A sz´ınteren mindenutt eg. ¨ jelenlevo˝ fenymennyis ´ Keplet: ka La . ˝ fugg, ka a felulett legyen ¨ ol ¨ float4 ambientColor. ´ ´ atsz ´ og ´ as. ´ A float4 az egy rgba negyes, ahol a az atl ´ ol, ˝ felulett ˝ fuggetlen. ´ legyen La fenyt Szinten ¨ ol ¨ float4 ambientLight, de a 1. ´ ´ Pixel shaderben hasznalhat o: ambientColor*ambientLight
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
Ambiens tag
´ ´ ´ A sz´ınteren mindenutt eg. ¨ jelenlevo˝ fenymennyis ´ Keplet: ka La . ˝ fugg, ka a felulett legyen ¨ ol ¨ float4 ambientColor. ´ ´ atsz ´ og ´ as. ´ A float4 az egy rgba negyes, ahol a az atl ´ ol, ˝ felulett ˝ fuggetlen. ´ legyen La fenyt Szinten ¨ ol ¨ float4 ambientLight, de a 1. ´ ´ Pixel shaderben hasznalhat o: ambientColor*ambientLight
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
Ambiens tag
´ ´ ´ A sz´ınteren mindenutt eg. ¨ jelenlevo˝ fenymennyis ´ Keplet: ka La . ˝ fugg, ka a felulett legyen ¨ ol ¨ float4 ambientColor. ´ ´ atsz ´ og ´ as. ´ A float4 az egy rgba negyes, ahol a az atl ´ ol, ˝ felulett ˝ fuggetlen. ´ legyen La fenyt Szinten ¨ ol ¨ float4 ambientLight, de a 1. ´ ´ Pixel shaderben hasznalhat o: ambientColor*ambientLight
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
Ambiens tag
´ ´ ´ A sz´ınteren mindenutt eg. ¨ jelenlevo˝ fenymennyis ´ Keplet: ka La . ˝ fugg, ka a felulett legyen ¨ ol ¨ float4 ambientColor. ´ ´ atsz ´ og ´ as. ´ A float4 az egy rgba negyes, ahol a az atl ´ ol, ˝ felulett ˝ fuggetlen. ´ legyen La fenyt Szinten ¨ ol ¨ float4 ambientLight, de a 1. ´ ´ Pixel shaderben hasznalhat o: ambientColor*ambientLight
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
¨ eny ´ Lambert-torv BRDF: Lref
Li kd cos
θ1
Ezt neveztuk ¨ diffuz ´ sz´ınnek. ´ Li mint az elobb, ˝ ´ fenyforr ´ ´ kd es de Li az aktualis as ´ tulajdonsaga: float4 diffuseColor float4 diffuseLight ´ ´ cos θ1 . Kene meg: ´ ıtasa: ´ Kiszam´ saturate(dot(normal, toLight)) ´ toLight =~l-t. Ismerni kell hozza´ normal = ~n-t es ´ ´ al ´ a fenyk ´ ¨ is figyelembe kell majd venni. Spot fenyforr asn ort
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
¨ eny ´ Lambert-torv BRDF: Lref
Li kd cos
θ1
Ezt neveztuk ¨ diffuz ´ sz´ınnek. ´ Li mint az elobb, ˝ ´ fenyforr ´ ´ kd es de Li az aktualis as ´ tulajdonsaga: float4 diffuseColor float4 diffuseLight ´ ´ cos θ1 . Kene meg: ´ ıtasa: ´ Kiszam´ saturate(dot(normal, toLight)) ´ toLight =~l-t. Ismerni kell hozza´ normal = ~n-t es ´ ´ al ´ a fenyk ´ ¨ is figyelembe kell majd venni. Spot fenyforr asn ort
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
¨ eny ´ Lambert-torv BRDF: Lref
Li kd cos
θ1
Ezt neveztuk ¨ diffuz ´ sz´ınnek. ´ Li mint az elobb, ˝ ´ fenyforr ´ ´ kd es de Li az aktualis as ´ tulajdonsaga: float4 diffuseColor float4 diffuseLight ´ ´ cos θ1 . Kene meg: ´ ıtasa: ´ Kiszam´ saturate(dot(normal, toLight)) ´ toLight =~l-t. Ismerni kell hozza´ normal = ~n-t es ´ ´ al ´ a fenyk ´ ¨ is figyelembe kell majd venni. Spot fenyforr asn ort
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
¨ eny ´ Lambert-torv BRDF: Lref
Li kd cos
θ1
Ezt neveztuk ¨ diffuz ´ sz´ınnek. ´ Li mint az elobb, ˝ ´ fenyforr ´ ´ kd es de Li az aktualis as ´ tulajdonsaga: float4 diffuseColor float4 diffuseLight ´ ´ cos θ1 . Kene meg: ´ ıtasa: ´ Kiszam´ saturate(dot(normal, toLight)) ´ toLight =~l-t. Ismerni kell hozza´ normal = ~n-t es ´ ´ al ´ a fenyk ´ ¨ is figyelembe kell majd venni. Spot fenyforr asn ort
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
¨ eny ´ Lambert-torv BRDF: Lref
Li kd cos
θ1
Ezt neveztuk ¨ diffuz ´ sz´ınnek. ´ Li mint az elobb, ˝ ´ fenyforr ´ ´ kd es de Li az aktualis as ´ tulajdonsaga: float4 diffuseColor float4 diffuseLight ´ ´ cos θ1 . Kene meg: ´ ıtasa: ´ Kiszam´ saturate(dot(normal, toLight)) ´ toLight =~l-t. Ismerni kell hozza´ normal = ~n-t es ´ ´ al ´ a fenyk ´ ¨ is figyelembe kell majd venni. Spot fenyforr asn ort
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
¨ eny ´ Lambert-torv BRDF: Lref
Li kd cos
θ1
Ezt neveztuk ¨ diffuz ´ sz´ınnek. ´ Li mint az elobb, ˝ ´ fenyforr ´ ´ kd es de Li az aktualis as ´ tulajdonsaga: float4 diffuseColor float4 diffuseLight ´ ´ cos θ1 . Kene meg: ´ ıtasa: ´ Kiszam´ saturate(dot(normal, toLight)) ´ toLight =~l-t. Ismerni kell hozza´ normal = ~n-t es ´ ´ al ´ a fenyk ´ ¨ is figyelembe kell majd venni. Spot fenyforr asn ort
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
¨ eny ´ Lambert-torv BRDF: Lref
Li kd cos
θ1
Ezt neveztuk ¨ diffuz ´ sz´ınnek. ´ Li mint az elobb, ˝ ´ fenyforr ´ ´ kd es de Li az aktualis as ´ tulajdonsaga: float4 diffuseColor float4 diffuseLight ´ ´ cos θ1 . Kene meg: ´ ıtasa: ´ Kiszam´ saturate(dot(normal, toLight)) ´ toLight =~l-t. Ismerni kell hozza´ normal = ~n-t es ´ ´ al ´ a fenyk ´ ¨ is figyelembe kell majd venni. Spot fenyforr asn ort
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ visszaverod ˝ es ´ - Phong modell Spekularis
¨ any ´ es ´ a ~v BRDF: Lref Li ks pcos φqn , ahol φ az ~r tuk ¨ orir ´ ´ altal ´ ´ szog. ¨ nezeti irany bezart ´ Li (ez egy masik ´ ˝ ´ kd es Li ) megint mint az elobb, Li szinten ´ fenyforr ´ ´ tulajdonsaga: ´ az aktualis as float4 specularColor float4 specularLight n felulet ¨ fugg ¨ o˝ konstans, legyen float specularPower
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ visszaverod ˝ es ´ - Phong modell Spekularis
¨ any ´ es ´ a ~v BRDF: Lref Li ks pcos φqn , ahol φ az ~r tuk ¨ orir ´ ´ altal ´ ´ szog. ¨ nezeti irany bezart ´ Li (ez egy masik ´ ˝ ´ kd es Li ) megint mint az elobb, Li szinten ´ fenyforr ´ ´ tulajdonsaga: ´ az aktualis as float4 specularColor float4 specularLight n felulet ¨ fugg ¨ o˝ konstans, legyen float specularPower
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ visszaverod ˝ es ´ - Phong modell Spekularis
¨ any ´ es ´ a ~v BRDF: Lref Li ks pcos φqn , ahol φ az ~r tuk ¨ orir ´ ´ altal ´ ´ szog. ¨ nezeti irany bezart ´ Li (ez egy masik ´ ˝ ´ kd es Li ) megint mint az elobb, Li szinten ´ fenyforr ´ ´ tulajdonsaga: ´ az aktualis as float4 specularColor float4 specularLight n felulet ¨ fugg ¨ o˝ konstans, legyen float specularPower
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ visszaverod ˝ es ´ - Phong modell Spekularis ¨ any ´ es ´ a ~v nezeti ´ ´ BRDF: Lref Li ks pcos φqn ; ~r tuk irany. ¨ orir ´ ´ ~r es ´ ~v . Kene cos φ, amihez meg kene ~r a ~l vektor ~n-re vett tuk ¨ epe. ´ ´ ıtasa: ´ Szam´ ¨ ork float3 reflection = reflect(-toLight, normal) ~v a nezeti ´ ´ ´ a cameraba ´ irany, azaz a feuleti pontbol mutato´ ¨ ´ egysegvektor. float3 directionToEye = normalize(eyePosition-worldPos) ´ ıtasa: ´ pcos φqn szam´ pow(saturate(dot(reflection, directionToEye)), specularPower) http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ visszaverod ˝ es ´ - Phong modell Spekularis ¨ any ´ es ´ a ~v nezeti ´ ´ BRDF: Lref Li ks pcos φqn ; ~r tuk irany. ¨ orir ´ ´ ~r es ´ ~v . Kene cos φ, amihez meg kene ~r a ~l vektor ~n-re vett tuk ¨ epe. ´ ´ ıtasa: ´ Szam´ ¨ ork float3 reflection = reflect(-toLight, normal) ~v a nezeti ´ ´ ´ a cameraba ´ irany, azaz a feuleti pontbol mutato´ ¨ ´ egysegvektor. float3 directionToEye = normalize(eyePosition-worldPos) ´ ıtasa: ´ pcos φqn szam´ pow(saturate(dot(reflection, directionToEye)), specularPower) http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ visszaverod ˝ es ´ - Phong modell Spekularis ¨ any ´ es ´ a ~v nezeti ´ ´ BRDF: Lref Li ks pcos φqn ; ~r tuk irany. ¨ orir ´ ´ ~r es ´ ~v . Kene cos φ, amihez meg kene ~r a ~l vektor ~n-re vett tuk ¨ epe. ´ ´ ıtasa: ´ Szam´ ¨ ork float3 reflection = reflect(-toLight, normal) ~v a nezeti ´ ´ ´ a cameraba ´ irany, azaz a feuleti pontbol mutato´ ¨ ´ egysegvektor. float3 directionToEye = normalize(eyePosition-worldPos) ´ ıtasa: ´ pcos φqn szam´ pow(saturate(dot(reflection, directionToEye)), specularPower) http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ visszaverod ˝ es ´ - Phong modell Spekularis ¨ any ´ es ´ a ~v nezeti ´ ´ BRDF: Lref Li ks pcos φqn ; ~r tuk irany. ¨ orir ´ ´ ~r es ´ ~v . Kene cos φ, amihez meg kene ~r a ~l vektor ~n-re vett tuk ¨ epe. ´ ´ ıtasa: ´ Szam´ ¨ ork float3 reflection = reflect(-toLight, normal) ~v a nezeti ´ ´ ´ a cameraba ´ irany, azaz a feuleti pontbol mutato´ ¨ ´ egysegvektor. float3 directionToEye = normalize(eyePosition-worldPos) ´ ıtasa: ´ pcos φqn szam´ pow(saturate(dot(reflection, directionToEye)), specularPower) http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
¨ Osszefoglalva
´ ´ tulajdonsagai ´ Fenyforr as diffuseLight
´ Felulet ¨ tulajdonsagai ambientColor
specularLight
diffuseColor
toLight
specularColor specularPower
´ tulajdonsagai ´ Sz´ınter ambientLight
normal worldPos
eyePosition
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
¨ Osszefoglalva
´ ´ tulajdonsagai ´ Fenyforr as diffuseLight
´ Felulet ¨ tulajdonsagai ambientColor
specularLight
diffuseColor
toLight
specularColor specularPower
´ tulajdonsagai ´ Sz´ınter ambientLight
normal worldPos
eyePosition
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
¨ Osszefoglalva
´ ´ tulajdonsagai ´ Fenyforr as diffuseLight
´ Felulet ¨ tulajdonsagai ambientColor
specularLight
diffuseColor
toLight
specularColor specularPower
´ tulajdonsagai ´ Sz´ınter ambientLight
normal worldPos
eyePosition
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ Tudd, hogy ertsd
´ Minden feluleti-optikai tulajdonsagot meg lehet adni ¨ ´ textur ´ konstanssal, vagy akar ´ aval. ˝ meg ´ tobbet, ¨ (Sot, ha ugyesek vagyunk!) ¨ ´ pont vilagkoordin ´ ´ Minden vektor es ata-rendszerben adott. ´ ´ eyePosition-t friss´ıteni kell, ha valtozik a nezet! ´ ´ a Vertex Problema: a modellunk ¨ modell k.r.-ben van, es ´ eszkoz ¨ k.r.-be visz at! ´ Shader normalizalt ´ szamoltassunk ´ ´ Megoldas: a Vertex Shader-rel vilag ´ akat ´ k.r.-beli koordinat is!
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ Tudd, hogy ertsd
´ Minden feluleti-optikai tulajdonsagot meg lehet adni ¨ ´ textur ´ konstanssal, vagy akar ´ aval. ˝ meg ´ tobbet, ¨ (Sot, ha ugyesek vagyunk!) ¨ ´ pont vilagkoordin ´ ´ Minden vektor es ata-rendszerben adott. ´ ´ eyePosition-t friss´ıteni kell, ha valtozik a nezet! ´ ´ a Vertex Problema: a modellunk ¨ modell k.r.-ben van, es ´ eszkoz ¨ k.r.-be visz at! ´ Shader normalizalt ´ szamoltassunk ´ ´ Megoldas: a Vertex Shader-rel vilag ´ akat ´ k.r.-beli koordinat is!
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ Tudd, hogy ertsd
´ Minden feluleti-optikai tulajdonsagot meg lehet adni ¨ ´ textur ´ konstanssal, vagy akar ´ aval. ˝ meg ´ tobbet, ¨ (Sot, ha ugyesek vagyunk!) ¨ ´ pont vilagkoordin ´ ´ Minden vektor es ata-rendszerben adott. ´ ´ eyePosition-t friss´ıteni kell, ha valtozik a nezet! ´ ´ a Vertex Problema: a modellunk ¨ modell k.r.-ben van, es ´ eszkoz ¨ k.r.-be visz at! ´ Shader normalizalt ´ szamoltassunk ´ ´ Megoldas: a Vertex Shader-rel vilag ´ akat ´ k.r.-beli koordinat is!
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ Tudd, hogy ertsd
´ Minden feluleti-optikai tulajdonsagot meg lehet adni ¨ ´ textur ´ konstanssal, vagy akar ´ aval. ˝ meg ´ tobbet, ¨ (Sot, ha ugyesek vagyunk!) ¨ ´ pont vilagkoordin ´ ´ Minden vektor es ata-rendszerben adott. ´ ´ eyePosition-t friss´ıteni kell, ha valtozik a nezet! ´ ´ a Vertex Problema: a modellunk ¨ modell k.r.-ben van, es ´ eszkoz ¨ k.r.-be visz at! ´ Shader normalizalt ´ szamoltassunk ´ ´ Megoldas: a Vertex Shader-rel vilag ´ akat ´ k.r.-beli koordinat is!
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ Tudd, hogy ertsd
´ Minden feluleti-optikai tulajdonsagot meg lehet adni ¨ ´ textur ´ konstanssal, vagy akar ´ aval. ˝ meg ´ tobbet, ¨ (Sot, ha ugyesek vagyunk!) ¨ ´ pont vilagkoordin ´ ´ Minden vektor es ata-rendszerben adott. ´ ´ eyePosition-t friss´ıteni kell, ha valtozik a nezet! ´ ´ a Vertex Problema: a modellunk ¨ modell k.r.-ben van, es ´ eszkoz ¨ k.r.-be visz at! ´ Shader normalizalt ´ szamoltassunk ´ ´ Megoldas: a Vertex Shader-rel vilag ´ akat ´ k.r.-beli koordinat is!
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ Tudd, hogy ertsd
´ Minden feluleti-optikai tulajdonsagot meg lehet adni ¨ ´ textur ´ konstanssal, vagy akar ´ aval. ˝ meg ´ tobbet, ¨ (Sot, ha ugyesek vagyunk!) ¨ ´ pont vilagkoordin ´ ´ Minden vektor es ata-rendszerben adott. ´ ´ eyePosition-t friss´ıteni kell, ha valtozik a nezet! ´ ´ a Vertex Problema: a modellunk ¨ modell k.r.-ben van, es ´ eszkoz ¨ k.r.-be visz at! ´ Shader normalizalt ´ szamoltassunk ´ ´ Megoldas: a Vertex Shader-rel vilag ´ akat ´ k.r.-beli koordinat is!
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ Adatstruktur ´ ak s t r u c t VS INPUT { f l o a t 4 pos : POSITION ; f l o a t 3 normal : NORMAL; }; s t r u c t VS OUTPUT { f l o a t 4 pos : POSITION ; f l o a t 3 normal : TEXCOORD0; f l o a t 3 worldPos : TEXCOORD1; };
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
Vertex shader VS OUTPUT L i g h t i n g V S ( VS INPUT i n p u t ) { VS OUTPUT o u t p u t ; o u t p u t . pos = mul ( i n p u t . pos , W o r l d V i e w P r o j e c t i o n ) ; o u t p u t . worldPos = mul ( i n p u t . pos , World ) . xyz ; o u t p u t . normal = mul ( InvWorld , f l o a t 4 ( i n p u t . normal , 0 ) ) . xyz ; return output ; }
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
Pixel shader f l o a t 4 L i g h t i n g P S ( f l o a t 3 normal : TEXCOORD0, f l o a t 3 worldPos : TEXCOORD1) : COLOR0 { normal = n o r m a l i z e ( normal ) ; f l o a t 3 t o L i g h t = ??? / / F e n y f o r r a s fuggo float diffuseIntensity = s a t u r a t e ( d o t ( normal , t o L i g h t ) ) ; f l o a t 3 r e f l e c t i o n = r e f l e c t ( t o L i g h t , normal ) ; f l o a t 3 directionToEye = n o r m a l i z e ( e y e P o s i t i o n worldPos ) ; // ...
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
Pixel shader // ... float specularIntensity = pow ( s a t u r a t e ( d o t ( r e f l e c t i o n , d i r e c t i o n T o E y e ) ) , specularPower ) ; i f ( d i f f u s e I n t e n s i t y <= 0 ) specularIntensity = 0; r e t u r n ambientColor ∗ a m b i e n t L i g h t + diffuseIntensity ∗ diffuseColor ∗ diffuseLight + specularIntensity ∗ specularColor ∗ specularLight ; }
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ ıtasa ´ toLight szam´ ´ fenyforr ´ ´ Irany as ´ iranya, ´ ´ iranyvektor: ´ Feny normalizalt float3 lightDirection toLight = -lightDirection
´ ´ Pont fenyforr as ´ pozicioja, ´ helyvektor: float3 lightPosition Feny toLight = normalize(lightPosition-worldPos)
´ ´ Spot fenyforr as ´ iranya, ´ ´ iranyvektor: ´ Feny normalizalt float3 lightDirection ´ pozicioja, ´ helyvektor: float3 lightPosition Feny toLight = normalize(lightPosition-worldPos) ´ ´ eseten ´ mint pont fenyforr as http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ ´ hatasa ´ Spot fenyforr as
´ extra parameter: ´ Ket ´ ¨ amin belul ´ belso˝ fenyk or: hat ¨ teljes intenzitassal ´ ¨ amin k´ıvul kuls or: ¨ o˝ fenyk ¨ abszolult ´ nem hat
¨ ott ¨ folyamatosan csokken ¨ ´ intenzitasa. ´ A ketto˝ koz a feny ´ ¨ oket ¨ ´ ´ ol ´ indulo, ´ a feny ´ irany ´ aval ´ A fenyk or a fenyforr asb ´ as ´ u´ (vegtelen)k ´ megeggyezo˝ all upoknak tekintjuk. ´ ¨ Egy feluleti pont akkor van benne egy kupban, ha a pontot ¨ ´ ´ ´ pozicioj ´ aval ´ ¨ ¨ o˝ egyenes a kupon a fenyforr as osszek ot belul ´ ¨ van.
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
http://cg.elte.hu
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
http://cg.elte.hu
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ ´ hatasa ´ Spot fenyforr as
˝ ´ Az elobbi szakasz iranya pont a toLight. ´ a -toLight altal ´ ´ szog, ¨ Ha a lightDirection es bezart ´ ¨ enek ´ kissebb, mint a kup og a fele, akkor a szakasz ´ ny´ılassz benne van a kupban, azaz a feluleti pont is. ´ ¨ ¨ ´ vizsgalni ´ azok cos-at, ´ ha a max. A szogek helyett eleg ´ ¨ ¤ 180 . ny´ılassz og ´ fenyk ´ ¨ a hozzajuk ´ Adjuk meg a ket ort, tartozo´ kupok ´ ´ ¨ ´ ´ ´ ny´ılasszogenek felenek cos-ava: ´ ¨ cosInnerCone belso˝ fenyk or: ´ ¨ cosOutterCone kuls or: ¨ o˝ fenyk
http://cg.elte.hu
˝ as ´ 10. eload
´ arty ´ ak ´ Grafikus gyors´ıtok ´ ıtasi ´ modellek megvalos´ ´ ıtasa ´ Megvilag´
´ ´ Absztrakt fenyforr asok ´ ıtasi ´ modellek Megvilag´ Shader programok
´ ´ hatasa ´ Spot fenyforr as
smoothstep(min, max, x): 0, ha x<min 1, ha x>max ´ ´ 1 koz ¨ ott ¨ kul. lin. atmenet 0 es ¨
float spotFactor = smoothstep(cosOutterCone, cosInnerCone, dot(lightDirection, -toLight)) ´ a spekularis ´ tagot. Ezzel kell beszorozni a diffuz ´ es ´ specularIntensity Pl. diffuseIntensity-t es
http://cg.elte.hu
˝ as ´ 10. eload