Optimalizace 3D modelů pro hry a web
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). Vnímejte i počet vrcholů po dělení podle UV švů a tvrdých hran.
- Paměť textur: sledujte VRAM/RAM včetně mipmap; preferujte komprimované formáty a rozumné rozlišení dle texel density.
- Draw calls: slučujte materiály a využijte instancing; každý unikátní materiál a mesh může přidat volání vykreslení.
- Šířka pásma: pro web optimalizujte velikost GLB/GLTF, 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 dbejte na konzistentní chamfery.
- Edge flow: směřujte 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 (feature preservation).
Level of Detail (LOD), HLOD a impostory
- LOD řady: připravte 3–5 úrovní; LOD0 pro blízký pohled, LOD1–3 pro střední/vzdálené. Každý LOD redukuje tris o 40–70 % proti předchozímu.
- Křížové prolínání: použijte cross-fade nebo dithering pro neviditelné přepínání.
- Impostory/billboardy: pro velmi vzdálené objekty a vegetaci použijte obrazové impostory nebo 2D billboardy s normal mapou.
- HLOD: hierarchická agregace vzdálených skupin objektů do jednoho zjednodušeného meše – výrazně snižuje draw calls.
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é paddingy (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 prioritu.
- Překryvy: povoleny pro tile textury a symetrické části, ale nesmí se překrývat v UV2 určeném pro lightmapy.
- Atlasování: slučujte drobné prvky do atlasů pro snížení draw calls, pozor na bleeding a mipmap artefakty.
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é gamma operace.
- Sloučení textur: pro web používejte masky v kanálech (např. ORM: occlusion–roughness–metallic v RGB) pro snížení počtu souborů.
- Varianty shaderů: omezte počet materiálů a shader feature flagů (varianto-exploze zvedá kompilace i draw calls).
Textury: formáty, komprese a mipmapy
- Komprese GPU: BC/ASTC/ETC dle platformy; pro web preferujte KTX2 s Basis Universal (transkoduje se do nativních GPU formátů).
- Mipmapping: vždy zapněte mipmapy pro snížení aliasingu a zátěže; 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 malý v záběru.
- Draco/meshopt: pro geometrii v glTF použijte KHR_draco_mesh_compression nebo EXT_meshopt_compression; pro textury KTX2/Basis.
Normal mapy, smoothing groups a správná orientace
- Smoothing: tvrdé hrany na ostrých přechodech, jinde plynulé; konzistence se zvoleným bake profilem.
- OpenGL vs. DirectX normal mapy: zelený kanál může být invertovaný; pro web (WebGL/Three.js) zpravidla OpenGL konvence. Ověřte při exportu.
- Tangent space: zajistěte generování tangents/bitangents konzistentně mezi nástrojem a enginem; nesoulad způsobí švy a vlnění.
Baking detailů: AO, curvature, thickness a detailní normal
- High-to-low bake: přeneste detaily z highpoly do normal/curvature map; zajistí věrnost při nízkém polycountu.
- Ambient Occlusion: používejte jemně a multiplikačně (nepřepalovat); 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 ≤ 4 kosti na vrchol; omezte celkový počet kostí kvůli uniform buffer limitům (web/mobile).
- Morph targets (blendshapes): výrazně zvyšují velikost; používejte selektivně a s kvantizací/kompresí.
- Kompresní techniky animací: redukce klíčů, kvantizace rotací (např. quaternion 10–14 bit), spline aproximace; pro runtime dekompresi volte knihovny s nízkou režií.
Fyzika, kolizní proxy a navigace
- Kolizní meše: nahrazujte vizuální meš jednoduššími tvary (box, kapsle, konvexní hull). Nekomplikujte fyziku trojúhelníkovou sítí.
- NavMesh: generujte separátně a udržujte mimo vizuální GLTF; minimalizujte velikost a přesnost dle potřeby AI.
Slučování, instancing a draw calls
- Batching: slučte statické díly se stejným materiálem; pozor na frustum culling – příliš velké batche mohou zbytečně renderovat.
- Instancing: pro opakující se objekty (stromy, šrouby) použijte HW instancing; atributy pro varianty (barva, transform) ukládejte jako instanced buffer.
- Materiálová disciplína: snižujte počet materiálů; slučte drobné textury do atlasu.
Formáty a export: glTF/GLB jako standard
- glTF 2.0/GLB: preferovaný pro web i enginy díky PBR standardu, 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), handedness a pivots; zmrazte transformace, aplikujte scale 1.0.
Jednotky, osy, pivoty a transformace
- Metrické jednotky: standardizujte na metrech (1.0 = 1 m) pro konzistentní fyziku a světlo.
- Osy a handedness: web scény obvykle Y-up, pravotočivý systém; sjednoťte 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í fetch s HTTP/2.
- Kompresní pipeline: export GLB, Draco/meshopt pro geometrii, KTX2/Basis pro textury, gzip/brotli na transportní vrstvě.
- Cache-Control: dlouhé max-age pro verzované assety; content hashing v názvech souborů.
- Streaming/progressive loading: nejprve LOD nebo proxy model, poté detail; zobrazte skeleton UI (skeleton screen).
Osvětlení, lightmapy a stínování
- Lightmap UV2: bez překryvů, s paddingem; pro web preferujte menší atlas s opatrným rozlišením a kompresí.
- Stíny: vyvažte kvalitu a výkon (PCF, filtr, rozlišení shadow mapy); statické stíny bakeujte, dynamické ponechte jen tam, kde je to nutné.
- Environment mapy: prefilterované (specular/irradiance), komprimované KTX2; správné IBL výrazně zvedá kvalitu při minimální zátěži.
Kvalita obrazu: color management a tónové mapování
- Lineární workflow: pracujte lineárně, s gamma korekcí až na výstupu; správně flagujte sRGB u textur.
- Tone mapping: Reinhard/ACES podle cíle; konzistence mezi DCC nástrojem a enginem.
Automatizace a nástroje pro optimalizaci
- Automatická decimace a LOD: nástroje s chybovou metrikou a ochranou hran; validace normál a UV po redukci.
- Kompresní CLI: glTF-Transform, Blender add-ony, meshoptimizer CLI, toKtx2/BasisU pipeline.
- Kontrola kvality: testujte UV overlapping, texel density, degenerate tris, 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 texel density.
- Chybné lightmap UV (překryvy, malý padding) → re-unwrap a validace bake testem.
- Mix normal map konvencí (GL vs. DX) → sjednoťte a invertujte G kanál dle cílové pipeline.
- Excesivní počet materiálů → atlasování a sdílené materiály, sloučení ORM masek.
- Chybějící LOD a impostory → nasadit automatizovaný LOD chain.
- Příliš komplexní kolize → nahradit jednoduchými konvexními tvary.
Doporučený pipeline postup
- Modelování s čistou topologií a rozumným polycountem, v metrických jednotkách.
- UV unwrap s jednotnou texel density; UV2 pro lightmapy bez překryvů.
- Bake normal/AO/curvature z highpoly; sloučení ORM kanálů.
- Tvorba LOD řady a impostorů; validace přepínání.
- Export do GLB s KTX2 texturami a Draco/meshopt kompresí.
- Test v cílovém enginu (WebGL/WebGPU nebo hra), kontrola draw calls, VRAM, FPS a artefaktů.
- 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. Disciplína v topologii, UV a materiálech, 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 ve webovém prostředí.