Optimalizace 3D modelů pro hry a web: výkon

Optimalizace 3D modelů pro hry a web: Výkon

Proč optimalizovat 3D modely pro hry a web

Optimalizace 3D modelů je klíčovým předpokladem pro dosažení stabilní snímkové frekvence, nízké latence a rychlého načítání v prostředí herních enginů i webových prohlížečů. Ovlivňuje využití CPU/GPU, velikost přenášených dat, počet vykreslovacích volání, paměťovou náročnost i kvalitu vizuální věrnosti. Cílem je vyvážit vizuální detail s rozpočty na polygony, textury, materiály, animace a síťový přenos – a to s ohledem na cílové platformy (mobil, konzole, PC, web).

Výkonnostní a paměťové rozpočty

  • Rozpočet polygonů: stanovte cílový počet trojúhelníků na scénu i na objekt (např. mobil 1–3 M tris na scénu, PC 5–15 M podle žánru). Zohledněte také počet vrcholů po dělení podle UV švů a ostrých hran.
  • Paměť textur: sledujte VRAM/RAM včetně mipmap; preferujte komprimované formáty a rozumné rozlišení podle hustoty texelů.
  • Vykreslovací volání: slučujte materiály a využívejte instancing; každý unikátní materiál a síť může zvýšit počet vykreslovacích volání.
  • Šířka pásma: pro web optimalizujte velikost GLB/GLTF, používejte kompresi a ukládání do mezipaměti HTTP.

Topologie, trojúhelníky a hustota sítě

  • Čistá topologie: vyhýbejte se n-úhelníkům a zbytečným trojúhelníkům; u organických tvarů udržujte plynulý tok hran, u hard-surface modelů dbejte na konzistentní zkosení hran.
  • Tok hran: veďte topologii podle křivosti a animovaných partií (kolena, lokty); zabráníte artefaktům skinningu a nežádoucí kompresi normal map.
  • Decimace: používejte adaptivní redukci sítě s metrikou chyby a ochranou hran (zachováním charakteristických prvků).

Level of Detail (LOD), HLOD a impostory

  • Řady LOD: připravte 3–5 úrovní; LOD0 pro pohled zblízka, LOD1–3 pro střední a vzdálenou vzdálenost. Každá úroveň LOD sníží počet trojúhelníků o 40–70 % oproti předchozí.
  • Křížové prolínání: použijte plynulý přechod nebo dithering, aby přepínání nebylo viditelné.
  • Impostory/billboardy: pro velmi vzdálené objekty a vegetaci použijte obrazové impostory nebo 2D billboardy s normal mapou.
  • HLOD: hierarchické sloučení vzdálených skupin objektů do jednoho zjednodušeného modelu – výrazně snižuje počet vykreslovacích volání.

UV mapování, švy a hustota texelů

  • UV švy a ostré hrany: ostrá hrana obvykle vyžaduje UV šev; minimalizujte jejich počet a zajistěte dostatečné odsazení (typicky ≥ 4–16 px v mipmapě 1×).
  • Hustota texelů: sjednoťte hustotu (např. 512–1024 px/m) pro konzistentní ostrost. Měřte a škálujte UV tak, aby měly klíčové plochy prioritu.
  • Překryvy: jsou povoleny u dlaždicových textur a symetrických částí, ale v UV2 určeném pro lightmapy se nesmějí překrývat.
  • Atlasování: slučujte drobné prvky do atlasů, abyste snížili počet vykreslovacích volání; dávejte pozor na prosvítání a artefakty mipmap.

PBR materiály: minimalizace variant a správná kalibrace

  • Fyzikálně korektní pracovní postup: baseColor, metallic, roughness, normal, occlusion, emissive. Zachovávejte lineární barevný prostor a správné operace gama korekce.
  • Sloučení textur: pro web používejte masky v kanálech (např. ORM: occlusion–roughness–metallic v RGB), abyste snížili počet souborů.
  • Varianty shaderů: omezte počet materiálů a příznaků funkcí shaderu (příliš mnoho variant zvyšuje počet kompilací i vykreslovacích volání).

