Alle artikelen
Tutorials · 6 min read

Dichte bossen zonder de framerate-klif: LOD's, impostors en instancing

Hoe je duizenden bomen op framerate rendert: de LOD-keten van volle mesh tot billboard, octaëdrische impostors die vanuit elke hoek standhouden, instancing en culling, en de wind- en shadingtrucs die een gebakken bos niet dood laten lijken.

Spruce forest on a green alpine slope with a handful of wooden cabins below

Kort gezegd: een overtuigend dicht bos is een prestatie-boss-fight: duizenden high-poly bomen, gelaagde transparantie, en instances die zich tot de horizon uitstrekken. Je wint het met een gedisciplineerde LOD-keten die eindigt in impostors (naar de camera gerichte billboards die een 3D-boom vanuit elke hoek namaken), agressieve instancing en culling, en een paar shadingtrucs zodat de goedkope verre bomen zichzelf niet verraden. Dit artikel loopt door de hele keten van volle mesh tot billboard, de octaëdrische-impostortruc, en hoe je een zwaar geoptimaliseerd bos niet dood laat lijken.

De rand van een bos, bomen wijkend in de diepte Elke boom hier is op een andere afstand van de camera, dus elke boom zou een andere kost moeten hebben. De kunst van een goedkoop bos is polygonen alleen aan de dichtbij gelegene besteden en de rest overtuigend faken.

Het kernidee: betalen per afstand

Een boom op 5 meter en een op 500 meter zouden niet hetzelfde moeten kosten. Een LOD-keten besteedt volle detail dichtbij en progressief goedkopere representaties met afstand, eindigend in een plat billboard, zodat de totale kost plat blijft terwijl het bos groeit.

Het hele spel is weigeren volle prijs te betalen voor bomen die de camera nauwelijks oplost. Dichtbij is een boom een volle mesh met individuele bladcards; ver weg is hij een handvol pixels die een plat beeld perfect reproduceert. Een LOD- (level-of-detail-)keten formaliseert dat: meerdere versies van dezelfde boom bij afnemende kost, gewisseld op schermgrootte, zodat een bos van tienduizend bomen ongeveer kost wat er in detail zichtbaar is in plaats van de som van elke boom op volle kwaliteit. Zonder haar schaalt dichtheid je frame-tijd lineair de grond in; met haar kun je het bomenaantal veel hoger duwen voor hetzelfde budget.

De LOD-keten, stap voor stap

LOD0 volle mesh met bladcards (dichtbij); LOD1–2 gereduceerde geometrie en versimpelde bladeren (midden); LOD3 een paar cards of een enkele card; finale LOD een impostor/billboard (ver). Elke stap halveert ongeveer de kost terwijl de wissel onzichtbaar blijft.

Een typische foliage-LOD-keten loopt zoiets als: LOD0, de mesh met volle detail met al zijn bladcards, voor bomen vlak bij de speler; LOD1–LOD2, gereduceerde stamgeometrie en minder, grotere bladcards, voor de middengrond; LOD3, een drastisch versimpelde card-cluster; en een finale impostor (in essentie een plat beeld) voor alles wat ver is. Het vakmanschap zit in de overgangsafstanden en de blend, zodat de wissel niet popt. Gedithered of gecrossfaded LOD-overgangen verbergen de switch; een harde pop op de verkeerde afstand is de verrader die de illusie breekt. Stem de afstanden af tegen je werkelijke camera, niet defaults.

Impostors: 3D faken vanuit elke hoek

Een impostor (octaëdrische impostor) pre-rendert de boom vanuit tientallen hoeken in een atlas, en toont dan de dichtstbijzijnde vastgelegde weergave als een billboard. Anders dan een plat billboard ziet hij er correct uit terwijl de camera eromheen beweegt: goedkoop, maar 3D-achtig.

Het verre einde van de keten is waar de grootste besparingen leven, en de impostor is de slimme truc die ze acceptabel maakt. Een gewoon billboard (één plat beeld dat naar de camera draait) ziet er recht van voren goed uit maar wordt plat en glijdt onnatuurlijk terwijl je beweegt. Een octaëdrische impostor lost dit op door de boom pre-te-renderen vanuit vele gezichtspunten gerangschikt rond een bol, ze in te pakken in een textureatlas, en welke vastgelegde hoek ook het dichtst bij de huidige camerarichting is te tonen (blendend tussen de dichtstbij paar). Het resultaat leest als een echte 3D-boom vanuit elke hoek voor een fractie van de kost, wat is waarom impostors de ruggengraat zijn van geloofwaardige verre bossen. Ze worden één keer gebakken en kosten bijna niets om te tekenen.

