Klár Gergely 2010/2011. tavaszi félév

Hasonló dokumentumok
2. Generáció ( ) 3. Generáció (2001) NVIDIA TNT2, ATI Rage, 3dfx Voodoo3. Klár Gergely

Valasek Gábor

Grafikus csővezeték 1 / 44

HLSL programozás. Szécsi László

HLSL programozás. Grafikus játékok fejlesztése Szécsi László t06-hlsl

Hajder Levente 2017/2018. II. félév

Tartalom. Tartalom. Anyagok Fényforrás modellek. Hajder Levente Fényvisszaverési modellek. Színmodellek. 2017/2018. II.

Direct3D pipeline. Grafikus játékok fejlesztése Szécsi László t03-pipeline

Számítógépes Graka - 4. Gyak

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Árnyalás, env mapping. Szécsi László 3D Grafikus Rendszerek 3. labor

Textúrák. Szécsi László

Párhuzamos és Grid rendszerek

Grafikus csővezeték és az OpenGL függvénykönyvtár

A bemutatott példa a Phong modell egy egyszerűsített változatát alkalmazza a Blinn-Phong-féle megközelítést

Plakátok, részecskerendszerek. Szécsi László

A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja Teljesítménykövetelmények:

GPGPU alapok. GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai

Maga a tématerület így nagyon nagy. A fények pontos fizikai szimulációja kimondottan számításigényes

Haladó Grafika EA. Inkrementális képszintézis GPU-n

Bevezetés a CGI-be. 1. Történelem

1. Bevezetés 1. Köszönetnyilvánítás A számítógépes játékfejlesztésről 3

GPGPU. Architektúra esettanulmány

Grafikus csővezeték 2 / 77

Diplomamunka. Miskolci Egyetem. GPGPU technológia kriptográfiai alkalmazása. Készítette: Csikó Richárd VIJFZK mérnök informatikus

OpenCL - The open standard for parallel programming of heterogeneous systems

GPGPU. GPU-k felépítése. Valasek Gábor

SZE, Doktori Iskola. Számítógépes grafikai algoritmusok. Összeállította: Dr. Gáspár Csaba. Felületmegjelenítés

x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs mátrixa 3D-ben?

2D képszintézis. Szirmay-Kalos László

Transzformációk. Grafikus játékok fejlesztése Szécsi László t05-transform

Tanács Attila. Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Grafikus csővezeték (Általános áttekintés) Grafikus csővezeték (Általános áttekintés)

D3D, DXUT primer. Grafikus játékok fejlesztése Szécsi László t01-system

A CUDA előnyei: - Elszórt memória olvasás (az adatok a memória bármely területéről olvashatóak) PC-Vilag.hu CUDA, a jövő technológiája?!

Számítógépes Grafika mintafeladatok

Tartalomjegyzék. Köszönetnyilvánítás... xv. Előszó... xvii. 1. Bevezető D-történelem Matematikai alapok... 7

Realisztikus színtér 1 / 59

Láthatósági kérdések

Hajder Levente 2017/2018. II. félév

(Solid modeling, Geometric modeling) Testmodell: egy létező vagy elképzelt objektum digitális reprezentációja.

Robotika. Kinematika. Magyar Attila

Transzformációk. Szécsi László

Grafikus processzorok általános célú programozása (GPGPU)

Farkas Gyula Szakkollégium Bit- és számtologatók. DirectX9 1. Szín, fény, textúra 2. Stencil buffer használata (tükörkép, hamis árnyék)

Klár Gergely 2010/2011. tavaszi félév

OpenCL Kovács, György

Klár Gergely 2010/2011. tavaszi félév

Grafika programozása

Szirmay-Kalos László. L(x, ω)=l e (x,ω)+ L(h(x,-ω),ω) f r (ω,x, ω) cos θ dω A jobb oldali radiancia:

Tartalom. Tartalom. Hajder Levente 2018/2019. I. félév

Tartalom. Hajder Levente 2016/2017. I. félév

Számítógépes grafika

Modellezési transzformáció: [r lokális,1] T M = [r világ,1] Nézeti transzformáció: [r világ,1] T v = [r képernyo,1]

Geometriai modellezés. Szécsi László

OSZTOTT 2D RASZTERIZÁCIÓS MODELL TÖBBMAGOS PROCESSZOROK SZÁMÁRA

GPGPU-k és programozásuk Dezső, Sima Sándor, Szénási