Textury: formáty, komprese a mipmapy

  • Komprese na GPU: BC/ASTC/ETC podle platformy; pro web preferujte KTX2 s Basis Universal (převádí se do nativních formátů GPU).
  • Mipmapování: vždy zapněte mipmapy, abyste snížili aliasing a zátěž; pro šikmé plochy nastavte anizotropní filtrování.
  • Rozlišení: vycházejte z hustoty texelů a vzdálenosti kamery; často postačí textury 1–2K místo 4K, pokud je objekt v záběru malý.
  • Draco/meshopt: pro geometrii v glTF použijte KHR_draco_mesh_compression nebo EXT_meshopt_compression; pro textury KTX2/Basis.

Normal mapy, skupiny vyhlazování a správná orientace

  • Vyhlazování: na ostrých přechodech použijte ostré hrany, jinde plynulé vyhlazování; zachovávejte soulad se zvoleným profilem bakeování.
  • Normal mapy OpenGL vs. DirectX: zelený kanál může být invertovaný; pro web (WebGL/Three.js) se obvykle používá konvence OpenGL. Ověřte nastavení při exportu.
  • Tangentový prostor: zajistěte konzistentní generování tangentů/bitangentů v nástroji i enginu; nesoulad způsobuje švy a zvlnění.

Bakeování detailů: AO, zakřivení, tloušťka a detailní normal mapa

  • Bakeování z highpoly na lowpoly: přeneste detaily z highpoly modelu do normal/curvature map; zachováte tak věrnost při nízkém počtu polygonů.
  • Ambient occlusion: používejte ji jemně a jako násobicí složku (nepřehánějte to); pro web preferujte AO v masce ORM.
  • Detailní normal mapy: kombinujte střední frekvence (bakeované) s detailní normal mapou (dlaždicovou) pro záběry zblízka.

Skeletální animace a morph targets

  • Limity skinningu: držte se limitu ≤ 4 kosti na vrchol; omezte celkový počet kostí kvůli limitům uniform bufferů (web/mobilní zařízení).
  • Morph targets (blendshapes): výrazně zvětšují soubory; používejte je selektivně a s kvantizací/kompresí.
  • Techniky komprese animací: redukce klíčů, kvantizace rotací (např. quaternion 10–14 bitů), aproximace spline křivkami; pro dekompresi za běhu volte knihovny s nízkou režií.

Fyzika, kolizní proxy a navigace

  • Kolizní sítě: nahrazujte vizuální síť jednoduššími tvary (box, kapsle, konvexní hull). Nezatěžujte fyziku trojúhelníkovou sítí.
  • NavMesh: generujte samostatně a uchovávejte mimo vizuální GLTF; minimalizujte velikost a přesnost podle potřeb AI.

Slučování, instancing a vykreslovací volání

  • Batching: slučte statické díly se stejným materiálem; dávejte pozor na ořezávání podle pohledového frustumu – příliš velké batche mohou zbytečně vykreslovat objekty.
  • Instancing: pro opakující se objekty (stromy, šrouby) použijte hardwarový instancing; atributy variant (barva, transformace) ukládejte jako instancovaný buffer.
  • Materiálová disciplína: snižujte počet materiálů; slučujte drobné textury do atlasu.

Formáty a export: glTF/GLB jako standard

  • glTF 2.0/GLB: upřednostňovaný formát pro web i enginy díky standardu PBR, binárnímu balení a rozšířením (KHR_*).
  • Rozšíření glTF: KHR_materials_unlit, transmission, sheen, clearcoat, ior, specular, KHR_lights_punctual, KHR_texture_basisu, KHR_mesh_quantization, KHR_draco_mesh_compression, EXT_meshopt_compression.
  • FBX/OBJ → glTF: při převodu kontrolujte jednotky, osu nahoru (Y/Z), orientaci souřadného systému a pivoty; zmrazte transformace a aplikujte měřítko 1,0.

Jednotky, osy, pivoty a transformace

  • Metrické jednotky: používejte metry (1,0 = 1 m) pro konzistentní fyziku a osvětlení.
  • Osy a orientace souřadného systému: webové scény obvykle používají osu Y nahoru a pravotočivý souřadný systém; sjednoťte nastavení v DCC nástroji.
  • Pivot a zmrazení transformací: umístěte pivot na smysluplné místo (závěs dveří, střed otáčení kola) a před exportem zmrazte transformace.

