3 điểm bởi GN⁺ 2024-01-25 | 1 bình luận | Chia sẻ qua WhatsApp

Cách làm một bộ phim hoạt hình trong 8kB

  • Vào tháng 11 năm 2022, tác giả bắt đầu thử thách tạo hoạt hình thời gian thực trong phạm vi dưới 8 kilobyte.
  • Mục tiêu là bao gồm đồ họa chất lượng cao, hoạt hình, dàn dựng, xử lý camera và âm nhạc.
  • Tháng 4 năm 2023, sau nhiều tháng làm việc, tác giả đã hoàn thành và công bố "The Sheep and the Flower".

Tổng quan

  • Thành phẩm là một tệp thực thi trên Windows, trong đó mọi yếu tố hình ảnh đều sử dụng shader GLSL được tính toán theo thời gian thực trên GPU.
  • Việc kết xuất sử dụng kỹ thuật ray marching, và shader được thu gọn bằng công cụ Shader Minifier.
  • Âm nhạc được sáng tác bằng OpenMPT và bộ tổng hợp 4klang; nhạc cụ được mô tả theo thủ tục và danh sách nốt nhạc được nén lại.
  • Mã được viết bằng C++ và sử dụng framework Leviathan để khởi động các cờ trình biên dịch và quá trình khởi tạo.
  • Đầu ra cuối cùng được nén bằng Crinkler.

Khởi đầu của quá trình sáng tạo

  • Dự án bắt đầu từ cảm hứng khi một đồng nghiệp cũ chia sẻ video mang tên "Capoda" được tạo ra từ lâu.
  • Dự án này có thể trở thành một ví dụ hay cho size coding với một câu chuyện phù hợp trong giới hạn 8kB.
  • Tác giả hứng thú với một thử thách mới, khác với mục tiêu 64kB trước đó.

Kết xuất cả thế giới bằng hai tam giác

  • Một hình chữ nhật phủ toàn màn hình (hai tam giác) được vẽ ra, rồi một chương trình GPU viết bằng ngôn ngữ GLSL (shader) chạy để tính màu cho từng pixel ở mỗi khung hình.
  • Cảnh được biểu diễn bằng signed distance field, và ray marching được dùng để chuyển distance field thành pixel.

Dàn dựng

  • Tác giả suy nghĩ về cách truyền tải câu chuyện và biểu đạt cảm xúc bằng số lượng nhân vật và hoạt ảnh hạn chế.
  • Những yếu tố không cần thiết cho câu chuyện bị loại bỏ, thay vào đó tập trung vào chi tiết, dàn dựng, biên tập và đồng bộ với âm nhạc.
  • Các kỹ thuật camera và kể chuyện được sử dụng để truyền tải cảm xúc.

Quá trình phát triển

  • Mã nguồn chứa nhiều hằng số hard-code, và mỗi hằng số được quyết định qua nhiều vòng lặp thử nghiệm.
  • Để có vòng phản hồi nhanh, shader được tái biên dịch trong lúc chạy.
  • Cần có một trình phát hữu ích cho công việc điều khiển hoạt ảnh và camera.

Âm nhạc

  • Âm nhạc phù hợp với câu chuyện đòi hỏi nhiều phần khác nhau và các chuyển đoạn tại những thời điểm cụ thể.
  • Âm nhạc được sáng tác bằng bộ tổng hợp 4klang, và dữ liệu được nén để tiết kiệm dung lượng.

Hoạt ảnh & đồng bộ

  • Mọi thứ trong bản demo đều được đánh giá lại ở mỗi khung hình, và tác phẩm gồm khoảng 25 cú máy được dàn dựng thủ công.
  • Khi tạo từng cú máy, tác giả mô tả cách mỗi tham số của camera thay đổi theo thời gian.

Texture & vật liệu

  • Khác với các renderer truyền thống, texture 3D được tính toán theo thời gian thực để sử dụng.
  • Những texture như biển báo giao thông được tạo ra bằng cách kết hợp nhiều hàm.

Đôi mắt

  • Ở giai đoạn đầu phát triển, đôi mắt trông thiếu sức sống và giống vật vô tri, dù chúng rất quan trọng như một công cụ kể chuyện.
  • Ánh sáng phản chiếu trong mắt được thêm vào để tạo cảm giác sống động.

Hậu kỳ

  • Để tạo những điểm nhấn thị giác cuối cùng và thiết lập bầu không khí của câu chuyện, tác giả sử dụng cân chỉnh màu, chỉnh gamma, vignette, bộ lọc FXAA và các kỹ thuật khác.

Nén

  • Thay vì lưu trữ dữ liệu, tác giả chọn cách dùng mã để sinh ra dữ liệu.
  • Công cụ nén Crinkler được dùng để biến tệp thực thi thành dạng có thể tự giải nén.

Tối giản hóa

  • Công cụ Shader Minifier được dùng để làm mã nguồn shader nhỏ nhất có thể.
  • Các tính năng mới được bổ sung vào Shader Minifier để tối giản và nén mã shader.

Cuộc chiến giữa cừu và bông hoa

  • Bạn có nghĩ cuộc chiến giữa cừu và bông hoa là không quan trọng không? Chủ đề được nhắc đến trong "Hoàng tử bé" này là một phần quan trọng của câu chuyện.

Kết luận

  • Để tạo ra những bản demo như thế này cần dựa trên kỹ thuật nâng cao và các nghiên cứu có sẵn trước đó.
  • Tác giả hy vọng các tính năng mới sẽ giúp những người khác tạo ra các bản demo tốt hơn.
  • Hạng mục 8kB mang lại nhiều khả năng hơn 4kB và tác giả mong nó sẽ trở nên phổ biến.

Ý kiến của GN⁺

  • Dự án này là một ví dụ cho việc vượt qua giới hạn kỹ thuật và phát huy sáng tạo để tạo ra một thành quả đáng kinh ngạc.
  • Bộ phim hoạt hình hoàn thành trong không gian cực kỳ hạn chế 8kB cho thấy sự kết hợp giữa lập trình, tối ưu thuật toán và biểu đạt nghệ thuật.
  • Việc phát triển các công cụ như Shader Minifier cùng với sử dụng công cụ nén Crinkler nhấn mạnh cách tiếp cận đổi mới trong lĩnh vực kỹ thuật phần mềm và nén dữ liệu.

1 bình luận

 
GN⁺ 2024-01-25
Ý kiến trên Hacker News
  • Ý kiến của tác giả gốc:

    • Với tư cách là người tạo ra bộ phim gốc, tác giả thấy ấn tượng khi bản làm lại có thể gói gọn trong 8kB, trong khi bản gốc được cấu thành từ các tệp Blender, SVG và âm thanh ở mức MB.
    • Đây là một ví dụ cho thấy giấy phép chia sẻ sáng tạo (Creative Commons license) được sử dụng hữu ích, và tác giả bày tỏ mong muốn bản làm lại đã dùng nhân vật nhím và giai điệu của tác phẩm gốc.
  • Nhắc đến Sloot Digital Coding System:

    • Câu "Sloot lives!!!" được dùng như một tham chiếu đến Sloot Digital Coding System.
  • Ý kiến về video demoscene:

    • Có ý kiến cho rằng video demoscene rất thú vị nhưng chưa nhận được sự chú ý xứng đáng để nhiều người xem hơn.
    • Mong rằng những kênh như Retro Game Mechanics Explained sẽ giải thích demoscene thật tốt.
  • Phân tích về kỹ thuật demoscene:

    • Nếu xem và nghiên cứu nhiều tác phẩm demoscene, người ta sẽ hiểu được cách có thể đơn giản hóa hình học, chẳng hạn thể hiện chân cừu bằng dạng hình nón.
    • Có nhắc rằng phần lớn demoscene dựa vào khả năng tăng tốc 3D của GPU, nhưng demo theo phong cách hoạt hình 2D thì hiếm, và ở kích thước nhỏ lại càng hiếm hơn.
    • Có người đặt câu hỏi liệu hoạt hình 3D có phải dễ hơn 2D hay không.
    • Cũng bổ sung rằng "mouton" trong tiếng Pháp có nghĩa là "cừu", và từ đó sinh ra "mutton".
  • Hồi tưởng về game .kkrieger:

    • Dù khác về mặt kỹ thuật, tác phẩm này gợi nhớ đến game FPS 3D .kkrieger được nén xuống kích thước 96k.
    • .kkrieger được đánh giá là một tác phẩm thú vị.
  • Gợi ý về Cosmos Laundromat:

    • Dù lớn hơn 8kB, có người đề xuất Cosmos Laundromat của Blender Foundation, một phim hoạt hình tối màu ngoài dự đoán cũng nói về cừu.
    • Cũng có nhận xét rằng các phim làm như bản demo kỹ thuật thường có xu hướng mang chủ đề tối tăm một cách khác thường.
  • Phản hồi tích cực về bộ phim:

    • Bộ phim được đánh giá là thú vị và gây bất ngờ, với cái kết khó đoán.
  • Lời khen cho sự sáng tạo:

    • Có người ngưỡng mộ việc tạo ra một câu chuyện sáng tạo và vui nhộn trong những ràng buộc chặt chẽ.
    • Họ cũng muốn biết thêm về chi tiết kỹ thuật và các cách được dùng để cắt giảm số byte.
  • Hoài niệm về Razor 1911:

    • Cụm từ "Razor 1911" gợi lên cảm giác hoài niệm thuần túy.
  • Thông tin về hạng mục demoscene:

    • 8KB là một trong các hạng mục của demoscene, và Pouet được giới thiệu là nơi có chỉ mục tốt.