3 คะแนน โดย GN⁺ 2024-01-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

วิธีสร้างภาพยนตร์แอนิเมชันด้วย 8kB

  • ในเดือนพฤศจิกายน 2022 ได้เริ่มความท้าทายในการสร้างแอนิเมชันแบบเรียลไทม์ภายในขนาดไม่เกิน 8 กิโลไบต์
  • เป้าหมายคือรวมกราฟิกคุณภาพดี แอนิเมชัน การกำกับงานภาพ การทำงานของกล้อง และดนตรีเข้าไว้ด้วยกัน
  • ในเดือนเมษายน 2023 หลังจากทำงานมาหลายเดือน ก็สร้าง "The Sheep and the Flower" เสร็จและเผยแพร่ออกมา

ภาพรวม

  • ผลลัพธ์เป็นไฟล์รันบน Windows โดยองค์ประกอบภาพทั้งหมดใช้ GLSL shader ที่คำนวณแบบเรียลไทม์บน GPU
  • การเรนเดอร์ใช้เทคนิค ray marching และ shader ถูกย่อขนาดด้วยเครื่องมือ Shader Minifier
  • ดนตรีแต่งด้วย OpenMPT และซินธิไซเซอร์ 4klang โดยอธิบายเครื่องดนตรีแบบ procedural และบีบอัดรายการโน้ต
  • โค้ดเขียนด้วย C++ และใช้เฟรมเวิร์ก Leviathan เพื่อเริ่มต้นแฟลกของคอมไพเลอร์และการตั้งค่าเริ่มต้น
  • เอาต์พุตสุดท้ายถูกบีบอัดด้วย Crinkler

จุดเริ่มต้นของการสร้างสรรค์

  • เริ่มโปรเจกต์นี้จากแรงบันดาลใจหลังอดีตเพื่อนร่วมงานแชร์วิดีโอชื่อ "Capoda" ที่สร้างไว้เมื่อนานมาแล้ว
  • โปรเจกต์นี้อาจเป็นตัวอย่างที่ดีของ size coding ที่มีเรื่องราวเหมาะกับข้อจำกัดระดับ 8kB
  • รู้สึกสนใจกับความท้าทายใหม่ที่ต่างจากการตั้งเป้าไว้ที่ 64kB

เรนเดอร์โลกด้วยสามเหลี่ยมสองอัน

  • วาดสี่เหลี่ยมผืนผ้าที่ปกคลุมเต็มหน้าจอ (ประกอบด้วยสามเหลี่ยมสองอัน) แล้วรันโปรแกรมบน GPU (shader) ที่เขียนด้วยภาษา GLSL เพื่อคำนวณสีของแต่ละพิกเซลและแต่ละเฟรม
  • แทนฉากด้วย signed distance field และใช้ ray marching เพื่อแปลง distance field เป็นพิกเซล

การกำกับ

  • คิดหาวิธีเล่าเรื่องและถ่ายทอดอารมณ์ด้วยตัวละครและแอนิเมชันที่มีอยู่อย่างจำกัด
  • ตัดองค์ประกอบที่ไม่จำเป็นต่อเรื่องออก แล้วโฟกัสที่รายละเอียด การกำกับ การตัดต่อ และการซิงก์กับดนตรี
  • ใช้การทำงานของกล้องและเทคนิคการเล่าเรื่องเพื่อสื่ออารมณ์

กระบวนการพัฒนา

  • ในซอร์สโค้ดมีค่าคงที่ที่ฮาร์ดโค้ดไว้จำนวนมาก และแต่ละค่าถูกกำหนดผ่านการลองผิดลองถูกหลายรอบ
  • เพื่อให้ได้วงจรฟีดแบ็กที่รวดเร็ว จึงใช้ shader คอมไพล์ใหม่ระหว่างรันไทม์
  • จำเป็นต้องมีเพลเยอร์ที่เป็นประโยชน์ต่อการทำแอนิเมชันและการควบคุมกล้อง

ดนตรี

  • ดนตรีที่เข้ากับเรื่องราวต้องการหลายพาร์ตและการเปลี่ยนผ่านในช่วงเวลาที่เฉพาะเจาะจง
  • แต่งเพลงด้วยซินธิไซเซอร์ 4klang และบีบอัดข้อมูลเพื่อประหยัดพื้นที่

