Sprites de fogo em 8-bit com fogo reconstruído
Requer movimentos já renderizados pelo skill fire-sprites: este skill trabalha a partir das camadas separadas de corpo e fogo em moves/NAME/, e não de vídeo plano. $KIT é a raiz do kit (dois níveis acima deste arquivo); py é $KIT/.venv/bin/python; execute a partir do diretório do projeto.
py $KIT/tools/retro.py # cada movimento renderizado
py $KIT/tools/retro.py "breath_*" # ou apenas alguns (nomes ou globs)
abrir retro.html
Por que o fogo é reconstruído, não reduzido
Reduzir um sprite de fogo e encaixá-lo em uma paleta resulta em uma mancha branca e plana: na câmera, a chama é cortada no branco, então não há cor interna para preservar. Em vez disso:
- Corpo: reduzido, borda alfa rígida, mapeado para uma paleta fixa de 8 cores de pele e couro (ponderada por luminosidade para que a sombra se mantenha), com um contorno escuro de 1 pixel.
- Fogo: a forma real da chama é preservada quadro a quadro, mas sua cor é redesenhada. O quão profundo um pixel está dentro da chama escolhe um passo em uma rampa de calor de 7 cores, do vermelho escuro na borda até laranja e amarelo até um núcleo branco, com um dithering ordenado 4x4 entre os passos. A profundidade é medida em relação à espessura daquela chama, então uma chama fina de espada ainda tem um núcleo quente e uma enorme nuvem de sopro tem um gradiente amplo. Uma pequena passagem de abertura remove linhas finas de parede que vazaram para a camada de fogo.
retro.html mostra cada movimento de quatro maneiras: fogo reconstruído e quantização direta, em alturas de corpo de 64 px e 40 px. A versão direta está lá para que o artista veja a diferença; o fogo reconstruído é o que deve ser utilizado. A animação roda "em meia taxa" (metade da taxa de quadros mestre), que soa retrô e reduz pela metade o tamanho da folha.
Saídas: retro/NAME_B64.png, NAME_B40.png (reconstruído), NAME_A64.png, NAME_A40.png (direto) e retro/atlas.json com grade de quadros, FPS e âncora dos pés. Desenhe-os com escala de vizinho mais próximo apenas em múltiplos inteiros (image-rendering: pixelated em CSS).
O que dizer ao artista
Observe o resultado antes de descrevê-lo. Descobertas típicas:
- Nuvens de sopro são muito legíveis; o redesenho dá a elas estrutura que a filmagem não possui.
- Nuvens que tocaram a borda do quadro, uma janela ou parede estourada ficam quadriculadas nesta escala.
- O corpo pisca para quase branco no pico de um sopro e mapeia para azul marinho escuro em quadros de silhueta, porque a paleta segue a luz da filmagem. Ofereça-se para manter os tons de pele estáveis se isso incomodar (ainda não implementado).
Alterando a aparência
Edite as constantes no início de tools/retro.py: BODY_PAL (paleta do corpo, do mais escuro ao mais claro), FIRE_RAMP (borda ao núcleo), os tamanhos em for B in (64, 40) e a curva de profundidade na linha heat =. Mantenha a paleta fixa em todos os movimentos de um mesmo artista para que as animações combinem entre si.