Tartalom. Tartalom. Raycasting. Hajder Levente 2017/2018. II. félév. Raycasting. Raycasting. Sugár és háromszög metszéspontja

SZAKDOLGOZAT. Rákos Dániel

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Hajder Levente 2016/2017.

HARDVERESEN GYORSÍTOTT 3D/2D RENDERELÉS

SDL_Universe SDL, C++, 3D szoftver renderelő

Renderelés megjelenésmódok, fények, anyagjellemzők

Féléves feladat. Miről lesz szó? Bemutatkozás és követelmények

A számítógépes grafika alapjai kurzus, vizsgatételek és tankönyvi referenciák 2014

Klár Gergely Informatikai Kar. 2010/2011. tavaszi félév

5. előadás. Skaláris szorzás

GPU-Accelerated Collocation Pattern Discovery

OpenGL Compute Shader-ek. Valasek Gábor

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

Geometria brute force tárolása

efocus Content management, cikkírás referencia

3D koordináta-rendszerek

Az A négyzetes mátrixnak pontosan akkor létezik kétoldali inverze, ha det(a) 0

Vektorok összeadása, kivonása, szorzás számmal, koordináták

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

Ismétlés: Moore törvény. Tranzisztorok mérőszáma: n*százmillió, n*milliárd.

GRAFIKA PROGRAMOZÁSA. Bemutatkozás és követelmények. Dr. Mileff Péter

AliROOT szimulációk GPU alapokon

Számítógépes Grafika mintafeladatok

Tartalom. Megjegyzések. Valasek Gábor Befoglaló keretek. Felosztások. Informatikai Kar

KUTATÁSOK INFORMATIKAI TÁMOGATÁSA. Dr. Szénási Sándor

TÉRINFORMATIKAI ÉS TÁVÉRZÉKELÉSI ALKALMAZÁSOK FEJLESZTÉSE

Koordináta-geometria II.

GPGPU: Általános célú grafikus processzorok cgpu: computational GPU GPGPU = cgpu Adatpárhuzamos gyorsító: dedikált eszköz, ami eleve csak erre

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

TÉRINFORMATIKAI ALGORITMUSOK

GPGPU programozás lehetőségei. Nagy Máté Ferenc Budapest ALICE ELTE TTK Fizika MSc 2011 e-science Café

Videókártya - CUDA kompatibilitás: CUDA weboldal: Példaterületek:

Optika gyakorlat 2. Geometriai optika: planparalel lemez, prizma, hullámvezető

Véletlen szám generálás Labirintus felépítése 1x1-es felbontástól a teljes méretig

Kinematika szeptember Vonatkoztatási rendszerek, koordinátarendszerek

Algoritmusok raszteres grafikához

Hajder Levente 2017/2018. II. félév

Nincs szinkronizáció és kommunikáció Csővezeték alkalmazása Párhuzamosítás

Máté: Számítógépes grafika alapjai

Függvények növekedési korlátainak jellemzése

2014/2015. tavaszi félév

Átírás:

Számítógépes Grafika Klár Gergely tremere@elte.hu Eötvös Loránd Tudományegyetem Informatikai Kar 2010/2011. tavaszi félév

Tartalom Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 1 Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 2

1. Generáció Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 NVIDIA TNT2, ATI Rage, 3dfx Voodoo3 A standard 2d-s videokártyák kiegészítése Csúcspont transzformációkat még a CPU csinálja! A kártya csak a textúrázást, Z-buffer kezelést végezte

2. Generáció (1999-2000) Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 NVIDIA GeForce 256, GeForce 2, ATI Radeon 7500 Átveszik a transzformációk és az árnyalás kezelését a CPU-tól. Az OpenGL és DirectX 7 is támogatja a hardveres csúcspont transzformációkat Multi-textúrázás megjelenése: bump map, light map Konfigurálható (driver szinten), de még nem programozható

3. Generáció (2001) Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 NVIDIA GeForce 3, GeForce 4 Ti, Xbox, ATI Radeon 8500 A csúcspont pipeline korlátozott programozhatósága Fejlettebb pixel szintű konfigurálás, de még nem programozás 3d-s textúrák, többszörös mintavételezés (antialias-hoz)

4. Generáció (2002) Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 NVIDIA GeForce FX, ATI Radeon 9700 A csúcspont és pixel pipeline teljesen programozható (erőforrás-korlátok azért még vannak) Magas szintű árnyaló nyelvek (shading languages) megjelenése (NVIDIA Cg, Microsoft HLSL, OpenGL GLSL) Shader Model 2.0 (simple branching)

5. Generáció (2004) Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 NVIDIA GeForce 6, ATI Radeon X, GeForce 7 Több puffer szimultán renderelése 64bites pipeline PCIe busz Több memória, hosszabb csúcspont árnyaló programok Shader Model 3.0 (branching and looping in the pixel shader (physics)) HDRI, SLI, TSAA, TMAA

6. Generáció (2007) Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 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

7. Generáció (2009-) Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 DirectX 11, OpenGL 4.1 Shader Model 5.0 (Compute Shader, Tesselation Shaders: Hull Shader & Domain Shader) Többszállúság Dynamic Shader Linkage: OOP jellegű szolgátatások HLSL-ben 3000+ Mtransistors 1000 GFLOPs

SM3.0 Grafikus szerelőszalag Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 Vertex Shader Primitive Assembly Rasterisation Fragment Shader Pixel Rendering

Vertex Shader Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 Feladata: csúcspontok modell k.r. Ñ normalizált eszköz k.r. A vertex buffer minden elemén lefut Bemenet: csúcsok modell k.r.-ben + egyéb legalább a csúcspont poziciója bármilyen egyéb adat, ami a vertex buffer-ben meg van adva Kimenet: csúcs normalizált eszköz k.r.-ben + egyéb legalább a csúcspont poziciója bármilyen egyéb adat

Pixel Shader Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 Másik neve: fragment shader Fragment: pixel méretű 3Ds darabka PS feladata: az egyes fragment-ek színének meghatározása A raszterizált háromszögek minden egyes fragment-jére lefut. Az adott fragment-et eldobhatja. Bemenete: A vertex shader kimenő paramétereinek interpoláltjai. Kimenete: Az adott fragment-hez rendelendő szín.

SM4 Grafikus szerelőszalag Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 Input Assambler Vertex Shader Geometry Shader Stream Output Rasterizer Pixel Shader Output Merger msdn.microsoft.com

Geometry Shader Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 Feladata: új geometria generálása, (vagy régi eltüntetése) A vertex shader által már transzformált primitívekre fut let. Bemenete: teljes primitív (szomszédsági infókkal, ha vannak) Kimenete: újabb primitív[ek], vagy semmi. Kimeneti típusok:pointstream, LineStream, vagy TriangleStream

Algoritmusok Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 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

Generációk Shader Model 3.0 (és korábban) 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 szerelőszalagon kívül: Compute Shader msdn.microsoft.com

Tesszelációs lépések Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 Speciális primitív tipusokat használ négyszög foltok (patches) háromszög foltok iso-vonalak Alapötlet: a transzformációkat az alacsony felbontású foltokon végezzük, és tesszelációval, hardveresen bontjuk fel kisebb darabokra és tesszük részletgazdaggá. Használató: displacement mapping nézet függő dinamikus LOD (level of detail) morph-olások gyorsítása

Hull Shader Stage Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 Foltonként dolgozza fel a bementi pontokat. Konstansokat rendel a folthoz, amik a tesszelálás módját határozzák meg. Megadja a tesszeláció mértékét. Két külön kimenet: Vezérlő pontok a Domain Shader-nek Konstansok a Tesselator Stage-nek msdn.microsoft.com

Tesselator Stage Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 Nem programozható. Felbontja a tartományt kisebb darabokra (négszög, háromszög, szakasz). u, v (opcionálisan w) koordinátákat állít elő kimenetként. Láthatatlan kimenet: topológiai információk a primitive assembly-nek

Domain Shader Stage Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 A Tesselator Stage során előállított minden egyes pontra lefut. Bemenete: A Tesselator Stage-től: u, v, pw q-k. A Hull Shader-től: vezérlő pontok A Hull Shader-től: tesszelációs faktorok A bemetekből egyetlen csúcspontot állít elő, és az lesz a kimenet. msdn.microsoft.com

Compute Shader Generációk Shader Model 3.0 (és korábban) Shader Model 4.0 Shader Model 5.0 Általános célú számításokat tesz lehetővé a GPU-n. Speciális adatszerkezeteket használ. Nincsenek megszorítások a ki- és bemenetekre. Felhasználásai: Képfeldolgozás/post-processing Ray-tracing Fizika AI Testvérei CUDA OpenCL

Tartalom 1 2

(ism.) Irány fényforrás csak iránya van egyetlen (világ k.r. beli) vektor megadja a fénysugarakat párhuzamosnak tekintjük távoli fényforrások megadására használható Pont fényforrás csak pozíciója van egy ponttal adjuk meg, világ k.r.-ben Pl.: villanykörte Spot fényforrás iránya, poziciója és fényköre van két szög + egy pont és egy vektor adja meg (világ k.r.!) Pl.: asztali lámpa

(ism.) Irány fényforrás csak iránya van egyetlen (világ k.r. beli) vektor megadja a fénysugarakat párhuzamosnak tekintjük távoli fényforrások megadására használható Pont fényforrás csak pozíciója van egy ponttal adjuk meg, világ k.r.-ben Pl.: villanykörte Spot fényforrás iránya, poziciója és fényköre van két szög + egy pont és egy vektor adja meg (világ k.r.!) Pl.: asztali lámpa

(ism.) Irány fényforrás csak iránya van egyetlen (világ k.r. beli) vektor megadja a fénysugarakat párhuzamosnak tekintjük távoli fényforrások megadására használható Pont fényforrás csak pozíciója van egy ponttal adjuk meg, világ k.r.-ben Pl.: villanykörte Spot fényforrás iránya, poziciója és fényköre van két szög + egy pont és egy vektor adja meg (világ k.r.!) Pl.: asztali lámpa

Jelölések (ism.) v : ω a nézeti irány l : ω1 a megvilágító, a fényt adó pont fele mutató vektor n a felületi normális v, l, n egységvektorok θ 1 a l és a n által bezárt szög

Ambiens tag A színtéren mindenütt jelenlevő fénymennyiség. Képlet: k a L a. k a a felülettől függ, legyen float4 ambientcolor. A float4 az egy rgba négyes, ahol a az átlátszógás. L a fénytől, felülettől független. Szintén legyen float4 ambientlight, de a 1. Pixel shaderben használható: ambientcolor*ambientlight

Ambiens tag A színtéren mindenütt jelenlevő fénymennyiség. Képlet: k a L a. k a a felülettől függ, legyen float4 ambientcolor. A float4 az egy rgba négyes, ahol a az átlátszógás. L a fénytől, felülettől független. Szintén legyen float4 ambientlight, de a 1. Pixel shaderben használható: ambientcolor*ambientlight

Ambiens tag A színtéren mindenütt jelenlevő fénymennyiség. Képlet: k a L a. k a a felülettől függ, legyen float4 ambientcolor. A float4 az egy rgba négyes, ahol a az átlátszógás. L a fénytől, felülettől független. Szintén legyen float4 ambientlight, de a 1. Pixel shaderben használható: ambientcolor*ambientlight

Ambiens tag A színtéren mindenütt jelenlevő fénymennyiség. Képlet: k a L a. k a a felülettől függ, legyen float4 ambientcolor. A float4 az egy rgba négyes, ahol a az átlátszógás. L a fénytől, felülettől független. Szintén legyen float4 ambientlight, de a 1. Pixel shaderben használható: ambientcolor*ambientlight

Ambiens tag A színtéren mindenütt jelenlevő fénymennyiség. Képlet: k a L a. k a a felülettől függ, legyen float4 ambientcolor. A float4 az egy rgba négyes, ahol a az átlátszógás. L a fénytől, felülettől független. Szintén legyen float4 ambientlight, de a 1. Pixel shaderben használható: ambientcolor*ambientlight

Ambiens tag A színtéren mindenütt jelenlevő fénymennyiség. Képlet: k a L a. k a a felülettől függ, legyen float4 ambientcolor. A float4 az egy rgba négyes, ahol a az átlátszógás. L a fénytől, felülettől független. Szintén legyen float4 ambientlight, de a 1. Pixel shaderben használható: ambientcolor*ambientlight

Lambert-törvény BRDF: L ref L i k d cos θ 1 Ezt neveztük diffúz színnek. k d és L i mint az előbb, de L i az aktuális fényforrás tulajdonsága: float4 diffusecolor float4 diffuselight Kéne még: cos θ 1. Kiszámítása: saturate(dot(normal, tolight)) Ismerni kell hozzá normal = n-t és tolight = l-t. Spot fényforrásnál a fénykört is figyelembe kell majd venni.

