2. Generáció (1999-2000) 3. Generáció (2001) NVIDIA TNT2, ATI Rage, 3dfx Voodoo3. Klár Gergely tremere@elte.hu



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

Valasek Gábor

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

Grafikus csővezeték 1 / 44

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

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

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

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

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.

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

Párhuzamos és Grid rendszerek

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

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

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

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

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

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

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

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

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

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

Grafikus csővezeték 2 / 77

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

GPGPU. Architektúra esettanulmány

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

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

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?

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

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

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

OpenCL - The open standard for parallel programming of heterogeneous systems

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

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

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

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

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

OpenCL Kovács, György

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

Grafika programozása

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

SZAKDOLGOZAT. Rákos Dániel

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)

Realisztikus színtér 1 / 59

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

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

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

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]

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

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

Hajder Levente 2016/2017.

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

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

GPU-Accelerated Collocation Pattern Discovery

efocus Content management, cikkírás referencia

OpenGL Compute Shader-ek. Valasek Gábor

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

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

Számítógépes grafika

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

3D koordináta-rendszerek

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

Robotika. Kinematika. Magyar Attila

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

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

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

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

Számítógépes grafika

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

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

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:

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

Számítógépes Grafika SZIE YMÉK

Számítógépes Grafika mintafeladatok

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

AliROOT szimulációk GPU alapokon

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

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

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

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

Geometria brute force tárolása

Hatékony eljárások mozgó objektumok valósidejű 3D-s rekonstrukciójához GPU segítségével

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

Koordináta-geometria feladatok (középszint)

Eredmények, objektumok grafikus megjelenítése 3D felületek rajzoló függvényei

OpenGL és a mátrixok

Analitikus térgeometria

Bánhelyi Balázs, Csendes Tibor, Palatinus Endre és Lévai. Szeptember 28-30, 2011, Balatonöszöd, Hungary

Koordináta-geometria II.

GPU alkalmazása az ALICE eseménygenerátorában

Számítási feladatok a Számítógépi geometria órához

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

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

KÉPFELDOLGOZÁS A DIRECTX 9 MAGAS SZINTŰ ÁRNYALÓ NYELVÉNEK SEGÍTSÉGÉVEL

I. Vektorok. Adott A (2; 5) és B ( - 3; 4) pontok. (ld. ábra) A két pont által meghatározott vektor:

Lineáris algebra zárthelyi dolgozat javítókulcs, Informatika I márc.11. A csoport

Átírás:

1. Generáció Számítógépes Grafika Klár Gergely tremere@elte.hu Eötvös Loránd Tudományegyetem Informatikai Kar 2010/2011. őszi félév 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) 3. Generáció (2001) 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ó 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) 5. Generáció (2004) 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) 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) 7. Generáció (2009-) 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 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 Vertex Shader Vertex Shader Primitive Assembly Rasterisation Fragment Shader Pixel Rendering 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 SM4 Grafikus szerelőszalag 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. Input Assambler Vertex Shader Geometry Shader Stream Output Rasterizer Pixel Shader Output Merger msdn.microsoft.com

Geometry Shader Algoritmusok 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 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 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 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 Tesselator Stage 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 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 Compute Shader 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 Á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

Absztrakt fényforrások (ism.) Jelölések (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 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 Lambert-törvény 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 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 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 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 Tudd, hogy értsd 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 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 Vertex shader 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; } ; 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 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 ) ; / /... / /... 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 Spot fényforrás hatá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 Két extra paraméter: belső fénykör: amin belül teljes intenzitással hat külső fénykör: amin belü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