Zpět na domů

Optimalizace světla v Unity: lightmapy a shadery

Článek zkoumá praktické metody optimalizace osvětlení v Unity Built-in Render Pipeline. Jsou popsány techniky hybridního renderování, manuálního řízení lightmapy, projekce osvětlení terénu prostřednictvím shaderů a modifikace kaskádových stínů pro dosažení stabilního výkonu.

Jak vytlačit maximum z osvětlení v Unity bez HDRP
Advertisement 728x90

# Optimalizace osvětlení v Unity: lightmapping, světelné sondy a vlastní shadery

Vývoj indie projektů s otevřenými lokacemi se nevyhnutelně potýká s omezeními renderování. Zatímco průmysl aktivně přechází na HDRP a hardwarový ray tracing, vestavěný renderovací pipeline Unity (Built-in RP) zůstává spolehlivým nástrojem pro týmy, kterým záleží na předvídatelném výkonu a plné kontrole nad pipeline. Klíčem k stabilní snímkové frekvenci bez vizuálních ústupků je důmyslné oddělení statického a dynamického osvětlení a také cílená optimalizace draw callů.

Hybridní přístup: lightmapy versus Light Probes

Efektivní osvětlení scény vychází z jasného rozdělení geometrie podle priorit. Velké architektury, terény a statické props se renderují přes zapékané mapy osvětlení. Pro tento proces je ideální použít externí lightmappery, jako je Bakery, které zajišťují rychlé předvýpočty Global Illumination a správné zpracování reflexů bez zbytečné zátěže editoru.

Malé objekty se složitou topologií není vhodné péct: vede to k fragmentaci atlasů a růstu spotřeby VRAM. Místo toho se používá systém Light Probes. Sondy interpolují osvětlení okolí, přenáší barevné reflexy a základní stínování na dynamické nebo malé statické meshe. Pro optimalizaci batchingu identických props v jedné zóně lze vynutit přiřazení souřadnic stejné sondy. To snižuje počet unikátních render states a zmírňuje zátěž CPU při přípravě snímků.

Google AdInline article slot

Důležitým aspektem hybridního renderování je vyloučení vzdálené geometrie z výpočtů real-time osvětlení. Směrové světlo (Directional Light) a kaskádové stíny se rychle stávají bottleneckem, pokud engine počítá s objekty na horizontu. Vypnutí real-time vlivu pro vzdálený plán s plným přechodem těchto zón na lightmapy nebo sondy radikálně snižuje počet Draw Calls.

Ruční správa Texel Density a ořezávání zdrojů světla

Automatická generace druhé UV rozbalovačky pro lightmapy často dává suboptimální výsledek. Ruční rozložení UV2 umožňuje přesně rozložit Texel Density podle herní kamery a herní významnosti. Fasády budov, chodby a zóny aktivní interakce dostávají vysokou hustotu texelů, zatímco střechy, zadní strany stěn a nepřístupné oblasti se stlačují na minimum. Tento přístup šetří místo v světelných atlasech a zabraňuje artefaktům komprese na popředí.

Pro vyvážení kvality a výkonu se v Unity používá režim Distance Shadowmask. V rozmezí 50–80 metrů od kamery engine renderuje dynamické stíny a překrývá zapékané GI. Za tímto poloměrem se vykreslují výhradně statické stíny z lightmap. Přechod je plynulý a zátěž GPU se stabilizuje.

Google AdInline article slot

Vestavěný pipeline však nemá nativní mechanismus pro dálkové ořezávání bodových a projektorových zdrojů světla. Lustry ve vzdálených místnostech se stále počítají a plýtvají zdroji. Řešení spočívá v custom manageru: skript udržuje pool aktivních zdrojů, pravidelně (každé 2–3 sekundy) kontroluje vzdálenost k kameře a přepíná stav enabled. Asynchronní kontrola zabraňuje mikrozasekám a zajišťuje, že ve snímku pracují jen vizuálně relevantní zdroje.

Projekce osvětlení terénu přes vlastní shader

Terénní dekorace (sněhové hromady, kameny, vegetace) představují vážný problém pro standardní lightmapping. Péct každý malý objekt je časově náročné a použití Light Probes pro tisíce instancí generuje zbytečné draw call a narušuje statický batching.

Efektivní obcházka spočívá v napsání shaderu, který projektuje lightmapu terénu na překrytí geometrie shora dolů. Světelná mapa musí obsahovat výhradně data terénu. Shader čte světové souřadnice vrcholů dekorací, transformuje je do UV prostoru terénu a sampluje odpovídající texel zapékaného světla. Výsledek simuluje ambient occlusion a základní osvětlení bez vazby na sondy.

Google AdInline article slot

Navíc se do shaderu integruje vertex blending. Při kontaktu spodní části meshe s povrchem terénu dochází k plynulému míchání albedo, normal a mask roughness. To eliminuje tvrdé spoje, vytváří efekt přilnavosti sněhu u paty objektů a vizuálně spojuje rozptýlené props s terénem do jediné geometrie. Metoda zcela vylučuje švy na přechodech a funguje výrazně rychleji než post-processing nebo složité systémy voxelového míchání.

Modifikace kaskádových stínů a programové rozmazání

Standardní stíny Directional Light v Unity trpí dvěma extrémy: buď jsou příliš ostré a schodkovité, nebo rozmazané s viditelným blikáním při snížení rozlišení Shadow Map. V reálných podmínkách je měkkost stínu závislá na vzdálenosti od okludéru a úhlovém rozměru zdroje světla. Stín u paty objektu je vždy ostrý, ale s vzdáleností se polostín rozšiřuje.

Pro simulaci fyzikálně správného chování bez přechodu na těžké pipeliny se používá algoritmus contact hardening shadows s progresivním rozmazáním kaskád. Externí řešení modifikují standardní shadow pipeline a přidávají filtraci na základě hloubky a vzdálenosti od kamery. To umožňuje udržet vysoké Shadow Map Resolution pro blízkou zónu a plynule rozmazat vzdálené kaskády, čímž se eliminuje aliasing a snižují požadavky na fill rate. Na rozdíl od vestavěných analogů v HDRP tento přístup nevyžaduje výpočty na bázi ray tracingu nebo těžkých post-efektů a zachovává kompatibilitu se středním hardwarem.

Co je důležité

• Hybridní renderování vyžaduje jasné rozdělení geometrie: lightmapy pro velkou statiku, Light Probes pro malý dekor a dynamické objekty.

• Ruční nastavení UV2 a Texel Density šetří VRAM a zvyšuje detail osvětlení v herně důležitých zónách.

• Vlastní shadery pro projekci lightmap terénu eliminují potřebu sond pro tisíce malých objektů, snižují Draw Calls a zlepšují batching.

• Dálkové ořezávání bodových zdrojů světla přes pool manager kompenzuje chybějící nativní funkcionalitu v Built-in RP.

• Progresivní rozmazání kaskádových stínů podle vzdálenosti řeší aliasing a blikání bez poklesu výkonu.

— Editorial Team

Advertisement 728x90

Číst dál