Luz num mundo de voxels: luzes reais ou flood fill?
Um jogador coloca uma lâmpada luminosa na sua base. O que acontece tecnicamente? Essa pergunta inocente desencadeou uma decisão fundamental para nós — e a resposta é um bom exemplo de como a solução “mais moderna” nem sempre é a melhor.
Opção A: luzes reais do Unity. Cada bloco brilhante vira uma fonte de luz pontual, e o motor calcula tudo. Fica ótimo — mas não escala. Um mundo de voxels pode ter centenas de blocos brilhantes à vista; luzes pontuais em tempo real nessa quantidade fazem qualquer GPU suar, ainda mais na versão para navegador.
Opção B: luz por flood fill. O clássico do gênero: a luz é um valor numérico por bloco que se espalha a partir da fonte e diminui a cada passo. Baratíssimo, qualquer número de fontes — mas o resultado parece chapado, porque a luz não tem direção. Uma parede ao lado da lâmpada fica tão clara quanto a superfície logo abaixo dela.
Nossa escolha: flood fill com direção. Ficamos com a abordagem de flood fill, mas ensinamos a ela informação direcional: a luz sabe de que direção vem, e as superfícies são iluminadas de forma diferente de acordo com isso. O resultado é gravado na malha do chunk durante a geração — em tempo de execução custa praticamente nada, mas parece visivelmente mais tridimensional que a luz de bloco clássica.
A lição disso levamos para todo lugar desde então: primeiro pergunte qual é de fato o problema do gênero (aqui: muitíssimas fontes, geometria estática), depois escolha a tecnologia. As luzes reais resolviam um problema que não tínhamos — e criariam um que não saberíamos resolver.
Comentários