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
Ý kiến trên Hacker News
Ý kiến của tác giả gốc:
Nhắc đến Sloot Digital Coding System:
Ý kiến về video demoscene:
Phân tích về kỹ thuật demoscene:
Hồi tưởng về game .kkrieger:
Gợi ý về Cosmos Laundromat:
Phản hồi tích cực về bộ phim:
Lời khen cho sự sáng tạo:
Hoài niệm về Razor 1911:
Thông tin về hạng mục demoscene: