Dome Keeper demonstra que a pixel art não está em conflito com a iluminação dinâmica. Seu sucesso visual reside no uso inteligente de shaders personalizados no Godot Engine e em uma paleta de cores que se transforma conforme a profundidade. Esta análise detalha as técnicas de shading e partículas que criam sua atmosfera envolvente, oferecendo um roteiro para desenvolvedores indie que buscam efeitos semelhantes sem sacrificar o desempenho.
Shaders e camadas de cor conforme a profundidade 🎨
O efeito de profundidade em Dome Keeper é alcançado através de um sistema de camadas de cor (color grading) controlado por um shader de fragmento no Godot. À medida que o jogador escava, um valor de profundidade é passado para o shader, que interpola entre uma paleta superficial (quente e brilhante) e uma subterrânea (fria e escura). A iluminação dinâmica, por sua vez, é implementada com luzes de textura suave (soft shadows) sobre sprites no modo CanvasItem. Para otimizar, recomenda-se usar luzes de baixa resolução e limitar o número de luzes ativas por frame. No Aseprite, os sprites são preparados com separação de camadas de iluminação (base, sombra, brilho) para facilitar a mistura em tempo real a partir do Godot.
Partículas e desempenho em tempo real ⚡
O sistema de partículas de Dome Keeper é chave para a atmosfera, mas um mau uso pode arruinar o desempenho. A solução é empregar o nó GPUParticles2D do Godot, que processa as partículas na placa de vídeo. Para efeitos como poeira ou faíscas ao cavar, recomenda-se usar texturas pequenas (16x16 pixels) e reduzir a vida útil das partículas para menos de um segundo. Além disso, o uso de emissores com taxa de emissão variável (burst) evita picos de desempenho. Finalmente, a paleta de cores das partículas deve ser sincronizada com a camada de profundidade através de um gradiente de cor no material do sistema de partículas, replicando a transição visual do ambiente.
Como se pode implementar no Godot o sistema de iluminação dinâmica de Dome Keeper sem quebrar a estética da pixel art e mantendo um desempenho ótimo em tempo real
(PS: os game jams são como casamentos: todo mundo feliz, ninguém dorme e você acaba chorando)