แอนิเมชัน & การซิงก์

  • ทุกอย่างในเดโมถูกประเมินใหม่ทุกเฟรม และประกอบด้วยช็อตกล้องที่กำหนดด้วยมือประมาณ 25 ช็อต
  • ระหว่างสร้างแต่ละช็อต จะอธิบายว่าพารามิเตอร์แต่ละตัวของกล้องเปลี่ยนไปตามเวลาอย่างไร

เท็กซ์เจอร์ & วัสดุ

  • ต่างจากเรนเดอร์แบบดั้งเดิม ระบบนี้คำนวณและใช้งานเท็กซ์เจอร์ 3D แบบเรียลไทม์
  • เท็กซ์เจอร์อย่างป้ายจราจรถูกสร้างขึ้นจากการรวมหลายฟังก์ชันเข้าด้วยกัน

ดวงตา

  • ในช่วงแรกของการพัฒนา ดวงตาดูไร้ชีวิตและเหมือนวัตถุไม่มีชีวิต แต่เป็นองค์ประกอบสำคัญในฐานะเครื่องมือการเล่าเรื่อง
  • จึงเพิ่มแสงสะท้อนในดวงตาเพื่อทำให้ดูมีชีวิตชีวา

โพสต์โปรเซส

  • ใช้การปรับสี การแก้แกมมา วิกเน็ต ฟิลเตอร์ FXAA และอื่น ๆ เพื่อเพิ่มงานภาพขั้นสุดท้ายและกำหนดบรรยากาศของเรื่องราว

การบีบอัด

  • เลือกแนวทางใช้โค้ดสร้างข้อมูลแทนการเก็บข้อมูลไว้โดยตรง
  • ใช้เครื่องมือบีบอัด Crinkler เพื่อทำให้ไฟล์รันสามารถแตกไฟล์ตัวเองได้

การย่อขนาด

  • ใช้เครื่องมือ Shader Minifier เพื่อทำให้ซอร์สโค้ด shader เล็กที่สุดเท่าที่จะทำได้
  • เพิ่มฟีเจอร์ใหม่เข้าไปใน Shader Minifier เพื่อย่อและบีบอัดโค้ด shader

สงครามระหว่างแกะกับดอกไม้

  • คิดว่าสงครามระหว่างแกะกับดอกไม้ไม่สำคัญหรือ? ประเด็นนี้ที่ถูกกล่าวถึงใน "เจ้าชายน้อย" เป็นส่วนสำคัญของเรื่องราว

บทสรุป

  • เดโมลักษณะนี้ตั้งอยู่บนทักษะขั้นสูงที่จำเป็นต่อการสร้างและงานวิจัยที่มีอยู่ก่อนแล้ว
  • หวังว่าฟีเจอร์ใหม่เหล่านี้จะช่วยให้คนอื่นสร้างเดโมที่ดียิ่งขึ้นได้
  • หมวดหมู่ 8kB เปิดโอกาสได้มากกว่า 4kB และหวังว่าจะได้รับความนิยม

ความเห็นของ GN⁺

  • โปรเจกต์นี้เป็นตัวอย่างของการก้าวข้ามข้อจำกัดทางเทคนิคและใช้ความคิดสร้างสรรค์เพื่อสร้างผลงานที่น่าทึ่ง
  • แอนิเมชันที่เสร็จสมบูรณ์ภายในพื้นที่จำกัดอย่างยิ่งเพียง 8kB แสดงให้เห็นการผสมผสานระหว่างการเขียนโปรแกรม การเพิ่มประสิทธิภาพอัลกอริทึม และการแสดงออกทางศิลปะ
  • การพัฒนาเครื่องมืออย่าง Shader Minifier และการใช้เครื่องมือบีบอัด Crinkler เน้นให้เห็นแนวทางที่สร้างสรรค์ในด้านวิศวกรรมซอฟต์แวร์และการบีบอัดข้อมูล

