8kB ile animasyon filmi nasıl yapılır
- Kasım 2022'de, 8 kilobayt içinde gerçek zamanlı bir animasyon üretme meydan okumasına başlandı.
- Amaç; yüksek kaliteli grafikler, animasyon, yönetmenlik, kamera çalışması ve müzik içermekti.
- Nisan 2023'te, aylar süren çalışmanın ardından "The Sheep and the Flower" tamamlanıp yayımlandı.
Genel bakış
- Ortaya çıkan çıktı bir Windows çalıştırılabilir dosyası ve tüm görsel öğeler GPU üzerinde gerçek zamanlı hesaplanan GLSL shader'ları kullanıyor.
- Render işlemi ray marching tekniğini kullanıyor ve shader'lar Shader Minifier aracıyla küçültülüyor.
- Müzik, OpenMPT ve 4klang synthesizer kullanılarak bestelendi; enstrümanlar prosedürel olarak tanımlandı ve nota listeleri sıkıştırıldı.
- Kod C++ ile yazıldı ve derleyici bayraklarını ve başlatmayı ayarlamak için Leviathan framework'ü kullanıldı.
- Nihai çıktı Crinkler kullanılarak sıkıştırıldı.
Yaratımın başlangıcı
- Proje, eski bir iş arkadaşının uzun zaman önce yaptığı "Capoda" adlı videoyu paylaşmasının verdiği ilhamla başladı.
- Bu proje, 8kB'ye uygun bir hikâyeye sahip size coding için iyi bir örnek olabilir.
- 64kB'yi hedefleyen işlerden farklı olan bu yeni meydan okuma ilgi çekici bulundu.
Dünyayı iki üçgenle render etmek
- Tüm ekranı kaplayan bir dikdörtgen (iki üçgen) çiziliyor ve GLSL dilinde yazılmış GPU programı (shader) çalıştırılarak her piksel ve kare için renk hesaplanıyor.
- Sahne signed distance field olarak temsil ediliyor ve ray marching kullanılarak distance field piksellere dönüştürülüyor.
Yönetmenlik
- Sınırlı karakter ve animasyonla hikâyenin nasıl anlatılacağı ve duyguların nasıl ifade edileceği üzerine düşünüldü.
- Hikâye için gereksiz öğeler çıkarıldı; detay, yönetmenlik, kurgu ve müzikle senkronizasyona odaklanıldı.
- Duyguları aktarmak için kamera çalışması ve hikâye anlatımı teknikleri kullanıldı.
Geliştirme süreci
- Kaynak kodda çok sayıda hard-code edilmiş sabit bulunuyor ve her sabit birçok yineleme sonucunda belirlendi.
- Hızlı bir geri bildirim döngüsü için shader'lar çalışma zamanında yeniden derlendi.
- Animasyon ve kamera kontrolü üzerinde çalışmak için kullanışlı bir player gerekiyordu.
Müzik
- Hikâyeye uygun müzik, farklı bölümler ve belirli anlarda geçişler gerektiriyordu.
- Müziği bestelemek ve yerden tasarruf etmek için veriyi sıkıştırmak amacıyla 4klang synthesizer kullanıldı.
Animasyon & senkronizasyon
- Demodaki her şey her karede yeniden değerlendiriliyor ve yaklaşık 25 adet manuel kamera planından oluşuyor.
- Her plan oluşturulurken kameranın her parametresinin zaman içinde nasıl değiştiği tanımlandı.
Doku & malzemeler
- Geleneksel rendererlardan farklı olarak, 3D dokular gerçek zamanlı hesaplanıp kullanılıyor.
- Trafik işaretleri gibi dokular birden fazla fonksiyon birleştirilerek oluşturuluyor.
Gözler
- Geliştirmenin ilk aşamalarında gözler cansız ve inorganik görünüyordu, ancak hikâye anlatımı aracı olarak büyük önem taşıyordu.
- Gözlerde yansıyan ışık eklenerek canlılık kazandırıldı.
Son işleme
- Son görsel dokunuşları yapmak ve hikâyenin atmosferini kurmak için renk düzeltme, gamma düzeltmesi, vignette, FXAA filtresi gibi teknikler kullanıldı.
Sıkıştırma
- Veri depolamak yerine, veriyi kodla üreten bir yaklaşım benimsendi.
- Crinkler sıkıştırma aracı kullanılarak çalıştırılabilir dosya kendini açabilir hâle getirildi.
Küçültme
- Shader kaynak kodunu olabildiğince küçük yapmak için Shader Minifier aracı kullanıldı.
- Shader kodunu küçültmek ve sıkıştırmak için Shader Minifier'a yeni özellikler eklendi.
Koyun ile çiçek arasındaki savaş
- Koyun ile çiçek arasındaki savaşın önemli olmadığını mı düşünüyorsunuz? "Küçük Prens"te anılan bu konu, hikâyenin önemli bir parçası.
Sonuç
- Bu tür demoları oluşturmak için gereken ileri teknikler ve mevcut araştırmalar temel alındı.
- Yeni özelliklerin başkalarının daha iyi demolar yapmasına yardımcı olması umuluyor.
- 8kB kategorisi 4kB'ye kıyasla daha fazla imkân sunuyor ve popülerleşmesi umut ediliyor.
GN⁺ görüşü
- Bu proje, teknik sınırları aşarak ve yaratıcılığı ortaya koyarak etkileyici bir çıktı üretmenin bir örneği.
- 8kB gibi son derece kısıtlı bir alanda tamamlanan bu animasyon; programlama, algoritma optimizasyonu ve sanatsal ifadenin birleşimini gösteriyor.
- Shader Minifier gibi araçların geliştirilmesi ve Crinkler sıkıştırma aracının kullanımı, yazılım mühendisliği ve veri sıkıştırma alanlarında yenilikçi bir yaklaşımı vurguluyor.
1 yorum
Hacker News yorumları
Orijinal yaratıcının görüşü:
Sloot Digital Coding System'e gönderme:
Demoscene videoları hakkındaki görüş:
Demoscene tekniğine dair analiz:
.kkrieger oyunu üzerine anımsama:
Cosmos Laundromat önerisi:
Filme yönelik olumlu tepki:
Yaratıcılığa övgü:
Razor 1911'e dair nostalji:
Demoscene kategorileri hakkında bilgi: