Textury v real-time grafice 2004-2005 Josef Pelikán, MFF UK Praha http://cgg.ms.mff.cuni.cz/~pepca/ Josef.Pelikan@mff.cuni.cz
Textury vylepšují vzhled povrchu těles modifikace barvy ( bitmapa ) dojem hrbolatého povrchu ( bump-texture ) příp. modulace dalších parametrů: průhlednost, odrazivost, lesk, osvětlení z okolí Definice textury: 1D, 2D datovým polem (rastr, bitmapa ) nejčastější, umí to každý HW 3D datovým polem ( volume texture ) procedurálně algoritmem v každém pixelu (programovatelné GPU)
Definiční obory textur R N V α α explicitní [s,t] [x,y,z] nebo projektor T
Mapování textur 2D textury se musí na povrch tělesa mapovat texturové souřadnice [ u, v ] (v OpenGL [ s, t ]) se zadávají v každém vrcholu grafický akcelerátor je interpoluje do jednotlivých pixelů v bitmapě se musí intepolovat (mezi sousedními pixely textury = texely ) v v u u Coke Coke
Automatické projektory grafický HW umí některé projekce 3D 2D úspora přenosu dat z CPU na GPU dostupné projektory (viz gltexgen): sférická projekce (singularita na pólu) cylindrická projekce lineární projekce (používá se často i pro 1D texturu) uživatelské transformační matice pro texturové souřadnice (viz mód GL_TEXTURE) mohou pracovat i s homogenní složkou (perspektiva) animace textur na povrchu těles
Opakování textur standardní rozsah texturovacích souřadnic: [0,1] D jak se zobrazí údaje mimo tento rozsah? cyklické opakování (repeat, wrap, tile) zrcadlové opakování (mirror, flip) každá druhá dlaždice se zrcadlově převrátí může vést k lepší (automatické) spojitosti textury nejbližší texel (clamp, clamp to edge) odolnost k numerickým chybám na okraji textury explicitní okraj (border, clamp to border) zadán explicitně nebo jedním řádkem/sloupcem textury
Opakování: repeat, mirror repeat Tex Tex Tex Tex Tex Tex Tex Tex Tex mirror
Opakování: clamp, border Tex Tex clamp border
Transformace texturových souřadnic maticové transformace prováděné na GPU obecná homogenní matice 4 4 vektor texturových souřadnic: [ s, t, r, q ] q hraje roli homogenní složky (projektivní transformace) OpenGL: další zásobník transformačních matic GL_TEXTURE dá se nastavit individuálně pro každou texturovací jednotku = každá TU (viz dále) má svůj zásobník
Kombinace textur moderní GPU umějí v jednom pixelu kombinovat několik textur ( multitexturing ) globální (pomalu se měnící) základ + detailní textura předem spočítané osvětlení ( light-map ) environment maps odlesk zbytku scény apod....
Kombinace textur běžně implementované kombinační funkce: REPLACE (ignoruje se původní barva) MODULATE (násobení jen snižuje původní barvu) DECAL (poloprůhledná textura na barevný povrch) INTERPOLATE (lineární interpolace 2 argumentů) DOT3_RGB[A] (skalární součin složek, pro 3D) ADD, ADD_SIGNED, SUBTRACT,.. programovatelné GPU ( fragment shader ) mají potenciálně neomezené možnosti
Texturovací jednotky jedna texturovací jednotka (TU): vybírá hodnotu z jedné textury (i s filtrováním, viz) realizuje zadanou kombinační funkci výsledek se zapisuje do výstupního fragmentu vstupy (argumenty) kombinační funkce: předchozí barva (výstup předcházející TU) data z textury (přečtený/filtrovaný texel) konstantní barva (viz GL_TEXTURE_ENV_COLOR) primární barva (před texturováním = interpolovaná barva z rasterizační jednotky)...
Texturovací kaskáda lineární zapojení texturovacích jednotek: primární barva TU 0 Tex0 data Tex1 data TU 1 Tex2 data TU 2 výsledná barva fragmentu
Příklad složitějšího zapojení TU Global TU 1 + diffuse Detail Diffuse light map Specular irradiance map TU 2 * TU 5 + result fragment color [ Global specular ] Gloss map TU 3 * TU 4 * specular
Komprese textur - S3TC první použití: S3 v DirectX 6 (1998) DXTC, v OpenGL: S3TC, DXT1 pevný kompresní poměr výhodné pro plánování spotřeby paměti 4:1 až 6:1 ztrátová komprese 00 11 10 01 rozklad textury na bloky ( tiles ) velké 4 4 každý blok je reprezentován dvěma 16-bitovými barvami a 16 2-bitovými indexy (tj. celkem 4 bpp) dvě extrémní barvy (R5G6B5), mezi nimi další 2 mezibarvy (nebo 1 mezibarva a černá) každý originální pixel je nahrazen odkazem na jednu barvu
Komprese textur další metody NVIDIA VTC (Volume Texture Compression) 3D varianta S3TC bloky dat 4 4 1, 4 4 2 nebo 4 4 4 3DFX komprese FXT1 (1999) 8 4 texelů se uloží do 128 bitů paměti (tj. také 4bpp) 4 různé formáty bloků (rozhoduje o nich kodér) CC_HI: 2 R5G5B5, 32 3-bit kód (5 mezi a 1 průhledná) CC_CHROMA: 4 R5G5B5, 32 2-bit kód (původ. barvy) CC_MIXED: 4 R5G5B5, 32 2-bit kód (2 pro každý 4 4 čtverec, komplikované sub-formáty) CC_ALPHA: 3 R5G5B5A5, 32 2-bit kód (lerp/nlerp)
Pokročilé techniky přehled Nejdůležitější techniky užívané při texturování: mip-mapping a neizotropické filtrování gloss mapping (lesklá odrazivost, moduluje odlesk) light mapping ( dark mapping ) osvětlení shadow mapping předem spočítaný stín bump mapping (modulace normály) environment mapping (okolní světlo) víceprůchodové zpracování, multitexturing nemusí být potřeba programovatelná GPU
Filtrování textur textury pozorované z velké dálky se také musejí filtrovat (průměrovat při zmenšování) jinak by se projevil alias zrnění při pohybu kamery existuje několik technik, jak si zmenšené textury předem připravit: MIP-map ( multum in parvo ) je asi nejznámější ripmap (Hewlett-Packard) obsahuje i neizotropní zmenšeniny neizotropní filtrace dynamicky se počítá, v jakém poměru se má textura zmenšit, sčítá se jen pár texelů součtové tabulky předem sečtené UL obdélníky
MIP-mapping předem se textura zmenší na binární zlomky (1/4, 1/16, apod. umí spočítat GPU) při zmenšování se použije průměrování barev v sousedních pixelech pro 3-kanálovou barvu (např. RGB) existuje šikovné uspořádání MIP-mapy zmenšená čtvrtina textury se v paměti uloží místo chybějící čtvrté složky použití MIP-mapy určí se úroveň a z ní se přečte texel (rychlost) interpoluje se mezi dvěma úrovněmi MIP-mapy, případně ještě mezi čtyřmi sousedy v nich (kvalita)
MIP-mapa R 3 R 2 B 3 G 3 B 2 G 2 B 1 B 0 R 1 G 1 R 0 G 0
Neizotropické filtrování zpětně promítnutý pixel má na textuře tvar deformovaného čtverce z MIP-mapy se vybere taková úroveň, aby měla kratší strana toho čtyřúhelníka délku cca jednoho texelu podél delší strany čtyřúhelníka se průměruje zobrazovaný pixel přístup do MIP-mapy
Součtové tabulky X = A + B C - D B C A, B, C, D... levé horní součty D X A pro rychlé počítání součtu (a tedy i průměru) libovolného obdélníka předem se připraví součty všech obdélníků začínajících v levém horním rohu textury je potřeba větší přesnost (minimálně 24 bitů místo 8)
Efekt textury přímá modifikace barvy, modulace barvy skládání několika barev (detaily, vyšší variace, šum,..) různé operace (viz Multitexturing ), RGB i α efekt obtisku ( decal ) aplikace poloprůhledného obtisku na povrch tělesa viz výše: billboards, imposters hrbolatý povrch ( bump mapping ) modifikace normálového vektoru texturou modifikace materiálu efektu je dosaženo např. násobením dané složky světla skalární texturou ( Luminance formát)
Efekt textury II nanášení světla ( light mapping ) nebo stínu ( shadow mapping ) předem spočítané světlo nebo stín se aplikuje texturou násobení difusní složky světla texturou lesklý odraz okolí ( environment mapping EM) napodobení ideálního lesklého odrazu okolní scény GPU musí umět počítat odražený paprsek a adresovat texturu směrovým vektorem EM slouží k implementaci dalších efektů: lesklá složka osvětlení (specular reflection S ) bump-mapping pomocí EM (obě techniky se spojí)
Bump-mapping speciální texturovací technika vytváří dojem nerovného povrchu nahrazuje velmi komplikovanou mikro-geometrii modifikace (modulace) normálového vektoru pozorovatel získává většinu informace o struktuře povrchu těles ze stínování (odlesků) implementace předpokládá spolupráci rasterizačního hardware modulace normály texturou, multitexturing lepší je počítat složky osvětlení přímo v jednotlivých pixelech spolupráce s Phongovým stínováním
Situace zadání: diferenční funkce b(s,t) definující odchylku simulovaného povrchu od jeho jednodušší aproximace odchýlená normála N' N původní normála S T b(s,t)
Výpočet odchýlené normály simulovaný bod na povrchu hrbolatého tělesa P ' s, t = P s,t b s,t N N odchýlení normálového vektoru N ' = N b s s,t S b t s,t T N v podstatě je potřeba znát pouze parciální derivace funkce b(s,t) a ne její hodnotu...
Další texturovací techniky co může být ještě definičním oborem textury? 3D souřadnice [ x, y, z ] tzv. prostorová textura vnitřní struktura materiálu (dřevo, mramor,...) normálový vektor N veličina závislá na normále (statické difusní osvětlení) vektor odrazu R environment mapping předem spočítaná data (CPU i spolupráce s GPU) se do rasterizátoru předávají pomocí zvláštní textury odraz okolní scény na lesklém povrchu tělesa mapa osvětlení (dopředu spočítané světlo od více zdrojů, od plošných zdrojů, složitějším světelným modelem,...)
Environment-mapping (EM) vektor odrazu R se převádí do sférických souřadnic složitější příprava dat šesti čtvercových stěn krychle cubic mapping obloha plášť krychle ze šesti čtvercových textur okolí (čtyři světové strany) podlaha
Cubic mapping Greene, 1986 jednodušší než dosud používané sférické mapování textura je uložena v 6 čtvercových bitmapách POSITIVE_X, NEGATIVE_X, POSITIVE_Y, snadné pořízení dat možnost dynamické syntézy přímo na GPU snadné adresování bitmap, není potřeba normalizace vektoru, jenom dělení: 1. výběr složky s maximální absolutní hodnotou plocha 2. výpočet souřadnic ve čtverci (dělení zbývajících složek tou maximální)
Cubic mapping POSITIVE_Y [ s, 1.0, t ] s = x/y, t = z/y N [ 1.0, s, t ] s = y/x, t = z/x POSITIVE_X
Další typy směrového mapování sphere mapping (Miller, Hoffman: 1984) přímá implementace odrazu světla na perfektní kouli ( light probe ) data jsou v jediné textuře, ale nedají se použít z jiných směrů (zkreslení na okraji) paraboloid mapping (Heidrich, Seidel: 1998) dva snímky z přesně opačných směrů bez zkreslení na okrajích, dobré využití paměti rovnoměrnější vzorkování prostorového úhlu implementace: perspektivní projekce texturovacích souř.
Sphere mapping N R y 1 R = E 2 N E N m = R x 2 R y 2 R z 1 2 E [0,0,1] u = R x 2m 0.5 z 1 v v = R y 2m 0.5-1 Potřebuje projektivní texturovou transformaci
Paraboloid mapping R y R = E 2 N E N E [0,0,1] u = R x 2 1 R z 0.5 z v v = R y 2 1 R z 0.5 Potřebuje projektivní texturovou transformaci
Environment map bump-mapping sférické i kubické mapování umí dělat současné GPU v texturových souřadnicích environment-mapy lze dělat elegantně též bump-mapping místo změny normály se modifikuje [ s, t ] pro EM také tuto techniku umí dnešní rasterizační jednotky N R [s+ds,t+dt] [ds,dt]
Literatura Tomas Akenine-Möller, Eric Haines: Real-time rendering, 2 nd edition, A K Peters, 2002, ISBN: 1568811829 OpenGL ARB: OpenGL Programming Guide, 4 th edition, Addison Wesley, 2004, ISBN: 0321173481 J. Žára, B. Beneš, J. Sochor, P. Felkel: Moderní počítačová grafika, 2. vydání, Computer Press, 2005, ISBN: 8025104540