Zkratka proLevel of Detaillevl of dýtejl, zkratka se čte el-ou-dýTakéLOD, LoD, Level-of-Detail, mesh LODPokročilý
Definice
Level of Detail je technika real-time grafiky, která pro každý objekt vybírá zjednodušenou variantu geometrie, textur nebo stínování podle toho, jak velký je objekt na obrazovce. Vzdálený model se vykreslí s desetinou trojúhelníků, blízký v plné kvalitě. Cílem je udržet snímkovou frekvenci bez viditelné ztráty kvality.
Nezaměňujte: Ve 3D grafice Level of Detail znamená zjednodušování geometrie podle vzdálenosti, v BIM a stavebnictví (LOD 100 až 500) míru propracovanosti stavebního modelu a v Tableau je Level of Detail výraz pro agregaci dat na jiné granularitě.
Proč se vzdálený model nevyplatí kreslit celý
Objekt vzdálený od kamery zabírá na obrazovce třeba padesát pixelů. Model s dvěma sty tisíci trojúhelníky se do těch padesáti pixelů stejně nevejde: většina trojúhelníků skončí menší než jeden pixel, rasterizér je ale musí přesto zpracovat. Grafické karty rasterizují po blocích 2×2 pixely (quad), takže mikroskopický trojúhelník spotřebuje stejnou práci jako trojúhelník přes celý quad. Level of Detail tenhle nepoměr odstraňuje tím, že vzdálenému objektu podstrčí hrubší variantu.
Čím se řídí přepnutí úrovně
Nejběžnějším kritériem je promítnutá velikost objektu na obrazovce, tedy poloměr obalové koule dělený vzdáleností od kamery a přepočtený na pixely. Vzdálenost samotná je horší metrika, protože nezohledňuje zorný úhel: po přiblížení zoomem by se objekt zvětšil, ale úroveň by se nezměnila. Do rozhodování často vstupuje i rozpočet: engine si spočítá, kolik trojúhelníků si v tomto snímku může dovolit, a úrovně posune, dokud se nevejde.
Diskrétní LOD
Umělec nebo nástroj připraví několik hotových verzí meshe (LOD0 až LOD3) a engine mezi nimi přepíná. Je to nejrozšířenější přístup, protože je levný za běhu. Nevýhodou je popping: viditelné škubnutí v okamžiku přepnutí. Řeší se překryvem přes průhlednost (cross-fade), dithered fade nebo tím, že se přepíná co nejdál od kamery.
Spojité a virtualizované LOD
Progresivní meshe a moderní virtualizovaná geometrie pracují s clustery trojúhelníků a mění detail plynule, po malých částech modelu, místo skoku mezi celými verzemi. Tím popping prakticky mizí, ale cena se přesouvá do složitějšího datového formátu a do compute pipeline.
Kde všude se LOD objevuje kromě geometrie
- Textury: mipmapy jsou LOD pro obrazová data, hardware si úroveň volí sám podle derivací UV souřadnic. Viz také textura a UV mapování.
- Stínování: vzdálené objekty dostanou jednodušší shader, bez parallaxu, bez subsurface scatteringu.
- Impostory a billboardy: vzdálený strom se nahradí jednou texturovanou plochou vyrenderovanou předem z několika úhlů.
- Animace a fyzika: vzdálené postavy se animují na nižší frekvenci nebo s méně kostmi.
- Mapy a GIS: dlaždicové mapy načítají jiná data pro každou úroveň přiblížení, což je principiálně stejný mechanismus.
Co LOD stojí
Každá úroveň je další mesh v paměti a další položka v buildu. Automatické decimace často rozbije siluetu, UV švy nebo normály, takže hrubé úrovně potřebují ruční kontrolu. Přepínání navíc rozbíjí instancování: dva stromy ve stejném lese na různých úrovních už nejdou vykreslit jedním draw callem, pokud engine neseskupuje podle úrovně. A poslední past: LOD řeší počet trojúhelníků, ne počet draw callů. Scéna s pěti tisíci malými objekty bude pomalá i s dokonalými úrovněmi detailu, protože ji brzdí režie na CPU.
Příklady z praxe
Les s tisíci stromy
Otevřený svět má v dohledu 3 000 stromů. Plný model má 40 000 trojúhelníků, což by znamenalo 120 milionů trojúhelníků na snímek a nehratelnou snímkovou frekvenci. Se čtyřmi úrovněmi (40k / 8k / 1,5k / billboard) klesne zátěž řádově pod dva miliony, protože drtivá většina stromů je daleko. Rozdíl je na obrazovce nepostřehnutelný, dokud se hráč nerozhlíží dalekohledem.
Výběr úrovně podle velikosti na obrazovce
Engine si pro každý objekt spočítá, jak velký je jeho obalový poloměr v pixelech, a podle prahů vybere index úrovně. Prahy se ladí empiricky: příliš agresivní hodnoty šetří výkon, ale způsobí viditelný popping u objektů, kolem kterých hráč prochází.
function pickLod(radius, distance, fovY, screenHeightPx, thresholds) { // promítnutá velikost objektu v pixelech const projected = (radius / Math.max(distance, 0.001)) * (screenHeightPx / (2 * Math.tan(fovY / 2))); for (let i = 0; i < thresholds.length; i++) { if (projected > thresholds[i]) return i; // 0 = nejvyšší detail } return thresholds.length; // mimo dosah, lze culling } // prahy v pixelech, seřazené sestupně pickLod(1.8, 120, Math.PI / 3, 1080, [300, 120, 40, 12]);
Časté omyly
- MýtusLOD je jen pro hry, moderní GPU zvládne cokoli.
- Ve skutečnostiLevel of Detail neřeší jen hrubý výkon, ale i propustnost paměti a efektivitu rasterizace. Trojúhelníky menší než pixel plýtvají výkonem na jakémkoli hardwaru, a v prohlížeči nebo na mobilu je rozdíl mezi zapnutým a vypnutým LOD často rozdíl mezi 60 a 15 snímky za sekundu.
- MýtusStačí spustit automatickou decimaci a hotovo.
- Ve skutečnostiAutomatické zjednodušení hlídá počet trojúhelníků, ne siluetu, normály ani UV švy. Hrubé úrovně proto obvykle potřebují ruční zásah, jinak se objeví praskliny v texturách, ztracené detaily obrysu nebo špatně nasvícené plochy.
- MýtusKdyž zapnu LOD, zmizí propady výkonu.
- Ve skutečnostiLevel of Detail snižuje počet zpracovaných vrcholů a fragmentů, ale nesnižuje počet draw callů ani změn stavu. Scéna brzděná režií na CPU nebo streamováním textur zůstane pomalá i s perfektně nastavenými úrovněmi.
Časté dotazy
- Kolik úrovní detailu má model reálně mít?
- Praxe se u herních assetů drží tří až pěti úrovní na model, kde každá další má zhruba polovinu až třetinu trojúhelníků té předchozí. Víc úrovní přináší klesající užitek a lineárně rostoucí náklady na paměť, build a údržbu. U malých objektů, které jsou skoro vždy daleko, často stačí LOD0 plus jedna hrubá varianta a pak úplné vypnutí vykreslování. U hrdinských objektů, ke kterým se kamera přiblíží na dotek, se naopak vyplatí jemnější odstupňování blízkých úrovní.
- Jak se zbavit poppingu při přepnutí úrovně?
- Popping se nejčastěji tlumí prolnutím obou úrovní přes několik snímků, buď skutečnou průhledností, nebo dithered maskou v kombinaci s temporal anti-aliasingem, což je levnější. Druhá cesta je posunout prahy tak, aby k přepnutí docházelo dál od kamery a na menší ploše obrazovky, kde je rozdíl neviditelný. Třetí, nejdůkladnější řešení je spojité nebo clusterované LOD, které mění geometrii po malých částech a nikdy nevymění celý model naráz.
- Souvisí Level of Detail s mipmapami?
- Level of Detail a mipmapy jsou stejný princip aplikovaný na jiná data. Mipmapy jsou předpočítané zmenšeniny textury a hardware si mezi nimi vybírá podle toho, jak rychle se mění UV souřadnice mezi sousedními pixely. Grafická API to označují přímo jako texture LOD a nabízejí i ruční posun úrovně (LOD bias). Rozdíl je v tom, že texturové LOD řídí GPU automaticky, zatímco geometrické úrovně vybírá engine kódem na CPU nebo v compute shaderu.
- Potřebuje LOD i webová 3D aplikace nebo konfigurátor produktu?
- Webová 3D scéna profituje z Level of Detail často víc než desktopová hra, protože běží na neznámém hardwaru včetně mobilů a musí navíc stáhnout data po síti. U konfigurátoru jednoho produktu, kde je na scéně jediný model a kamera kolem něj obíhá, bývá důležitější komprese geometrie a streamování než přepínání úrovní. Jakmile ale scéna obsahuje interiér, město nebo katalog desítek objektů, LOD se stává nutností.
- Jak se LOD chová u stínů a odrazů?
- Stínové mapy a odrazy je téměř vždy vhodné vykreslovat na nižší úrovni detailu než hlavní pohled, protože výsledek je rozmazaný a rozdíl v siluetě se ztratí. Řada enginů proto drží samostatný práh pro stínový průchod, typicky o jednu úroveň hrubší. Pozor jen na velmi ploché objekty a na dlouhé stíny při nízkém slunci, kde hrubá geometrie prosákne do obrazu jako viditelně hranatý obrys.
Zdroje
- Level of detail (computer graphics)(otevře se v novém okně)
- OpenGL Specification(otevře se v novém okně)
- Mipmap(otevře se v novém okně)
- WebGL Specification(otevře se v novém okně)
- Decimate Modifier(otevře se v novém okně)