Cómo hacer una película animada en 8 kB
- En noviembre de 2022, comenzó el reto de crear una animación en tiempo real dentro de un límite de 8 kilobytes.
- El objetivo era incluir gráficos de buena calidad, animación, dirección, trabajo de cámara y música.
- En abril de 2023, tras varios meses de trabajo, terminó y publicó "The Sheep and the Flower".
Resumen general
- El resultado es un ejecutable de Windows, y todos los elementos visuales usan shaders GLSL calculados en tiempo real por la GPU.
- El renderizado usa la técnica de raymarching, y los shaders se reducen con la herramienta Shader Minifier.
- La música fue compuesta con OpenMPT y el sintetizador 4klang; los instrumentos se describen de forma procedural y la lista de notas se comprime.
- El código fue escrito en C++ y usa el framework Leviathan para iniciar los flags del compilador y la inicialización.
- La salida final se comprime con Crinkler.
El comienzo de la creación
- El proyecto comenzó inspirado por un video llamado "Capoda" que un excolega había compartido hace mucho tiempo.
- Este proyecto podía ser un buen ejemplo de size coding con una historia adecuada para 8 kB.
- Le resultó interesante un nuevo desafío distinto de cuando apuntaba a 64 kB.
Renderizar un mundo con dos triángulos
- Se dibuja un rectángulo que cubre toda la pantalla (dos triángulos) y se ejecuta un programa de GPU escrito en GLSL (shader) para calcular el color de cada píxel y de cada frame.
- La escena se representa como un campo de distancia con signo, y se convierte en píxeles usando raymarching.
Dirección
- Hubo una reflexión sobre cómo transmitir la historia y expresar emociones con personajes y animaciones limitados.
- Se eliminaron los elementos innecesarios para la historia y se puso el foco en el detalle, la dirección, la edición y la sincronización con la música.
- Se usaron técnicas de trabajo de cámara y narrativa visual para transmitir emociones.
Proceso de desarrollo
- El código fuente incluye muchas constantes hardcodeadas, y cada una se decidió tras varias iteraciones.
- Para tener un ciclo de retroalimentación rápido, se recompilan los shaders en tiempo de ejecución.
- Se necesitaba un reproductor útil para trabajar en la animación y el control de cámara.
Música
- La música adecuada para la historia requería varias secciones y transiciones en momentos específicos.
- La música se compuso con el sintetizador 4klang, y los datos se comprimieron para ahorrar espacio.
Animación y sincronización
- Todo en la demo se reevalúa en cada frame, y está compuesta por unas 25 tomas de cámara hechas manualmente.
- Al crear cada toma, se describe cómo cambia con el tiempo cada parámetro de la cámara.
Texturas y materiales
- A diferencia de un renderizador tradicional, se calculan y usan texturas 3D en tiempo real.
- Las texturas de elementos como las señales de tráfico se generan combinando varias funciones.
Ojos
- Al inicio del desarrollo, los ojos se veían apagados e inanimados, pero eran importantes como herramienta narrativa.
- Se añadió luz reflejada en los ojos para darles vida.
Posprocesado
- Para dar el toque visual final y definir la atmósfera de la historia, se usaron corrección de color, corrección gamma, viñeteado, filtros FXAA y más.
Compresión
- Se adoptó un enfoque de generar datos con código en lugar de almacenarlos.
- Se usó la herramienta de compresión Crinkler para hacer que el ejecutable pudiera autoextraerse.
Minimización
- Se usó la herramienta Shader Minifier para hacer el código fuente del shader lo más pequeño posible.
- Se añadieron nuevas funciones a Shader Minifier para minimizar y comprimir el código shader.
La guerra entre la oveja y la flor
- ¿Crees que la guerra entre la oveja y la flor no es importante? Este tema, mencionado en "El principito", es una parte importante de la historia.
Conclusión
- Este tipo de demo se basa en técnicas avanzadas necesarias para construirla y en investigación previa.
- Espera que las nuevas funciones ayuden a otros a crear demos aún mejores.
- La categoría de 8 kB ofrece más posibilidades que la de 4 kB, y espera que gane popularidad.
La opinión de GN⁺
- Este proyecto es un ejemplo de cómo superar límites técnicos y desplegar creatividad para producir un resultado sorprendente.
- La animación terminada dentro del espacio extremadamente limitado de 8 kB muestra la combinación de programación, optimización algorítmica y expresión artística.
- El desarrollo de herramientas como Shader Minifier y el uso de la herramienta de compresión Crinkler destacan un enfoque innovador en ingeniería de software y compresión de datos.
1 comentarios
Opiniones en Hacker News
Opinión del autor original:
Mención del Sloot Digital Coding System:
Opinión sobre los videos de la demoscene:
Análisis de la tecnología de la demoscene:
Recuerdo del juego .kkrieger:
Recomendación de Cosmos Laundromat:
Reacción positiva a la película:
Elogio a la creatividad:
Recuerdo de Razor 1911:
Información sobre la categoría de la demoscene: