3P by neo 10달전 | favorite | 댓글 1개

8kB로 애니메이션 영화를 만드는 방법

  • 2022년 11월, 8킬로바이트 이내로 실시간 애니메이션을 만드는 도전을 시작함.
  • 목표는 품질 좋은 그래픽, 애니메이션, 연출, 카메라 작업 및 음악을 포함하는 것이었음.
  • 2023년 4월, 몇 달간의 작업 끝에 "The Sheep and the Flower"를 완성하여 공개함.

개요

  • 결과물은 Windows 실행 파일로, 모든 시각적 요소는 GPU에서 실시간으로 계산되는 GLSL 셰이더를 사용함.
  • 렌더링은 레이마칭 기법을 사용하고, 셰이더는 Shader Minifier 도구를 사용하여 축소됨.
  • 음악은 OpenMPT와 4klang 합성기를 사용하여 작곡되었으며, 악기는 절차적으로 설명되고 음표 목록은 압축됨.
  • 코드는 C++로 작성되었고, Leviathan 프레임워크를 사용하여 컴파일러 플래그와 초기화를 시작함.
  • 최종 출력은 Crinkler를 사용하여 압축됨.

창조의 시작

  • 전 동료가 오래 전에 만든 "Capoda"라는 비디오를 공유한 것에서 영감을 받아 프로젝트 시작함.
  • 이 프로젝트는 8kB에 적합한 스토리를 가진 사이즈 코딩에 좋은 예가 될 수 있음.
  • 64kB를 목표로 하던 것과는 다른 새로운 도전에 흥미를 느낌.

두 개의 삼각형으로 세계 렌더링하기

  • 전체 화면을 덮는 직사각형(두 개의 삼각형)을 그리고, GLSL 언어로 작성된 GPU 프로그램(셰이더)을 실행하여 각 픽셀과 프레임마다 색상을 계산함.
  • 장면을 부호화된 거리 필드로 표현하고, 레이마칭을 사용하여 거리 필드를 픽셀로 변환함.

연출

  • 한정된 캐릭터와 애니메이션으로 스토리를 전달하고 감정을 표현하는 방법에 대한 고민.
  • 스토리에 불필요한 요소는 제외하고, 디테일과 연출, 편집, 음악과의 동기화에 집중함.
  • 카메라 작업과 스토리텔링 기법을 사용하여 감정을 전달함.

개발 과정

  • 소스 코드에는 많은 하드코딩된 상수들이 포함되어 있으며, 각 상수는 여러 번의 반복을 거쳐 결정됨.
  • 빠른 피드백 루프를 위해 셰이더를 사용하여 런타임에 재컴파일함.
  • 애니메이션과 카메라 제어 작업에 유용한 플레이어가 필요함.

음악

  • 스토리에 맞는 음악은 다양한 부분과 특정 시점에서의 전환을 필요로 함.
  • 4klang 합성기를 사용하여 음악을 작곡하고, 데이터를 압축하여 공간을 절약함.

애니메이션 & 동기화

  • 데모의 모든 것은 프레임마다 재평가되며, 약 25개의 수동 카메라 샷으로 구성됨.
  • 각 샷을 만들 때 카메라의 각 매개변수가 시간에 따라 어떻게 변하는지를 설명함.

텍스처 & 재료

  • 전통적인 렌더러와 달리, 실시간으로 3D 텍스처를 계산하여 사용함.
  • 교통 표지판 같은 텍스처는 여러 함수를 결합하여 생성됨.

  • 개발 초기에는 눈이 생기 없고 무생물 같았으나, 스토리텔링 도구로서 중요함.
  • 눈에 반사되는 빛을 추가하여 생동감을 부여함.

후처리

  • 최종적인 시각적 터치와 스토리의 분위기를 설정하기 위해 색상 보정, 감마 보정, 비네팅, FXAA 필터 등을 사용함.

압축

  • 데이터를 저장하는 대신 코드를 사용하여 데이터를 생성하는 방식을 채택함.
  • Crinkler 압축 도구를 사용하여 실행 파일을 자체 추출 가능하게 만듦.

최소화

  • 셰이더 소스 코드를 최대한 작게 만들기 위해 Shader Minifier 도구를 사용함.
  • 셰이더 코드를 최소화하고 압축하기 위해 새로운 기능을 Shader Minifier에 추가함.