Lambert-törvény BRDF: L ref L i k d cos θ 1 Ezt neveztük diffúz színnek. k d és L i mint az előbb, de L i az aktuális fényforrás tulajdonsága: float4 diffusecolor float4 diffuselight Kéne még: cos θ 1. Kiszámítása: saturate(dot(normal, tolight)) Ismerni kell hozzá normal = n-t és tolight = l-t. Spot fényforrásnál a fénykört is figyelembe kell majd venni.

Lambert-törvény BRDF: L ref L i k d cos θ 1 Ezt neveztük diffúz színnek. k d és L i mint az előbb, de L i az aktuális fényforrás tulajdonsága: float4 diffusecolor float4 diffuselight Kéne még: cos θ 1. Kiszámítása: saturate(dot(normal, tolight)) Ismerni kell hozzá normal = n-t és tolight = l-t. Spot fényforrásnál a fénykört is figyelembe kell majd venni.

Lambert-törvény BRDF: L ref L i k d cos θ 1 Ezt neveztük diffúz színnek. k d és L i mint az előbb, de L i az aktuális fényforrás tulajdonsága: float4 diffusecolor float4 diffuselight Kéne még: cos θ 1. Kiszámítása: saturate(dot(normal, tolight)) Ismerni kell hozzá normal = n-t és tolight = l-t. Spot fényforrásnál a fénykört is figyelembe kell majd venni.

Lambert-törvény BRDF: L ref L i k d cos θ 1 Ezt neveztük diffúz színnek. k d és L i mint az előbb, de L i az aktuális fényforrás tulajdonsága: float4 diffusecolor float4 diffuselight Kéne még: cos θ 1. Kiszámítása: saturate(dot(normal, tolight)) Ismerni kell hozzá normal = n-t és tolight = l-t. Spot fényforrásnál a fénykört is figyelembe kell majd venni.

Lambert-törvény BRDF: L ref L i k d cos θ 1 Ezt neveztük diffúz színnek. k d és L i mint az előbb, de L i az aktuális fényforrás tulajdonsága: float4 diffusecolor float4 diffuselight Kéne még: cos θ 1. Kiszámítása: saturate(dot(normal, tolight)) Ismerni kell hozzá normal = n-t és tolight = l-t. Spot fényforrásnál a fénykört is figyelembe kell majd venni.

Lambert-törvény BRDF: L ref L i k d cos θ 1 Ezt neveztük diffúz színnek. k d és L i mint az előbb, de L i az aktuális fényforrás tulajdonsága: float4 diffusecolor float4 diffuselight Kéne még: cos θ 1. Kiszámítása: saturate(dot(normal, tolight)) Ismerni kell hozzá normal = n-t és tolight = l-t. Spot fényforrásnál a fénykört is figyelembe kell majd venni.

Spekuláris visszaverődés - Phong modell BRDF: L ref L i k s pcos φq n, ahol φ az r tükörirány és a v nézeti irány által bezárt szög. k d és L i (ez egy másik L i ) megint mint az előbb, L i szintén az aktuális fényforrás tulajdonsága: float4 specularcolor float4 specularlight n felület függő konstans, legyen float specularpower

Spekuláris visszaverődés - Phong modell BRDF: L ref L i k s pcos φq n, ahol φ az r tükörirány és a v nézeti irány által bezárt szög. k d és L i (ez egy másik L i ) megint mint az előbb, L i szintén az aktuális fényforrás tulajdonsága: float4 specularcolor float4 specularlight n felület függő konstans, legyen float specularpower

Spekuláris visszaverődés - Phong modell BRDF: L ref L i k s pcos φq n, ahol φ az r tükörirány és a v nézeti irány által bezárt szög. k d és L i (ez egy másik L i ) megint mint az előbb, L i szintén az aktuális fényforrás tulajdonsága: float4 specularcolor float4 specularlight n felület függő konstans, legyen float specularpower

Spekuláris visszaverődés - Phong modell BRDF: L ref L i k s pcos φq n ; r tükörirány és a v nézeti irány. Kéne cos φ, amihez meg kéne r és v. r a l vektor n-re vett tükörképe. Számítása: float3 reflection = reflect(-tolight, normal) v a nézeti irány, azaz a feületi pontból a camerába mutató egységvektor. float3 directiontoeye = normalize(eyeposition-worldpos) pcos φq n számítása: pow(saturate(dot(reflection, directiontoeye)), specularpower)