Specifika webu: WebGL/WebGPU, Three.js/Babylon.js

  • Načítání: používejte GLTFLoader/AssetContainer, BasisTextureLoader a paralelní načítání pomocí HTTP/2.
  • Kompresní pipeline: exportujte GLB, používejte Draco/meshopt pro geometrii, KTX2/Basis pro textury a gzip/brotli na transportní vrstvě.
  • Cache-Control: nastavte dlouhé max-age pro verzované assety; používejte hashování obsahu v názvech souborů.
  • Streamování/postupné načítání: nejprve načtěte LOD nebo proxy model, poté detail; zobrazte kostru uživatelského rozhraní (obrazovku načítání).

Osvětlení, lightmapy a stínování

  • UV2 pro lightmapy: bez překryvů a s dostatečným odsazením; pro web upřednostňujte menší atlas s vhodně zvoleným rozlišením a kompresí.
  • Stíny: vyvažujte kvalitu a výkon (PCF, filtr, rozlišení shadow mapy); statické stíny bakeujte, dynamické ponechte jen tam, kde jsou nutné.
  • Mapy prostředí: předfiltrované (specular/irradiance), komprimované v KTX2; správné IBL výrazně zvyšuje kvalitu při minimální zátěži.

Kvalita obrazu: správa barev a tónové mapování

  • Lineární pracovní postup: pracujte v lineárním prostoru a gamma korekci aplikujte až při výstupu; u textur správně nastavte příznak sRGB.
  • Tónové mapování: zvolte Reinhard/ACES podle cíle; zachovávejte konzistenci mezi DCC nástrojem a enginem.

Automatizace a nástroje pro optimalizaci

  • Automatická decimace a LOD: používejte nástroje s metrikou chyby a ochranou hran; po redukci ověřte normály a UV.
  • Kompresní nástroje CLI: glTF-Transform, doplňky pro Blender, meshoptimizer CLI, pipeline toKtx2/BasisU.
  • Kontrola kvality: testujte překryvy UV, hustotu texelů, degenerované trojúhelníky, ne-manifoldní hrany a chybějící tangenty.

Časté chyby a jak se jim vyhnout

  • Nepřiměřené rozlišení textur u malých objektů → udržujte jednotnou hustotu texelů.
  • Chybné UV pro lightmapy (překryvy, malé odsazení) → znovu rozbalte UV mapu a ověřte ji testovacím bakeováním.
  • Kombinování různých konvencí normal map (GL vs. DX) → sjednoťte je a invertujte kanál G podle cílové pipeline.
  • Příliš mnoho materiálů → atlasování a sdílené materiály, sloučení masek ORM.
  • Chybějící LOD a impostory → nasaďte automatizovaný řetězec LOD.
  • Příliš složité kolize → nahraďte je jednoduchými konvexními tvary.

Doporučený postup

  1. Modelování s čistou topologií a rozumným počtem polygonů, v metrických jednotkách.
  2. Rozbalení UV mapy s jednotnou hustotou texelů; UV2 pro lightmapy bez překryvů.
  3. Bakeování normal/AO/curvature z highpoly modelu; sloučení kanálů ORM.
  4. Vytvoření řady LOD a impostorů; ověření přepínání.
  5. Export do GLB s texturami KTX2 a kompresí Draco/meshopt.
  6. Testování v cílovém enginu (WebGL/WebGPU nebo hra), kontrola vykreslovacích volání, VRAM, FPS a artefaktů.
  7. Automatizace v CI: validace glTF, optimalizační kroky a generování náhledů.

Závěr: udržitelná rovnováha mezi kvalitou a výkonem

Optimalizace 3D modelů je proces hledání rovnováhy mezi vizuální věrností a provozními rozpočty. Důslednost při práci s topologií, UV a materiály, promyšlené LOD a komprese geometrie i textur zásadně snižují zátěž vykreslování a síťového přenosu. Standard glTF/GLB s rozšířeními a moderní pipeline (KTX2, Draco, meshopt) umožňuje nabídnout atraktivní 3D zážitky, které se rychle načítají a fungují na různých platformách, v hrách i ve webovém prostředí.