Takétexture map, texelová mapa, bitmapová texturaPokročilý
Definice
Textura je datový obraz nebo procedurální vzor, který se v počítačové grafice používá k určení vzhledu povrchu objektu. Může nést barvu, průhlednost, drsnost, normály nebo jiné hodnoty, které shader čte při vykreslování. Textury umožňují bohatý detail bez modelování každé nerovnosti geometrií a výrazně ovlivňují paměť i výkon.
Nezaměňujte: Textura se v tomto hesle chápe jako pojem počítačové grafiky, ne jako hmatová vlastnost materiálu nebo obecný vizuální vzor v designu.
Co textura přidává k povrchu
Textura v grafickém enginu doplňuje geometrii o informace, které by bylo drahé nebo nemožné nést přímo ve vrcholech modelu. Nejčastěji jde o dvourozměrný obrázek, ale textura může být také objemová, krychlová, procedurálně generovaná nebo použitá jako výstupní paměť pro další výpočet. Jeden model tak může mít jednoduchou síť polygonů a přesto působit jako kámen, kůže, kov, dřevo nebo displej.
Textura nemusí obsahovat jen barvu. V moderním PBR workflow se používají samostatné mapy pro albedo, normal, roughness, metallic, ambient occlusion nebo opacity. Shader z těchto dat skládá výsledný vzhled podle světla, kamery a materiálových pravidel.
Od UV souřadnic k texelům
UV souřadnice říkají, které místo textury patří ke kterému místu na povrchu modelu. Hodnoty se obvykle zapisují v rozsahu 0 až 1, kde dvojice souřadnic ukazuje polohu v texturovém prostoru. Grafická karta při rasterizaci dopočítá UV pro každý fragment a sampler z textury vybere odpovídající texel nebo interpolovanou hodnotu.
Vzorkování rozhoduje o tom, jak textura vypadá při zvětšení, zmenšení nebo šikmém pohledu. Nearest filtering dává tvrdé pixely, linear filtering obraz vyhlazuje. Mipmapy ukládají menší verze stejné textury, aby vzdálené plochy neblikaly a aby se zbytečně nečetla příliš podrobná data.
Paměťová cena detailu
Velká textura zvyšuje ostrost jen tehdy, když má model dost místa na obrazovce a UV rozložení využívá její rozlišení smysluplně. Textury zároveň zabírají paměť GPU, zatěžují propustnost a mohou prodlužovat načítání scény. Herní engine proto často používá kompresi, streamování, texturové atlasy nebo různé úrovně detailu.
Problémem nebývá pouze velikost souboru na disku. Rozbalená textura v paměti grafické karty může být výrazně větší než PNG nebo JPEG soubor. Formáty určené pro GPU kompresi řeší hlavně rychlé čtení při vykreslování, ne jen archivní úsporu místa.
Příklady z praxe
- Rezavý kontejner ve hře. Model kontejneru má jen jednoduché hrany a několik prolisů, ale albedo textura přidá špínu, rez a staré nálepky. Normal mapa vytvoří dojem drobných nerovností bez přidání polygonů. Výsledek působí detailněji, zatímco počet trojúhelníků zůstane nízký.
- WebGL náhled produktu. E-shop načte texturu potisku trička a shader ji použije při kreslení každého fragmentu. Změna obrázku okamžitě ukáže jiný design bez nového modelu.
uniform sampler2D albedoMap; in vec2 vUv; out vec4 fragColor; void main() { vec4 albedo = texture(albedoMap, vUv); fragColor = albedo; }
Kde textura není totéž co materiál
Materiál popisuje pravidla, podle kterých se povrch chová při osvětlení. Textura je jedna z datových vstupů materiálu. Stejná textura dřeva může být použita v matném materiálu, lakovaném materiálu nebo jako maska, která jen určuje, kde má být povrch tmavší. Záměna těchto pojmů vede k nejasné komunikaci mezi grafikem, technickým artistou a vývojářem.
Příklady z praxe
Rezavý kontejner ve hře
Model kontejneru má jen jednoduché hrany a několik prolisů, ale albedo textura přidá špínu, rez a staré nálepky. Normal mapa vytvoří dojem drobných nerovností bez přidání polygonů. Výsledek působí detailněji, zatímco počet trojúhelníků zůstane nízký.
WebGL náhled produktu
E-shop načte texturu potisku trička a shader ji použije při kreslení každého fragmentu. Změna obrázku okamžitě ukáže jiný design bez nového modelu.
uniform sampler2D albedoMap; in vec2 vUv; out vec4 fragColor; void main() { vec4 albedo = texture(albedoMap, vUv); fragColor = albedo; }
Časté omyly
- MýtusTextura je vždycky jen obrázek nalepený na model.
- Ve skutečnostiTextura bývá obrázek, ale grafická API ji používají obecněji. Textura může nést normály, masky, hloubku, výsledek renderování nebo hodnoty pro výpočet ve shaderu.
- MýtusČím větší textura, tím lepší grafika.
- Ve skutečnostiVětší textura pomůže jen tehdy, když ji kamera a UV rozložení dokážou využít. Nadměrné rozlišení často jen plýtvá pamětí GPU a prodlužuje načítání.
- MýtusMateriál a textura jsou totéž.
- Ve skutečnostiMateriál určuje chování povrchu při osvětlení, zatímco textura dodává konkrétní data pro tento výpočet. Jeden materiál může používat více textur a jedna textura může sloužit různým materiálům.
Časté dotazy
- Proč textura na modelu vypadá rozmazaně?
- Rozmazaná textura obvykle vzniká kombinací nízkého rozlišení, nevhodného UV rozložení, příliš agresivní komprese nebo filtrování při zvětšení. Textura může mít dost pixelů v souboru, ale malý ostrov v UV mapě dostane jen malou část obrazu. Při kontrole je užitečné porovnat velikost textury, texel density na modelu a vzdálenost kamery, pro kterou je asset určen.
- Co znamená bezešvá textura?
- Bezešvá textura je textura připravená tak, aby na sebe při opakování navazovaly její levý a pravý okraj a obvykle také horní a dolní okraj. Bezešvá textura se hodí pro cihly, dlažbu, trávu nebo látku, protože umožní pokrýt velkou plochu jedním menším obrázkem. Viditelné opakování vzoru se ale může stát problémem, pokud jsou v obraze nápadné skvrny nebo unikátní detaily.
- Může textura obsahovat i jiná data než obrázek?
- Textura může být použita i mimo klasický 3D model, například jako render target, maska v postprocess efektu, lookup table pro barevnou korekci nebo datová mřížka pro výpočet na GPU. Grafické API často zachází s texturou jako s obecnou pamětí se speciálním způsobem adresování a filtrování. Obrazový obsah je jen nejběžnější případ použití.
- Jak se textura pro 3D asset běžně vytváří?
- Textura se obvykle kreslí v grafickém editoru, peče z detailního modelu, snímá z fotogrammetrie nebo generuje procedurálně. V produkci se často kombinuje více přístupů: základ vznikne z fotografií, normal mapa se upeče z high-poly modelu a masky se doladí ručně. Důležité je, aby výsledná textura odpovídala cílovému enginu, barevnému prostoru a materiálovému workflow.
Zdroje
- Using textures in WebGL(otevře se v novém okně)
- glTexImage2D - OpenGL 4 Reference Pages(otevře se v novém okně)
- glTF 2.0 Specification(otevře se v novém okně)
- WebGPU(otevře se v novém okně)