Spekuláris visszaverődés - Phong modell BRDF: L ref L i k s pcos φq n ; r tükörirány és a v nézeti irány. Kéne cos φ, amihez meg kéne r és v. r a l vektor n-re vett tükörképe. Számítása: float3 reflection = reflect(-tolight, normal) v a nézeti irány, azaz a feületi pontból a camerába mutató egységvektor. float3 directiontoeye = normalize(eyeposition-worldpos) pcos φq n számítása: pow(saturate(dot(reflection, directiontoeye)), specularpower)

Spekuláris visszaverődés - Phong modell BRDF: L ref L i k s pcos φq n ; r tükörirány és a v nézeti irány. Kéne cos φ, amihez meg kéne r és v. r a l vektor n-re vett tükörképe. Számítása: float3 reflection = reflect(-tolight, normal) v a nézeti irány, azaz a feületi pontból a camerába mutató egységvektor. float3 directiontoeye = normalize(eyeposition-worldpos) pcos φq n számítása: pow(saturate(dot(reflection, directiontoeye)), specularpower)

Spekuláris visszaverődés - Phong modell BRDF: L ref L i k s pcos φq n ; r tükörirány és a v nézeti irány. Kéne cos φ, amihez meg kéne r és v. r a l vektor n-re vett tükörképe. Számítása: float3 reflection = reflect(-tolight, normal) v a nézeti irány, azaz a feületi pontból a camerába mutató egységvektor. float3 directiontoeye = normalize(eyeposition-worldpos) pcos φq n számítása: pow(saturate(dot(reflection, directiontoeye)), specularpower)

Összefoglalva Felület tulajdonságai ambientcolor diffusecolor specularcolor specularpower normal worldpos Fényforrás tulajdonságai diffuselight specularlight tolight Színtér tulajdonságai ambientlight eyeposition

Összefoglalva Felület tulajdonságai ambientcolor diffusecolor specularcolor specularpower normal worldpos Fényforrás tulajdonságai diffuselight specularlight tolight Színtér tulajdonságai ambientlight eyeposition

Összefoglalva Felület tulajdonságai ambientcolor diffusecolor specularcolor specularpower normal worldpos Fényforrás tulajdonságai diffuselight specularlight tolight Színtér tulajdonságai ambientlight eyeposition

Tudd, hogy értsd Minden felületi-optikai tulajdonságot meg lehet adni konstanssal, vagy akár textúrával. (Sőt, még többet, ha ügyesek vagyunk!) Minden vektor és pont világkoordináta-rendszerben adott. eyeposition-t frissíteni kell, ha változik a nézet! Probléma: a modellünk modell k.r.-ben van, és a Vertex Shader normalizált eszköz k.r.-be visz át! Megoldás: számoltassunk a Vertex Shader-rel világ k.r.-beli koordinátákat is!

Tudd, hogy értsd Minden felületi-optikai tulajdonságot meg lehet adni konstanssal, vagy akár textúrával. (Sőt, még többet, ha ügyesek vagyunk!) Minden vektor és pont világkoordináta-rendszerben adott. eyeposition-t frissíteni kell, ha változik a nézet! Probléma: a modellünk modell k.r.-ben van, és a Vertex Shader normalizált eszköz k.r.-be visz át! Megoldás: számoltassunk a Vertex Shader-rel világ k.r.-beli koordinátákat is!

Tudd, hogy értsd Minden felületi-optikai tulajdonságot meg lehet adni konstanssal, vagy akár textúrával. (Sőt, még többet, ha ügyesek vagyunk!) Minden vektor és pont világkoordináta-rendszerben adott. eyeposition-t frissíteni kell, ha változik a nézet! Probléma: a modellünk modell k.r.-ben van, és a Vertex Shader normalizált eszköz k.r.-be visz át! Megoldás: számoltassunk a Vertex Shader-rel világ k.r.-beli koordinátákat is!

Tudd, hogy értsd Minden felületi-optikai tulajdonságot meg lehet adni konstanssal, vagy akár textúrával. (Sőt, még többet, ha ügyesek vagyunk!) Minden vektor és pont világkoordináta-rendszerben adott. eyeposition-t frissíteni kell, ha változik a nézet! Probléma: a modellünk modell k.r.-ben van, és a Vertex Shader normalizált eszköz k.r.-be visz át! Megoldás: számoltassunk a Vertex Shader-rel világ k.r.-beli koordinátákat is!

