Como fazer um filme de animação em 8 kB
- Em novembro de 2022, começou o desafio de criar uma animação em tempo real com menos de 8 kilobytes.
- O objetivo era incluir gráficos de boa qualidade, animação, direção, trabalho de câmera e música.
- Em abril de 2023, após alguns meses de trabalho, "The Sheep and the Flower" foi concluído e lançado.
Visão geral
- O resultado é um executável para Windows, e todos os elementos visuais usam shaders GLSL calculados em tempo real na GPU.
- A renderização usa a técnica de ray marching, e os shaders foram reduzidos com a ferramenta Shader Minifier.
- A música foi composta com OpenMPT e o sintetizador 4klang; os instrumentos são descritos proceduralmente e a lista de notas é comprimida.
- O código foi escrito em C++ e usa o framework Leviathan para iniciar flags do compilador e a inicialização.
- A saída final foi comprimida com Crinkler.
O início da criação
- O projeto começou inspirado pelo compartilhamento de um vídeo chamado "Capoda", feito há muito tempo por um ex-colega.
- Este projeto poderia ser um bom exemplo de size coding com uma história adequada para 8 kB.
- Houve interesse nesse novo desafio, diferente da meta anterior de 64 kB.
Renderizando um mundo com dois triângulos
- Desenha-se um retângulo que cobre a tela inteira (dois triângulos) e executa-se um programa de GPU (shader), escrito na linguagem GLSL, para calcular a cor de cada pixel e de cada frame.
- A cena é representada como um signed distance field, e o ray marching é usado para converter esse campo de distância em pixels.
Direção
- Houve reflexão sobre como transmitir a história e expressar emoções com personagens e animações limitados.
- Elementos desnecessários para a história foram excluídos, e o foco ficou nos detalhes, na direção, na edição e na sincronização com a música.
- Trabalho de câmera e técnicas de storytelling são usados para transmitir emoções.
Processo de desenvolvimento
- O código-fonte inclui muitas constantes hardcoded, e cada uma delas foi definida após várias iterações.
- Para um ciclo rápido de feedback, os shaders eram recompilados em tempo de execução.
- Era necessário um player útil para trabalhar com animação e controle de câmera.
Música
- Uma música adequada à história exigia várias partes e transições em momentos específicos.
- A música foi composta com o sintetizador 4klang, e os dados foram comprimidos para economizar espaço.
Animação & sincronização
- Tudo na demo é reavaliado a cada frame, e ela é composta por cerca de 25 tomadas de câmera feitas manualmente.
- Ao criar cada tomada, descreve-se como cada parâmetro da câmera varia ao longo do tempo.
Texturas & materiais
- Diferentemente de renderizadores tradicionais, texturas 3D são calculadas e usadas em tempo real.
- Texturas como placas de trânsito são geradas pela combinação de várias funções.
Olhos
- No início do desenvolvimento, os olhos pareciam sem vida e inanimados, mas são importantes como ferramenta de storytelling.
- Foi adicionada luz refletida nos olhos para dar mais vivacidade.
Pós-processamento
- Para dar os toques visuais finais e definir a atmosfera da história, foram usados color grading, correção de gama, vinheta, filtro FXAA e outros recursos.
Compressão
- Em vez de armazenar dados, foi adotada uma abordagem que usa código para gerar os dados.
- A ferramenta de compressão Crinkler foi usada para tornar o executável autoextraível.
Minimização
- A ferramenta Shader Minifier foi usada para deixar o código-fonte dos shaders o menor possível.
- Novos recursos foram adicionados ao Shader Minifier para minimizar e comprimir o código dos shaders.
A guerra entre a ovelha e a flor
- Você acha que a guerra entre a ovelha e a flor não é importante? Esse tema, mencionado em "O Pequeno Príncipe", é uma parte importante da história.
Conclusão
- Esse tipo de demo se baseia em técnicas avançadas necessárias para criá-la e em pesquisas já existentes.
- A expectativa é que os novos recursos ajudem outras pessoas a criar demos ainda melhores.
- A categoria de 8 kB oferece mais possibilidades do que a de 4 kB, e há esperança de que ganhe popularidade.
Opinião do GN⁺
- Este projeto é um exemplo de superação de limites técnicos e de uso da criatividade para produzir um resultado impressionante.
- A animação concluída dentro do espaço extremamente limitado de 8 kB mostra a combinação de programação, otimização de algoritmos e expressão artística.
- O desenvolvimento de ferramentas como Shader Minifier e o uso da ferramenta de compressão Crinkler destacam uma abordagem inovadora em engenharia de software e compressão de dados.
1 comentários
Comentários do Hacker News
Opinião do autor original:
Menção ao Sloot Digital Coding System:
Opinião sobre vídeos da demoscene:
Análise das técnicas da demoscene:
Lembrança do jogo .kkrieger:
Recomendação de Cosmos Laundromat:
Reação positiva ao filme:
Elogio à criatividade:
Memórias de Razor 1911:
Informação sobre categorias da demoscene: