Proč optimalizovat 3D modely pro hry a web
Optimalizace 3D modelů je klíčovým předpokladem pro dosažení stabilního snímkového kmitočtu, 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 draw callů, paměťovou stopu 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 tvrdých hran.
- Paměť textur: sledujte využití VRAM/RAM včetně mipmap; preferujte komprimované formáty a rozumné rozlišení odpovídající texel density.
- Draw calls: slučujte materiály a využijte instancing; každý unikátní materiál a mesh může přidat další vykreslovací volání.
- Šířka pásma: pro web optimalizujte velikost GLB/GLTF souborů, používejte kompresi a HTTP caching.
Topologie, trojúhelníky a hustota sítě
- Čistá topologie: vyhýbejte se n-gonům a zbytečným trojúhelníkům; u organických tvarů udržujte plynulé směrnice hran, u hard-surface objektů dbejte na konzistentní zaoblení hran (chamfer).
- Edge flow: směrujte topologii podle křivosti a animovaných partií (kolena, lokty); tím předejdete artefaktům skinningu a nežádoucí kompresi normal map.
- Decimace: používejte adaptivní redukci sítě s metrikou chyby a ochranou hran (feature preservation).
Level of Detail (LOD), HLOD a impostory
- LOD řady: připravte 3–5 úrovní; LOD0 pro blízký pohled, LOD1–3 pro vzdálenější záběry. Každý LOD redukuje počet trojúhelníků o 40–70 % oproti předchozímu.
- Křížové prolínání: použijte cross-fade nebo dithering pro plynulé a neviditelné přepínání mezi LODy.
- Impostory/billboardy: u velmi vzdálených objektů a vegetace využijte obrazové impostory nebo 2D billboardy s normal mapou.
- HLOD: hierarchická agregace vzdálených skupin objektů do jednoho zjednodušeného meše, což výrazně snižuje počet draw callů.
UV mapování, švy a texel density
- UV švy a tvrdé hrany: tvrdá hrana obvykle vyžaduje UV šev; minimalizujte jejich počet a zajistěte dostatečný padding (typicky ≥ 4–16 px v 1× mipmapě).
- Texel density: sjednoťte hustotu (např. 512–1024 px/m) pro konzistentní ostrost. Měřte a škálujte UV tak, aby klíčové plochy měly přednost.
- Překryvy: povoleny jsou pro tile textury a symetrické části, ale nesmí se překrývat v UV2, které je určeno pro lightmapy.
- Atlasování: slučujte drobné prvky do atlasů za účelem snížení draw callů, avšak dejte pozor na bleeding a artefakty mipmap.
PBR materiály: minimalizace variant a správná kalibrace
- Fyzikálně korektní workflow: baseColor, metallic, roughness, normal, occlusion, emissive. Udržujte lineární barevný prostor a správné gama korekce.
- Sloučení textur: pro web používejte masky v kanálech (např. ORM: occlusion–roughness–metallic v RGB) ke snížení počtu souborů.
- Varianty shaderů: omezte počet materiálů a shader feature flagů, protože jejich nárůst zvyšuje počet kompilací a draw callů.
Textury: formáty, komprese a mipmapy
- Komprese GPU: BC/ASTC/ETC dle platformy; pro web preferujte KTX2 s Basis Universal, který se transkoduje do nativních GPU formátů.
- Mipmapping: vždy aktivujte mipmapy pro snížení aliasingu a zatížení; nastavte anisotropní filtrování pro šikmé plochy.
- Rozlišení: vycházejte z texel density a vzdálenosti kamery; často stačí 1–2K textury místo 4K, pokud je objekt v záběru malý.
- Draco/meshopt: pro geometrii v glTF používejte KHR_draco_mesh_compression nebo EXT_meshopt_compression; pro textury pak KTX2/Basis.
Normal mapy, smoothing groups a správná orientace
- Smoothing: tvrdé hrany na ostrých přechodech, jinde plynulé; kompozice musí odpovídat zvolenému bake profilu.
- OpenGL vs. DirectX normal mapy: zelený kanál může být invertovaný; pro web (WebGL/Three.js) se zpravidla používá OpenGL konvence. Zkontrolujte při exportu.
- Tangent space: zajistěte konzistentní generování tangents a bitangents mezi použitém nástrojem a enginem; nesoulad způsobí viditelné švy a vlnění.
Baking detailů: AO, curvature, thickness a detailní normal
- High-to-low bake: přeneste detaily z highpoly modelu do normal a curvature map; zajistí věrnost i při nízkém polycountu.
- Ambient Occlusion: používejte jemně a násobně (multiplikativně), vyvarujte se přepálení; pro web preferujte AO v ORM masce.
- Detailní normal mapy: kombinujte střední frekvenci (baked) s detail normal (tile) pro blízké záběry.
Skeletální animace a morph targets
- Skinning limity: držte maximálně 4 kosti na jeden vrchol; omezte celkový počet kostí kvůli limitům uniform bufferů (zejména web a mobil).
- Morph targets (blendshapes): výrazně zvyšují velikost dat; používejte je selektivně a s kvantizací či kompresí.
- Kompresní techniky animací: redukce klíčových snímků, kvantizace rotací (např. quaternion 10–14 bitů), spline aproximace; při runtime dekompresi volte knihovny s nízkou režijní záteží.
Fyzika, kolizní proxy a navigace
- Kolizní meše: nahrazujte vizuální mesh jednoduššími tvary (box, kapsle, konvexní obal). Vyhněte se zbytečně složité fyzice s trojúhelníkovou sítí.
- NavMesh: generujte samostatně a udržujte mimo vizuální GLTF; optimalizujte velikost a přesnost podle potřeb AI.
Slučování, instancing a draw calls
- Batching: slučujte statické části se stejným materiálem; ale pozor na frustum culling – příliš velké batche mohou zbytečně vykreslovat neviditelné objekty.
- Instancing: pro opakující se objekty (stromy, šrouby) používejte hardwarový instancing; atributy pro varianty (barva, transformace) ukládejte jako instanced buffery.
- Materiálová disciplína: minimalizujte počet materiálů; slučujte drobné textury do atlasů.
Formáty a export: glTF/GLB jako standard
- glTF 2.0/GLB: preferovaný formát pro web i enginy díky podpoře 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 konverzi kontrolujte jednotky, osu nahoru (Y/Z), handedness a pivoty; zamrzněte transformace a aplikujte škálování 1.0.
Jednotky, osy, pivoty a transformace
- Metrické jednotky: standardizujte na metry (1.0 = 1 m) pro konzistentní fyziku a osvětlení.
- Osy a handedness: webové scény obvykle používají Y-up, pravotočivý systém; sjednoťte nastavení v DCC nástroji.
- Pivot a freeze: nastavte pivot do smysluplného místa (pant dveří, střed otáčení kola) a freeze transforms před exportem.
Web specifika: WebGL/WebGPU, Three.js/Babylon.js
- Načítání: používejte GLTFLoader/AssetContainer, BasisTextureLoader a paralelní načítání přes HTTP/2.
- Kompresní pipeline: exportujte GLB, používejte Draco/meshopt pro geometrii, KTX2/Basis pro textury, gzip/brotli na transportní vrstvě.
- Cache-Control: nastavte dlouhé max-age pro verzované assety; používejte content hashing v názvech souborů.
- Streaming/progressive loading: začněte s LOD nebo proxy modelem, pak načítejte detaily; zobrazte skeleton UI (skeleton screen) pro lepší uživatelský dojem.
Osvětlení, lightmapy a stínování
- Lightmap UV2: bez překryvů a s paddingem; na webu preferujte menší atlas s opatrnou volbou rozlišení a komprese.
- Stíny: vyvažte kvalitu a výkon (PCF, filtr, rozlišení shadow mapy); statické stíny bakeujte, dynamické ponechejte tam, kde jsou opravdu potřeba.
- Environment mapy: předfiltrujte (specular/irradiance), komprimujte do KTX2; správné IBL výrazně zvyšuje vizuální kvalitu při minimální zátěži.
Kvalita obrazu: color management a tónové mapování
- Lineární workflow: pracujte v lineárním barevném prostoru, gamma korekce až na finálním výstupu; správně nastavte tagování sRGB u textur.
- Tone mapping: používejte Reinhard nebo ACES podle cílové platformy; zachovejte konzistenci mezi DCC nástrojem a enginem.
Automatizace a nástroje pro optimalizaci
- Automatická decimace a LOD: využívejte nástroje s chybovou metrikou a ochranou hran; po redukci validujte normály a UV.
- Kompresní CLI: glTF-Transform, Blender add-ony, meshoptimizer CLI, toKtx2/BasisU pipeline.
- Kontrola kvality: testujte překryvy UV, texel density, degenerate trojúhelníky, non-manifold hrany a chybějící tangenty.
Časté chyby a jak se jim vyhnout
- Nepřiměřené rozlišení textur na malých objektech – udržujte vhodnou texel density.
- Chybné UV pro lightmapy (překryvy, malý padding) – proveďte re-unwrap a validaci bake testem.
- Směs konvencí normal map (GL vs. DX) – sjednoťte a invertujte zelený kanál podle cílové pipeline.
- Excesivní počet materiálů – použijte atlasování a sdílené materiály, konsolidujte ORM masky.
- Chybějící LOD a impostory – implementujte automatizovaný LOD chain.
- Příliš složité kolizní objemy – nahraďte jednoduchými konvexními tvary.
Doporučený pipeline postup
- Modelujte s čistou topologií a rozumným polycountem, používejte metrické jednotky.
- Proveďte UV unwrap s jednotnou texel density; UV2 pro lightmapy bez překryvů.
- Bake normal, AO a curvature mapy z highpoly; sloučte ORM kanály.
- Vytvořte LOD řady a impostory; validujte přepínání.
- Exportujte do GLB s KTX2 texturami a kompresí Draco/meshopt.
- Otestujte výsledný model v cílovém enginu (WebGL/WebGPU nebo hra), kontrolujte draw cally, využití VRAM, FPS a artefakty.
- Automatizujte v CI: validaci 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. Disciplína v oblasti topologie, UV mapování a materiálů, promyšlené LOD a komprese geometrie i textur zásadně snižují zátěž renderingu a síťového přenosu. Standard glTF/GLB s rozšířeními a moderní pipeline (KTX2, Draco, meshopt) umožňuje doručit atraktivní, rychle načitatelné a multiplatformní 3D zážitky v hrách i webovém prostředí.



