1 ความคิดเห็น

 
GN⁺ 2024-01-25
ความคิดเห็นบน Hacker News
  • ความเห็นจากผู้สร้างต้นฉบับ:

    • ในฐานะผู้สร้างภาพยนตร์ต้นฉบับ รู้สึกประทับใจที่งานรีเมกสามารถย่อให้พอดีในขนาด 8kB ได้ เมื่อเทียบกับต้นฉบับที่ประกอบด้วยไฟล์ Blender, SVG และไฟล์เสียงระดับ MB
    • มองว่านี่เป็นตัวอย่างการใช้งานใบอนุญาต Creative Commons ได้อย่างมีประโยชน์ และบอกว่าอยากให้มีการใช้ตัวละครเม่นและทำนองเพลงจากต้นฉบับ
  • การกล่าวถึง Sloot Digital Coding System:

    • อ้างอิงถึง Sloot Digital Coding System ด้วยคำว่า "Sloot lives!!!"
  • ความเห็นเกี่ยวกับวิดีโอเดโมซีน:

    • ชี้ว่าวิดีโอเดโมซีนสนุกและยังไม่ได้รับความสนใจมากเท่าที่ควร ทั้งที่ควรมีคนได้เห็นมากกว่านี้
    • หวังว่าช่องอย่าง Retro Game Mechanics Explained จะช่วยอธิบายเดโมซีนได้ดี
  • การวิเคราะห์เทคนิคของเดโมซีน:

    • หากดูและศึกษางานเดโมซีนจำนวนมาก จะเริ่มเข้าใจวิธีที่สามารถลดทอนรูปทรงทางเรขาคณิตได้ เช่น การแทนขาแกะด้วยรูปทรงกรวย
    • กล่าวว่างานเดโมซีนส่วนใหญ่พึ่งพาความสามารถเร่งผล 3D ของ GPU แต่เดโมสไตล์แอนิเมชัน 2D นั้นพบได้น้อย และแทบไม่มีเลยในขนาดเล็กมาก
    • ตั้งคำถามว่าแอนิเมชัน 3D อาจทำได้ง่ายกว่า 2D หรือไม่
    • เสริมว่า "mouton" แปลว่า "แกะ" ในภาษาฝรั่งเศส และเป็นที่มาของคำว่า "mutton"
  • การหวนคิดถึงเกม .kkrieger:

    • แม้จะต่างกันในเชิงเทคนิค แต่ทำให้นึกถึงเกม FPS 3D ที่ถูกบีบอัดเหลือ 96k อย่าง .kkrieger
    • มองว่า .kkrieger เป็นผลงานที่น่าสนใจ
  • คำแนะนำเกี่ยวกับ Cosmos Laundromat:

    • แนะนำ Cosmos Laundromat ของ Blender Foundation ซึ่งแม้จะใหญ่กว่า 8kB แต่เป็นภาพยนตร์แอนิเมชันเกี่ยวกับแกะที่มืดหม่นอย่างคาดไม่ถึง
    • กล่าวว่าภาพยนตร์ที่สร้างขึ้นในฐานะเทคนิคเดโมมักมีแนวโน้มใช้ธีมมืดหม่นแบบไม่ค่อยปกติ
  • ปฏิกิริยาเชิงบวกต่อภาพยนตร์:

    • ประเมินว่าเป็นผลงานที่น่าสนใจและน่าประหลาดใจ ด้วยตอนจบที่คาดเดาไม่ได้
  • คำชมด้านความคิดสร้างสรรค์:

    • ทึ่งกับการสร้างเรื่องราวที่สร้างสรรค์และสนุกภายใต้ข้อจำกัด
    • อยากรู้รายละเอียดทางเทคนิคและวิธีที่ใช้เพื่อลดจำนวนไบต์ให้มากขึ้น
  • ความทรงจำเกี่ยวกับ Razor 1911:

    • คำว่า "Razor 1911" ทำให้รู้สึกคิดถึงอดีตอย่างแรง
  • ข้อมูลเกี่ยวกับหมวดหมู่เดโมซีน:

    • อธิบายว่า 8KB เป็นหนึ่งในหมวดหมู่ของเดโมซีน และแนะนำว่าบน Pouet มีดัชนีที่ดี