14 คะแนน โดย GN⁺ 2025-01-09 | 9 ความคิดเห็น | แชร์ทาง WhatsApp
  • เมื่อ 1 ปีก่อนผู้เขียนได้เขียนบทความเกี่ยวกับการพัฒนาเกม 3D ด้วย Rust และนี่คือความเห็นหลังติดตามความเปลี่ยนแปลงตลอด 1 ปีที่ผ่านมา
  • ยังคงใช้กราฟิกสแตก Rend3, WGPU และ Vulkan อยู่ และตอนนี้มันทำงานได้ค่อนข้างดี
  • ในปี 2024 มีโปรเจกต์เกมขนาดใหญ่บางส่วนที่พัฒนาด้วย Rust ถูกยุติลง
    • มีบางทีมที่รู้สึกว่าข้อจำกัดด้าน ownership เป็นภาระ
    • และก็มีทีมที่แสดงความไม่พอใจด้วยเหตุผลอย่างเวลาในการคอมไพล์
  • arewegameyet.rs อัปเดตไม่บ่อยตั้งแต่เดือนกรกฎาคม 2024 ทำให้ข้อมูลที่เกี่ยวข้องมีแนวโน้มล้าหลัง
  • Rend3 หยุดพัฒนาแล้ว จึงดูแลฟอร์กของตัวเองชื่อ rend3-hp อยู่
    • ได้อัปเดตให้รองรับเวอร์ชันล่าสุดของ wgpu, winit, egui เป็นต้น และแก้บั๊ก race condition ที่ค้างมานาน
    • ยังมีปัญหา CPU bottleneck เมื่อดึงประสิทธิภาพ GPU ออกมาให้มากที่สุด บน NVidia 3070 เวลา GPU load อยู่ที่ 25% ก็เริ่มมีเวลา CPU ไม่เพียงพอ
    • จำเป็นต้องมี bindless ของ Vulkan และ Vulkan queue หลายชุด ซึ่งมีความเป็นไปได้ว่า wgpu จะรองรับในปี 2025
    • หากไม่ได้ต้องการประสิทธิภาพสูงสุด สแตกนี้ก็ยังทำงานได้เหมาะสม
  • เคยมีโปรเจกต์เรนเดอร์อื่นอย่าง Orbit และ Renderling แต่ไม่ได้รับการดูแลอย่างต่อเนื่อง
    • Renderling ยังพอดูมีความเป็นไปได้อยู่บ้าง แต่ยังไม่พร้อมใช้งาน และมีนักพัฒนาเพียงคนเดียว
  • เมื่อต้องทำงาน 3D ด้วย Rust จะเสียเวลาไปมากกับการดูแลรักษาชั้นล่างของกราฟิกสแตกด้วยตัวเอง
    • ทุกครั้งที่ winit, wgpu, egui ฯลฯ เปลี่ยน API ก็ต้องตามแก้ให้เข้ากัน และต้องรับภาระแก้ส่วนที่พังทั้งหมด
    • ถ้าตัวหนึ่งเปลี่ยน ตัวอื่นมักต้องใช้เวลาอีก 1-2 เดือนกว่าจะตามทัน
  • อีกปัญหาที่พบได้บ่อยใน ecosystem ของ Rust คือ หากใช้วิธีจัดสรรหน่วยความจำของตัวเองแทนไวยากรณ์ Rust แบบปลอดภัย จะทำให้การหาบั๊กในมัลติเธรดยากขึ้น
  • ข้อจำกัดของโครงสร้างการเรนเดอร์
    • เรนเดอร์ส่วนใหญ่ไม่ได้จัดการข้อมูลเชิงพื้นที่แยกต่างหาก และมักใช้โครงสร้างที่คำนวณกับวัตถุทั้งหมดสำหรับแต่ละแสง (O(N*M))
    • หากต้องจัดการฉากขนาดใหญ่ จะต้องมีแนวคิดเรื่องการแบ่งพื้นที่ (scene graph) และสุดท้ายก็จะชนกับปัญหาว่าจำเป็นต้องไปสู่โครงสร้างระดับเกมเอนจิน (เช่น Bevy)
    • Bevy ใช้ระบบ ECS ของตัวเอง จึงไม่ได้ใช้ประโยชน์จากโมเดล ownership ของ Rust มากนัก และมีข้อเสียตรงที่บังคับให้ต้องใช้แนวทางแบบ Bevy
  • สรุปคือ การทำงาน 3D ที่ซับซ้อนด้วย Rust นั้นเป็นไปได้ แต่ต้องใช้ความพยายามอย่างมาก

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

 
ahwjdekf 2025-01-11

