Licht in een voxelwereld: echte lampen of flood fill?
Een speler zet een gloeilamp in zijn basis. Wat gebeurt er technisch? Deze onschuldige vraag leidde tot een fundamentele keuze – en het antwoord is een mooi voorbeeld van hoe de “modernere” oplossing niet altijd de betere is.
Optie A: echte Unity-lichten. Elk gloeiend blok wordt een puntlichtbron, de engine rekent alles uit. Ziet er geweldig uit – maar schaalt niet. In een voxelwereld kunnen honderden gloeiende blokken in beeld zijn; realtime puntlichten in zulke aantallen laten elke GPU zweten, zeker in de browserversie.
Optie B: flood-fill-licht. De klassieker van het genre: licht is een getalwaarde per blok die zich vanaf de bron verspreidt en bij elke stap afneemt. Spotgoedkoop, willekeurig veel bronnen – maar het resultaat ziet er plat uit, want het licht heeft geen richting. Een muur naast de lamp is net zo helder als het oppervlak eronder.
Onze keuze: flood fill met richting. We bleven bij de flood-fill-aanpak, maar leerden hem richtingsinformatie: het licht weet uit welke richting het komt, en oppervlakken worden daardoor verschillend verlicht. Het resultaat wordt tijdens het meshen in de chunk-mesh gebakken – tijdens het spelen kost het praktisch niets, maar het ziet er merkbaar driedimensionaler uit dan klassiek blokkenlicht.
De les daaruit nemen we sindsdien overal mee: vraag eerst wat het echte probleem van het genre is (hier: heel veel bronnen, statische geometrie) en kies dan pas de technologie. Echte lichten losten een probleem op dat we niet hadden – en zouden er een scheppen dat we niet kunnen oplossen.
Opmerkingen