Tudd, hogy értsd Minden felületi-optikai tulajdonságot meg lehet adni konstanssal, vagy akár textúrával. (Sőt, még többet, ha ügyesek vagyunk!) Minden vektor és pont világkoordináta-rendszerben adott. eyeposition-t frissíteni kell, ha változik a nézet! Probléma: a modellünk modell k.r.-ben van, és a Vertex Shader normalizált eszköz k.r.-be visz át! Megoldás: számoltassunk a Vertex Shader-rel világ k.r.-beli koordinátákat is!

Tudd, hogy értsd Minden felületi-optikai tulajdonságot meg lehet adni konstanssal, vagy akár textúrával. (Sőt, még többet, ha ügyesek vagyunk!) Minden vektor és pont világkoordináta-rendszerben adott. eyeposition-t frissíteni kell, ha változik a nézet! Probléma: a modellünk modell k.r.-ben van, és a Vertex Shader normalizált eszköz k.r.-be visz át! Megoldás: számoltassunk a Vertex Shader-rel világ k.r.-beli koordinátákat is!

Adatstruktúrák 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; } ;

Vertex shader VS OUTPUT LightingVS ( VS INPUT i n p u t ) { VS OUTPUT output ; output. pos = mul ( i n p u t. pos, WorldViewProjection ) ; output. worldpos = mul ( i n p u t. pos, World ). xyz ; output. normal = mul ( InvWorld, f l o a t 4 ( i n p u t. normal, 0 ) ). xyz ; } r e t u r n output ;

Pixel shader f l o a t 4 LightingPS ( f l o a t 3 normal : TEXCOORD0, f l o a t 3 worldpos : TEXCOORD1) : COLOR0 { normal = normalize ( normal ) ; f l o a t 3 t o L i g h t =??? / / Fenyforras fuggo f l o a t d i f f u s e I n t e n s i t y = s a t u r a t e ( dot ( 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 = normalize ( eyeposition worldpos ) ; / /...

Pixel shader / /... f l o a t s p e c u l a r I n t e n s i t y = pow( s a t u r a t e ( dot ( r e f l e c t i o n, directiontoeye ) ), specularpower ) ; i f ( d i f f u s e I n t e n s i t y <= 0) s p e c u l a r I n t e n s i t y = 0; r e t u r n ambientcolor ambientlight + d i f f u s e I n t e n s i t y d i f f u s e C o l o r d i f f u s e L i g h t + s p e c u l a r I n t e n s i t y specularcolor s p e c u l a r L i g h t ; }

tolight számítása Irány fényforrás Fény iránya, normalizált irányvektor: float3 lightdirection tolight = -lightdirection Pont fényforrás Fény poziciója, helyvektor: float3 lightposition tolight = normalize(lightposition-worldpos) Spot fényforrás Fény iránya, normalizált irányvektor: float3 lightdirection Fény poziciója, helyvektor: float3 lightposition tolight = normalize(lightposition-worldpos) mint pont fényforrás esetén

Spot fényforrás hatása Két extra paraméter: belső fénykör: amin belül teljes intenzitással hat külső fénykör: amin kívül abszolúlt nem hat A kettő között folyamatosan csökken a fény intenzitása. A fényköröket a fényforrásból induló, a fény irányával megeggyező állású (végtelen)kúpoknak tekintjük. Egy felületi pont akkor van benne egy kúpban, ha a pontot a fényforrás poziciójával összekötő egyenes a kúpon belül van.

Spot fényforrás hatása Az előbbi szakasz iránya pont a tolight. Ha a lightdirection és a -tolight által bezárt szög, kissebb, mint a kúp nyílásszögének a fele, akkor a szakasz benne van a kúpban, azaz a felületi pont is. A szögek helyett elég vizsgálni azok cos-át, ha a max. nyílásszög 180. Adjuk meg a két fénykört, a hozzájuk tartozó kúpok nyílásszögének felének cos-áva: belső fénykör: cosinnercone külső fénykör: cosouttercone

Spot fényforrás hatása smoothstep(min, max, x): 0, ha x<min 1, ha x>max lin. átmenet 0 és 1 között kül. float spotfactor = smoothstep(cosouttercone, cosinnercone, dot(lightdirection, -tolight)) Ezzel kell beszorozni a diffúz és a spekuláris tagot. Pl. diffuseintensity-t és specularintensity