แม้จะมีกฎ ownership ที่จำกัด แต่ก็มีโครงสร้างข้อมูลหลากหลายที่ใช้เลี่ยงมันได้ เลยให้ความรู้สึกเหมือนเป็นแค่ทางแก้ขัดไปหน่อย : ใช่เลย ก็แบบนี้แหละ บอกว่าปลอดภัยแต่ก็ต้องใช้ unsafe บอกว่า immutable แต่สุดท้ายก็ mutable ได้อีก มั่วไปหมด สมน้ำหน้าเลย Rust ไม่มีทางไปรอดหรอก

 
dreamexist 2025-01-10

แล้วเกม 2D ล่ะ?

 
aer0700 2025-01-10

คงต้องมีเกมเอนจินที่พัฒนาด้วย Rust ออกมาก่อน..

 
bbulbum 2025-01-10

ถ้าพัฒนาเกมโดยไม่ใช้เกมเอนจิน ไม่ว่าจะใช้ภาษาอะไรก็น่าจะให้ความรู้สึกแบบนี้แหละนะ.. ฮ่าๆ

 
coremaker 2025-01-10

Rust สำหรับการพัฒนาเกม: สถานะหลังผ่านไป 1 ปี

Rust นั้น
เหมาะกับการสร้างเอนจิน คอร์ เฟรมเวิร์ก และสิ่งที่แข็งแกร่งในลักษณะนี้

แต่ถ้าจะใช้เพื่อสร้างเลเยอร์ของแอปพลิเคชัน
ผมไม่ค่อยอยากแนะนำเท่าไรนัก

 
bbulbum 2025-01-10

พอเห็นชื่อผู้ใช้แล้ว ความน่าเชื่อถือก็ดูเพิ่มขึ้นเลยนะ

 
gurugio 2025-01-10

ผมเองก็เคยทำงานด้วย Rust อยู่ช่วงสั้น ๆ และเคยหาข้อมูลเพื่อจะลองเขียนหนังสือเกี่ยวกับมันด้วย แต่ช่วงนี้ความมั่นใจกลับค่อย ๆ ลดลงเรื่อย ๆ ครับ
ผมเชื่ออย่างหนักแน่นว่า Simple is best แต่พอมองมันแล้วกลับรู้สึกเหมือนกำลังเห็นภาษาอีกแบบที่สวนทางกันอยู่
ถึงอย่างนั้นไหน ๆ ก็เข้าไปอยู่ในเคอร์เนลแล้ว ก็คงไม่น่าจะหายไปหรอกครับ

 
GN⁺ 2025-01-09
ความเห็นจาก Hacker News
  • Tiny Glade เป็นตัวอย่างของเกมที่น่าประทับใจซึ่งเขียนด้วย Rust

    • ดูเหมือนว่าการพัฒนาเกมด้วย Rust จะเน้นไปที่การปล่อย crate ที่ยังไม่สมบูรณ์มากกว่าการสร้างเกมจริง
  • กำลังเรียนรู้ Rust อยู่ และมีแผนจะเข้าร่วมทีมใหม่

    • Rust สนุกดี แต่ยังไม่เก่งพอที่จะมีความเห็นหนักแน่นเกี่ยวกับภาษา
    • คิดว่าการออกแบบภาษานั้นไม่ได้สง่างามนัก
    • แม้จะมีกฎ ownership ที่ค่อนข้างจำกัด แต่ก็มีโครงสร้างข้อมูลหลายแบบที่ใช้เลี่ยงได้ จึงให้ความรู้สึกเหมือนเป็นการแก้ปัญหาเฉพาะหน้า
  • โปรแกรมเมอร์ C++ อาจประทับใจกับ pattern matching และ enum types แต่สำหรับโปรแกรมเมอร์ OCaml/Haskell ก็ไม่ได้รู้สึกว้าวเท่าไร

  • C++ นั้นยากและซับซ้อน แต่การได้ใช้ภาษาที่ทันสมัยกว่าก็ให้ความรู้สึกสดใหม่

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

    • Godot รองรับหลายภาษา รวมถึง Rust ผ่าน GDExtension
    • C++ ได้รับการรองรับอย่างเป็นทางการ ส่วน D, Go, Haxe, Rust, Swift ได้รับการรองรับจากชุมชน
  • อยากสร้างเอนจิน Ray-caster แบบ 2.5D ของตัวเองขึ้นใหม่ด้วย Rust

    • ตอนนี้อิมพลีเมนต์ด้วย C และมีโค้ดประมาณ 500 บรรทัด
    • เคยพยายามรีแฟกเตอร์ แต่ Ray-caster พังไปเลย
    • C สนุก แต่ก็มีหลุมพรางอยู่มาก
    • มีลิงก์ไปยัง repository ที่เกี่ยวข้อง