양과 꽃 사이의 전쟁

  • 양과 꽃 사이의 전쟁이 중요하지 않다고 생각하는가? "어린 왕자"에서 언급된 이 주제는 스토리의 중요한 부분임.

결론

  • 이러한 데모를 만들기 위해 필요한 고급 기술과 기존의 연구를 기반으로 함.
  • 새로운 기능들이 다른 사람들이 더 나은 데모를 만드는 데 도움이 되길 바람.
  • 8kB 카테고리는 4kB보다 더 많은 가능성을 제공하며, 인기를 끌기를 희망함.

GN⁺의 의견

  • 이 프로젝트는 기술적 한계를 극복하고 창의성을 발휘하여 놀라운 결과물을 만들어낸 예시임.
  • 8kB라는 극도로 제한된 공간 안에서 완성된 애니메이션은 프로그래밍, 알고리즘 최적화, 그리고 예술적 표현의 결합을 보여줌.
  • Shader Minifier와 같은 도구의 개발과 Crinkler 압축 도구의 사용은 소프트웨어 엔지니어링과 데이터 압축 분야에서의 혁신적인 접근을 강조함.
Hacker News 의견
  • 원작자의 의견:

    • 원작 영화의 창작자로서, 원본이 MB 단위의 Blender, SVG, 오디오 파일로 구성된 것에 비해 리메이크가 8kB 안에 맞춰진 것이 인상적임.
    • 창작물 공유 라이선스(Creative Common license)가 유용하게 쓰인 사례로, 원작의 고슴도치 캐릭터와 멜로디를 사용했으면 하는 바람을 표함.
  • Sloot Digital Coding System에 대한 언급:

    • "Sloot lives!!!"라는 말로 Sloot Digital Coding System에 대한 참조를 함.
  • 데모신(Demoscene) 비디오에 대한 의견:

    • 데모신 비디오가 재미있고, 더 많은 사람들이 봐야 할 만큼 주목받지 못하고 있음을 지적함.
    • 레트로 게임 메커닉스와 같은 채널이 데모신을 잘 설명해주길 바람.
  • 데모신 기술에 대한 분석:

    • 데모신 작품들을 많이 보고 연구하면, 양의 다리를 원뿔 형태로 표현하는 등의 기하학적 단순화가 가능한 방식을 이해하게 됨.
    • 대부분의 데모신이 GPU의 3D 가속 기능에 의존하지만, 2D 애니메이션 스타일의 데모는 드물고 작은 크기에서는 거의 없음을 언급함.
    • 3D 애니메이션이 2D보다 더 쉬운 것인지에 대한 의문을 제기함.
    • "mouton"이 프랑스어로 "양"을 의미하며, 이로부터 "mutton"이 유래했다는 사실을 부연함.
  • .kkrieger 게임에 대한 회상:

    • 기술적인 면이 다르긴 하지만, 96k 크기로 압축된 3D FPS 게임 .kkrieger를 떠올림.
    • .kkrieger가 흥미로운 작품이었다고 평함.
  • Cosmos Laundromat에 대한 추천:

    • 8kB보다는 크지만, 양에 관한 예상치 못한 어두운 애니메이션 영화인 Blender Foundation의 Cosmos Laundromat을 추천함.
    • 기술 데모로서는 이례적으로 어두운 테마를 가진 영화들을 만드는 경향이 있다고 언급함.
  • 영화에 대한 긍정적인 반응:

    • 예측할 수 없는 결말을 가진 영화로서 흥미롭고 놀라운 작품이라고 평가함.
  • 창의성에 대한 칭찬:

    • 제약 조건 내에서 창의적이고 재미있는 스토리를 만든 것에 대해 감탄함.
    • 기술적인 세부 사항과 바이트를 줄이기 위한 방법에 대해 더 알고 싶어함.
  • Razor 1911에 대한 추억:

    • "Razor 1911"이라는 말로 순수한 향수를 느낌.
  • 데모신 카테고리에 대한 정보:

    • 8KB는 데모신 카테고리 중 하나이며, Pouet에 좋은 인덱스가 있다고 소개함.