bejkyng texturTakéTexture baking, Bake textur, Zapékání textur, Baking mapPokročilý

Definice

Baking textur je proces, při kterém se výsledek náročného výpočtu (osvětlení, stínů, detailu vysokopolygonového modelu nebo procedurálního materiálu) předpočítá a uloží do rastrové textury namapované přes UV souřadnice modelu. Za běhu aplikace se pak místo opakovaného výpočtu jen čte hotová hodnota z obrázku, což výrazně šetří výkon.

Kategorie: 3D designAktualizováno

Nezaměňujte: V 3D grafice znamená baking předpočítání dat do textury, zatímco v jiných oborech se výraz „bake“ používá obecně pro zafixování odvozených dat (například bake animační křivky nebo bake modifikátoru do geometrie).

Než se na to spolehnete: Uvedené hodnoty texel density (512 až 1024 px/m) jsou běžná oborová konvence, ne norma: liší se projekt od projektu. Odkaz na docs.blender.org je mimo povolený seznam domén (povolen je blender.org), server ho může zahodit.

Proč se detail přesouvá do obrázku

Baking textur řeší základní ekonomický problém realtimové grafiky: některé výpočty jsou příliš drahé na to, aby se dělaly šedesátkrát za sekundu, ale jejich výsledek se v čase nemění. Osvětlení statické místnosti, zaoblení hran na sochařsky vymodelovaném brnění nebo míchání deseti vrstev procedurálního materiálu, to všechno lze spočítat jednou předem a výsledek uložit jako texturu. Runtime pak dělá jen vzorkování obrázku, což je pro GPU řádově levnější operace.

Co se při zapékání děje

Zapékání potřebuje tři věci: cílový model s čistým UV mapováním bez překryvů, zdroj dat a rozlišení výstupu. Pro každý texel výstupní mapy se najde odpovídající bod na povrchu modelu, z tohoto bodu se vystřelí paprsek (u přenosu z high-poly na low-poly) nebo se vyhodnotí shader či světelná situace, a získaná hodnota se zapíše do pixelu. Výsledkem je obrázek, který dává smysl jen pro tu konkrétní UV rozvinutou polygonální síť: změna topologie nebo UV znamená nutnost bake opakovat.

Typické zapékané mapy

  • Normal map: přenáší mikrodetail z modelu o milionech polygonů na model o tisících.
  • Ambient occlusion: měkké zastínění v koutech a spárách.
  • Lightmap: nepřímé osvětlení statické scény, klasika herních enginů.
  • Curvature, position, thickness: pomocné mapy pro procedurální texturování a efekty jako podpovrchový rozptyl.
  • Diffuse / albedo: sloučení vrstveného procedurálního materiálu do jediného obrázku.

Kde bake typicky selhává

Nejčastější artefakty vznikají z geometrie, ne z nastavení. Překrývající se UV ostrovy způsobí, že se jedno místo textury zapisuje z dvou různých částí modelu. Příliš krátká vzdálenost paprsku (cage, ray distance) vede k dírám, příliš dlouhá zachytí sousední díl. Nedostatečný padding kolem UV ostrovů se projeví tmavými švy, jakmile se zapne mipmapping a filtr začne míchat sousední texely.

Cena, kterou baking platí

Zapečená data jsou statická. Lightmapa nepřežije pohyb světla ani otevření dveří, normal map nezmění siluetu modelu při pohledu z boku a zapečený procedurální materiál ztratí možnost neomezeného zoomu. Navíc rostou paměťové nároky a doba buildu: rozsáhlá scéna může mít gigabajty lightmap a její přepočet trvá desítky minut. Proto se v praxi kombinuje: statická geometrie se zapéká, dynamické objekty dostávají realtimové osvětlení, a část studií dnes přechází na hybridní řešení s ray tracingem.

Baking mimo klasickou grafiku

Stejný princip se objevuje i ve webu a vizualizacích. Model exportovaný do glTF pro prohlížeč obvykle nese zapečený AO a lightmapu, protože prohlížeč nemá rozpočet na plnohodnotné GI. Podobně konfigurátory produktů zapékají varianty materiálů dopředu, aby se při přepnutí barvy jen vyměnil obrázek.

