- เมื่อ 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 ความคิดเห็น
แม้จะมีกฎ ownership ที่จำกัด แต่ก็มีโครงสร้างข้อมูลหลากหลายที่ใช้เลี่ยงมันได้ เลยให้ความรู้สึกเหมือนเป็นแค่ทางแก้ขัดไปหน่อย : ใช่เลย ก็แบบนี้แหละ บอกว่าปลอดภัยแต่ก็ต้องใช้ unsafe บอกว่า immutable แต่สุดท้ายก็ mutable ได้อีก มั่วไปหมด สมน้ำหน้าเลย Rust ไม่มีทางไปรอดหรอก
แล้วเกม 2D ล่ะ?
คงต้องมีเกมเอนจินที่พัฒนาด้วย Rust ออกมาก่อน..
ถ้าพัฒนาเกมโดยไม่ใช้เกมเอนจิน ไม่ว่าจะใช้ภาษาอะไรก็น่าจะให้ความรู้สึกแบบนี้แหละนะ.. ฮ่าๆ
Rust สำหรับการพัฒนาเกม: สถานะหลังผ่านไป 1 ปี
Rust นั้น
เหมาะกับการสร้างเอนจิน คอร์ เฟรมเวิร์ก และสิ่งที่แข็งแกร่งในลักษณะนี้
แต่ถ้าจะใช้เพื่อสร้างเลเยอร์ของแอปพลิเคชัน
ผมไม่ค่อยอยากแนะนำเท่าไรนัก
พอเห็นชื่อผู้ใช้แล้ว ความน่าเชื่อถือก็ดูเพิ่มขึ้นเลยนะ
ผมเองก็เคยทำงานด้วย Rust อยู่ช่วงสั้น ๆ และเคยหาข้อมูลเพื่อจะลองเขียนหนังสือเกี่ยวกับมันด้วย แต่ช่วงนี้ความมั่นใจกลับค่อย ๆ ลดลงเรื่อย ๆ ครับ
ผมเชื่ออย่างหนักแน่นว่า Simple is best แต่พอมองมันแล้วกลับรู้สึกเหมือนกำลังเห็นภาษาอีกแบบที่สวนทางกันอยู่
ถึงอย่างนั้นไหน ๆ ก็เข้าไปอยู่ในเคอร์เนลแล้ว ก็คงไม่น่าจะหายไปหรอกครับ
ความเห็นจาก Hacker News
Tiny Glade เป็นตัวอย่างของเกมที่น่าประทับใจซึ่งเขียนด้วย Rust
กำลังเรียนรู้ Rust อยู่ และมีแผนจะเข้าร่วมทีมใหม่
โปรแกรมเมอร์ C++ อาจประทับใจกับ pattern matching และ enum types แต่สำหรับโปรแกรมเมอร์ OCaml/Haskell ก็ไม่ได้รู้สึกว้าวเท่าไร
C++ นั้นยากและซับซ้อน แต่การได้ใช้ภาษาที่ทันสมัยกว่าก็ให้ความรู้สึกสดใหม่
แปลกใจที่ไม่มีการพูดถึง Godot
อยากสร้างเอนจิน Ray-caster แบบ 2.5D ของตัวเองขึ้นใหม่ด้วย Rust