3 pontos por GN⁺ 2024-01-25 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2024-01-25
Comentários do Hacker News
  • Opinião do autor original:

    • Como criador do filme original, achou impressionante que o remake tenha cabido em 8kB, enquanto o original era composto por arquivos Blender, SVG e áudio na faixa de MB.
    • Aponta isso como um caso útil de uso de licença Creative Commons e diz que gostaria que tivessem usado o personagem ouriço e a melodia da obra original.
  • Menção ao Sloot Digital Coding System:

    • Faz referência ao Sloot Digital Coding System com a frase "Sloot lives!!!".
  • Opinião sobre vídeos da demoscene:

    • Diz que os vídeos da demoscene são divertidos e não recebem a atenção que merecem, a ponto de mais gente deveria vê-los.
    • Espera que canais como Retro Game Mechanics Explained expliquem bem a demoscene.
  • Análise das técnicas da demoscene:

    • Afirma que, ao assistir e estudar muitas obras da demoscene, dá para entender formas de simplificação geométrica, como representar as pernas da ovelha em formato cônico.
    • Menciona que a maior parte da demoscene depende da aceleração 3D da GPU, mas demos em estilo de animação 2D são raros e quase inexistentes em tamanhos tão pequenos.
    • Levanta a dúvida se animação 3D seria mais fácil do que 2D.
    • Acrescenta que "mouton" significa "ovelha" em francês, e que disso teria surgido "mutton".
  • Lembrança do jogo .kkrieger:

    • Embora a parte técnica seja diferente, isso faz lembrar de .kkrieger, um jogo FPS 3D comprimido em 96k.
    • Avalia .kkrieger como uma obra interessante.
  • Recomendação de Cosmos Laundromat:

    • Recomenda Cosmos Laundromat, da Blender Foundation, que é maior que 8kB, mas também um filme de animação inesperadamente sombrio sobre uma ovelha.
    • Comenta que obras feitas como demonstração técnica tendem, de forma incomum, a ter temas mais sombrios.
  • Reação positiva ao filme:

    • Considera o filme interessante e surpreendente, com um final imprevisível.
  • Elogio à criatividade:

    • Admira o fato de terem criado uma história criativa e divertida dentro das restrições impostas.
    • Diz que gostaria de saber mais sobre os detalhes técnicos e os métodos usados para economizar bytes.
  • Memórias de Razor 1911:

    • A expressão "Razor 1911" desperta pura nostalgia.
  • Informação sobre categorias da demoscene:

    • Explica que 8KB é uma das categorias da demoscene e apresenta o Pouet como um bom índice.