Varens en lage onderbegroeiing die een bosbodem betapijten De grondlaag vermenigvuldigt de instance-telling snel. Onderbegroeiing heeft dezelfde discipline nodig als de bomen: instance het, LOD het, en cull het hard, want een varen op 80 meter zou helemaal niet moeten tekenen.

Instancing en culling

Teken herhaalde bomen als instances zodat duizenden weinig draw calls kosten, en cull agressief: frustum-cull wat buiten scherm is en distance-cull het kleine spul. Instancing lost CPU-kosten op; culling stopt je met betalen voor het onzichtbare.

Zelfs met perfecte LOD's begraaft het indienen van tienduizend bomen als individuele objecten de CPU. Instancing laat alle kopieën van een boom ineenklappen in een handvol draw calls, wat niet-onderhandelbaar is voor een echt bos, en het is precies wat het bakken van een scatter naar native engine-instances je geeft. Bovendien, cull meedogenloos: frustum culling dropt alles buiten de view, en distance culling verwijdert de grondclutter en kleine foliage die te klein is om voorbij een bepaald bereik op te merken. Gras en onderbegroeiing vooral zouden harde, nabije cull-afstanden moeten hebben, omdat ze de instance-telling sneller vermenigvuldigen dan bomen. Een workflow die dichtheid schildert en dan naar geïnstanceerde meshes bakt (zoals die van Numivo) overhandigt de engine precies de gebatchte, cullbare vorm die een dicht bos nodig heeft.

Het goedkope bos levend houden

Zware optimalisatie kan een bos statisch en dood laten lijken, dus counter dat met subtiele wind op de nabije LOD's, kleur- en schaalvariatie tussen instances, en shading dat voorkomt dat verre impostors als plat karton lezen.

Het risico van al deze efficiëntie is een bos dat geweldig draait en levenloos aanvoelt. Drie goedkope tikken brengen het terug: wind, vertexanimatie op de nabije LOD's zodat nabij foliage beweegt, ook al staan de verre impostors stil (niemand merkt een statische boom op 300 meter). Variatie, randomiseer schaal, rotatie en een tint per instance zodat het oog de herhaling niet vangt; identieke bomen zijn de copy-paste-verrader. En shadingzorg op impostors, bak hun belichting zodat ze niet in overduidelijk karton platslaan als de zonhoek verandert. Besteed de frame-tijd die je bespaarde aan deze details dichtbij, waar de speler echt kijkt, en het geoptimaliseerde bos voelt net zo levend aan als een niet-geoptimaliseerd, terwijl het meerdere keren sneller draait.

Veldgetallen die het stelen waard zijn

  • Kostenprincipe: betalen per afstand, een verre boom mag niet kosten als een nabije
  • LOD-keten: volle mesh → gereduceerd → card-cluster → impostor, elk ~halveert de kost
  • Impostor = pre-gerenderde hoeken in een atlas → 3D-achtig billboard vanuit elke view
  • Instance herhalingen (weinig draw calls) + hard-cull klein ver foliage
  • Houd hem levend: wind op nabij-LOD + variatie per instance + gebakken impostorshading

Mini-FAQ

Billboard vs impostor, wat is het verschil? Een billboard is één plat beeld dat naar de camera draait en platslaat terwijl je eromheen beweegt. Een impostor slaat vele hoeken op en toont de juiste, dus hij houdt stand in 3D. Voor alles wat de speler omcirkelt of passeert, gebruik impostors; gewone billboards zijn alleen goed voor werkelijk verre, statische achtergronddecors.

Hoeveel LOD-niveaus heeft een boom nodig? Gebruikelijk drie tot vier plus een impostor. Meer is niet automatisch beter: elk niveau is authoring- en geheugenkosten. Genoeg om elke wissel een kleine, onmerkbare stap te maken is het doel, geen maximum.

Maakt Nanite dit obsoleet? Het verandert de geometriekant: Nanite handelt dicht meshdetail zonder traditionele LOD's af, maar transparantie (bladcards), instancingdiscipline en culling tellen nog steeds, en impostors blijven nuttig voor de verre afstand. De principes overleven; de tooling verschuift.

Wat doodt bosprestaties het vaakst? Overdraw van overlappende transparante bladcards, en niet-gecullt grondfoliage. Strak de bladcards, cull onderbegroeiing dichtbij, en instance alles: dat trio wint het meeste van het budget terug voordat je zelfs de boommesh aanraakt.

Een dicht bos is een van de meest strafbare dingen om te renderen en een van de meest belonende om goed te doen. Bouw de LOD-keten, laat impostors de afstand dragen, instance en cull zonder genade, en besteed je besparingen aan wind en variatie dichtbij, en je hebt een bos dat zich tot de horizon uitstrekt en zijn framerate vasthoudt.