Optimalizace 3D modelů pro hry a web

0
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

  1. Modelování s čistou topologií a rozumným polycountem, v metrických jednotkách.
  2. UV unwrap s jednotnou texel density; UV2 pro lightmapy bez překryvů.
  3. Bake normal/AO/curvature z highpoly; sloučení ORM kanálů.
  4. Tvorba LOD řady a impostorů; validace přepínání.
  5. Export do GLB s KTX2 texturami a Draco/meshopt kompresí.
  6. Test v cílovém enginu (WebGL/WebGPU nebo hra), kontrola draw calls, 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. 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í.

Poradňa

Potrebujete radu? Chcete pridať komentár, doplniť alebo upraviť túto stránku? Vyplňte textové pole nižšie. Ďakujeme ♥