TakéUV layout, UV souřadnice, UV unwrapping, texture coordinatesPokročilý

Definice

UV mapování je způsob, jak přiřadit bodům na povrchu 3D modelu souřadnice v 2D textuře. Souřadnice U a V určují, která část obrázku se zobrazí na konkrétním polygonu, takže lze na objekt přesně nanést barvu, detaily materiálu, normálové mapy nebo jiné texturové informace.

Kategorie: Grafické programováníAktualizováno

Proč má 3D model souřadnice U a V

UV mapování převádí povrch prostorového modelu na plochu, se kterou umí pracovat bitmapová textura. Vrcholy mesh modelu mají běžné souřadnice X, Y a Z v prostoru. Vedle nich mohou mít také souřadnice U a V, které ukazují do obrázku. U obvykle běží vodorovně, V svisle. Hodnota 0 až 1 znamená rozsah celé textury, ale některé nástroje dovolují i hodnoty mimo tento rozsah kvůli opakování vzoru.

UV mapa není sama textura. UV mapa je plán, podle kterého renderer, herní engine nebo shader ví, odkud má vzít barvu, normálu, roughness, metalness nebo jiný texel. Stejný obrázek může na modelu vypadat ostře, roztaženě nebo zcela špatně podle toho, jak jsou UV souřadnice rozložené.

Rozbalení povrchu do roviny

UV unwrapping připomíná rozstřižení papírového modelu. Kulatý, ohnutý nebo složitě členěný povrch nelze převést do roviny bez kompromisu. Autor proto volí švy, tedy místa, kde se povrch „rozřízne“. Dobré švy bývají skryté na spodní straně objektu, ve vnitřní hraně oblečení nebo tam, kde je později zakryje materiál.

Kvalitní UV layout hlídá tři věci: míru deformace, využití prostoru textury a čitelnost pro malování. Polygon s příliš malou plochou v UV mapě dostane málo pixelů a bude rozmazaný. Polygon natažený do dlouhého pruhu zase deformuje vzor, například kostky, text nebo dřevo. U herních modelů se často skládá více částí do jednoho texture atlasu, aby engine nemusel často přepínat materiály.

Dva praktické příklady UV mapování

Příklad 1: Polep kartonové krabice

Modelář vytvoří jednoduchou krabici pro e-shopovou vizualizaci a připraví jednu texturu s logem, čárovým kódem a potiskem stran. UV rozbalení nastaví každou stěnu krabice na odpovídající obdélník v obrázku. Logo se potom objeví jen na přední straně, čárový kód na boku a hrany zůstanou čisté bez nechtěného zrcadlení.

Příklad 2: WebGL model s texturou

Webový vývojář načte glTF model do WebGL scény a shader vzorkuje obrázek podle UV souřadnic. Fragment shader typicky nedostává informaci „namaluj sem logo“, ale pouze interpolované UV hodnoty pro aktuální pixel. Výslednou barvu vrátí volání nad texturou:

in vec2 vUv;
uniform sampler2D baseColorMap;
out vec4 fragColor;

void main() {
  fragColor = texture(baseColorMap, vUv);
}

Chybný export UV souřadnic se projeví okamžitě: textura se posune, otočí, rozpadne na švy nebo se opakuje tam, kde měl být jeden detail.

Kde UV mapa začne bolet

Problémy s UV mapováním se často objeví až při výměně dat mezi nástroji. Blender, DCC aplikace, formát glTF a engine mohou odlišně řešit orientaci osy V, opakování textur, více UV sad nebo kompresi textur. Model může mít jednu UV sadu pro základní barvu a jinou pro lightmapu. Při exportu je proto důležité ověřit, že materiál odkazuje na správnou sadu.

UV mapování také ovlivňuje výkon a paměť nepřímo. Špatně rozložená textura nutí použít větší rozlišení, než by bylo nutné. Dobře zabalený atlas dokáže zmenšit počet textur, ale může ztížit úpravy a vyžaduje opatrnost u mipmap, aby barvy ze sousedních ostrovů neprosakovaly do hran.

Příklady z praxe

  1. Polep kartonové krabice

    Grafik připraví model kartonové krabice a jednu texturu s potiskem všech stran. UV rozbalení přiřadí přední stěně oblast s logem, boční stěně oblast s čárovým kódem a víku oblast s textem. Po renderu vypadá krabice jako potištěný produkt, ne jako objekt s náhodně nataženým obrázkem.

  2. WebGL model s texturou

    Vývojář načte glTF model do WebGL scény a fragment shader dostane interpolované UV souřadnice pro každý pixel. Shader podle nich přečte barvu z textury. Pokud export z 3D nástroje použije špatnou UV sadu, textura se na modelu posune nebo zobrazí na nesprávných částech.

    in vec2 vUv;
    uniform sampler2D baseColorMap;
    out vec4 fragColor;
    
    void main() {
      fragColor = texture(baseColorMap, vUv);
    }

Časté omyly

MýtusUV mapování souvisí s ultrafialovým světlem.
Ve skutečnostiUV mapování používá písmena U a V jako názvy os v rovině textury. Výraz v tomto kontextu nepopisuje ultrafialové záření ani fyzikální vlastnost materiálu.
MýtusAutomatický unwrap stačí pro každý model.
Ve skutečnostiAutomatické rozbalení může být dobrý start, ale často vytvoří švy na viditelných místech, promrhá prostor textury nebo zdeformuje důležité části. Produkční modely obvykle vyžadují ruční kontrolu UV ostrovů.
MýtusVětší textura vyřeší špatnou UV mapu.
Ve skutečnostiVyšší rozlišení může skrýt rozmazání, ale neodstraní natažení vzoru, špatné švy ani překryté ostrovy. Správné rozložení UV souřadnic bývá účinnější než prosté zvětšení obrázku.

Časté dotazy

Proč se v UV mapování používají písmena U a V?
Souřadnice U a V se používají proto, aby se nepletly s prostorovými osami X, Y a Z modelu. Písmena U a V označují dvě osy v rovině textury, nikoli ultrafialové záření. Renderer díky nim ví, který bod obrázku odpovídá danému bodu na trojúhelníku mesh modelu.
Musí mít každý 3D model UV mapu?
3D model nepotřebuje UV mapu vždy. Procedurální materiály mohou používat souřadnice objektu, světové souřadnice nebo jiné způsoby mapování. UV mapování je ale prakticky nutné, když má být na modelu přesně umístěná bitmapová textura, nápis, ručně malovaný detail, normal mapa nebo lightmapa.
Kdy se u UV mapování používá více UV sad?
Více UV sad má smysl, když různé textury potřebují jiné rozložení. Základní barva může používat UV mapu optimalizovanou pro malování detailů, zatímco lightmapa potřebuje ostrovy bez překryvu a s dostatečnými mezerami. Herní enginy a formáty jako glTF proto umí u materiálu odkazovat na konkrétní sadu texture coordinates.
Proč se textura po exportu do enginu zobrazí jinak?
Textura se po exportu může rozbít kvůli záměně UV sady, otočené ose V, chybějícím švům, překryvu ostrovů nebo odlišnému nastavení opakování textury. UV mapování je nutné kontrolovat v cílovém enginu, protože viewport v 3D aplikaci nemusí přesně odpovídat tomu, jak materiál zpracuje runtime renderer.

Zdroje

  1. UV mapping(otevře se v novém okně)Wikipedia
  2. Using textures in WebGL(otevře se v novém okně)MDN Web Docs
  3. glTF 2.0 Specification(otevře se v novém okně)Khronos Group
  4. UV Editor(otevře se v novém okně)Blender Foundation

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.