Příklady z praxe

  1. Normal map z high-poly sochy na herní model

    Umělec vysochá přilbu ve dvou milionech polygonů, retopologií vytvoří herní verzi o šesti tisících trojúhelníků a rozbalí jí UV. Bake normálové mapy vystřelí z low-poly povrchu paprsky do high-poly a zaznamená rozdíl sklonu povrchu. Ve hře pak plochý model vypadá, jako by měl vyryté rýhy a nýty, přestože jeho silueta zůstává hladká.

  2. Zapečení lightmapy pro scénu ve webovém prohlížeči

    Interiér showroomu se v Blenderu nasvítí a nechá spočítat Cycles do lightmapy v druhé UV sadě. Do glTF se exportuje geometrie plus zapečená textura, takže three.js scéna běží plynule i na mobilu bez výpočtu globálního osvětlení. Materiál se pak jen vynásobí lightmapou při zobrazení.

    const material = new THREE.MeshBasicMaterial({
      map: colorTexture,
      lightMap: bakedLightmap, // druhá UV sada: uv2
      lightMapIntensity: 1.0
    });
    geometry.setAttribute('uv2', geometry.getAttribute('uv1'));

Časté omyly

MýtusZapečená normálová mapa nahradí skutečné polygony, takže model může být klidně krychle.
Ve skutečnostiNormal map ovlivňuje jen výpočet osvětlení na povrchu, nikoli tvar. Silueta modelu, jeho obrys proti obloze a stíny, které vrhá, zůstávají dané skutečnou geometrií, takže při pohledu z ostrého úhlu detail zmizí.
MýtusVyšší rozlišení bake vždycky znamená lepší výsledek.
Ve skutečnostiKvalitu bake limituje hlavně kvalita UV rozvinutí a hustota texelů na jednotku plochy. Zdvojnásobení rozlišení u překrývajících se nebo nerovnoměrně škálovaných UV ostrovů jen zvětší soubor a artefakty zachová.
MýtusBake je jednorázová věc, kterou udělám na konci pipeline.
Ve skutečnostiBaking je závislý na topologii i UV, takže jakákoli pozdější úprava modelu nebo rozbalení vynutí přepočet. V praxi se proto zapékání skriptuje nebo automatizuje jako součást buildu, ne jako ruční finální krok.

Časté dotazy

Jaké rozlišení textury zvolit při bakingu?
Rozlišení se u bakingu neodvozuje od pocitu, ale od hustoty texelů: kolik pixelů textury připadá na jednotku plochy modelu ve scéně. Běžná herní konvence je 512 až 1024 pixelů na metr u objektů, ke kterým se hráč přiblíží, méně u vzdálených kulis. Praktický postup je zvolit cílovou hustotu pro celý projekt, podle ní naškálovat UV ostrovy a teprve pak dopočítat rozlišení mapy. Tím se zajistí, že detail vypadá konzistentně napříč scénou a nikde se neplýtvá pamětí.
Proč se po zapečení objevují na modelu tmavé švy?
Tmavé švy po zapečení mají obvykle tři příčiny. První je nedostatečný padding, tedy okraj zapsaných pixelů kolem UV ostrovů: filtrování a mipmapy zamíchají do okraje prázdné pozadí. Druhou je příliš malá vzdálenost mezi ostrovy, kdy se okraje sousedních ostrovů prolnou. Třetí bývá nesouhlas normál na hraně švu mezi vysoko a nízkopolygonovým modelem. Řešením je zvětšit padding, dát ostrovům rozestup odpovídající rozlišení a používat cage nebo správně nastavené hraniční normály.
Kdy se baking nevyplatí?
Baking se nevyplatí u obsahu, který se má měnit za běhu. Denní cyklus, zničitelné prostředí, procedurálně generované levely nebo uživatelsky konfigurovatelná geometrie zapečená data okamžitě znehodnotí. Nevyplatí se ani u velmi rozlehlých ploch, kde by potřebné rozlišení textury přerostlo paměťový rozpočet, a u objektů, které se ve scéně opakují stokrát: ty většinou sdílejí jedinou tileable texturu, takže unikátní bake by zbytečně násobil data. V těchto případech dávají smysl realtimové techniky nebo hybrid s ray tracingem.
Potřebuje baking druhou UV sadu?
Druhá UV sada je při bakingu potřeba tehdy, když musí být mapování zcela bez překryvů. Barevné textury často využívají sdílení ostrovů nebo dlaždicování kvůli úspoře místa, jenže lightmapa a ambient occlusion potřebují každému bodu povrchu unikátní místo v textuře. Proto herní enginy generují samostatné lightmap UV do druhého kanálu. U normálových map obvykle stačí primární sada, pokud v ní nejsou zrcadlené či přeložené ostrovy.

Zdroje

  1. Blender Manual: Render Baking(otevře se v novém okně)Blender Foundation
  2. glTF 2.0 Specification(otevře se v novém okně)Khronos Group
  3. Normal mapping(otevře se v novém okně)Wikipedia
  4. Lightmap(otevře se v novém okně)Wikipedia
  5. Ambient occlusion(otevře se v novém okně)Wikipedia

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.