5 điểm bởi GN⁺ 2025-04-29 | 3 bình luận | Chia sẻ qua WhatsApp
  • Nhóm phát triển Architect of Ruin ban đầu khởi động với engine Bevy và Rust, nhưng do các vấn đề thực tiễn nên đã chuyển sang Unity và C#
  • Rust và Bevy có nhiều ưu điểm, các vấn đề như cộng tác, nhu cầu về trừu tượng hóa cấp cao, API thay đổi thường xuyên, giảm hiệu quả học với AI, giới hạn modding đã trở thành trở ngại
  • Nhóm đã thử nghiệm chuyển 3 tính năng cốt lõi sang Unity và xác minh thành công chỉ trong 3 ngày, rồi hoàn tất toàn bộ quá trình port trong 6 tuần
  • Sau khi chuyển đổi, lượng mã giảm xuống, tốc độ phát triển được cải thiện, đồng thời có thể tận dụng các công cụ trong hệ sinh thái, giúp mức độ hài lòng khi phát triển tăng mạnh
  • Dù vẫn dành nhiều tình cảm cho Rust và Bevy, nhóm nhấn mạnh đây là lựa chọn thực tế để đáp ứng các yêu cầu của dự án

Giai đoạn phát triển ban đầu với Bevy và Rust

  • Nhóm rất thích mô hình ECS của Bevy và kiểm tra tại thời điểm biên dịch đặc trưng của Rust, nhờ đó trải nghiệm được khả năng refactor nhanh và tính ổn định cao
  • Tự triển khai bằng Bevy các thành phần như tilemap, skeletal animation, custom rendering pipeline
  • Nhận được nhiều cảm hứng từ sự nhiệt huyết và văn hóa thảo luận sôi nổi của cộng đồng Bevy

Emergent Problems: những vấn đề nghiêm trọng hơn dự đoán

  • Vấn đề cộng tác: với các thành viên là người mới học Rust, sự phức tạp của Rust trở thành rào cản học tập, làm chậm tốc độ đóng góp
  • Thiếu trừu tượng hóa cấp cao
    • Gặp khó khăn trong việc chuyển nhanh ý tưởng gameplay thành mã nguồn
    • Thiếu sự linh hoạt cần thiết cho prototyping nhanh
  • API thay đổi thường xuyên: nhóm dần mệt mỏi với tính thiếu ổn định của API do Bevy phát triển quá nhanh và các lỗi hồi quy phát sinh sau mỗi lần cập nhật
  • Thiếu hỗ trợ cho việc học với AI: C# và Unity có nền tảng học với AI tốt hơn, trong khi Rust và Bevy thiếu thông tin nên làm giảm năng suất
  • Giới hạn modding: nhóm cho rằng trong môi trường Rust/Bevy, việc đảm bảo scripting ổn định và tính tương thích ABI là rất khó

Quyết định chuyển hướng: thử nghiệm với Unity

  • So sánh và phân tích Unreal, Unity, Godot, tiếp tục dùng Bevy, và tự phát triển engine riêng
  • Unity đạt điểm cao nhất về khả năng học, năng suất, mức độ dễ cộng tác và khả năng modding

Thử nghiệm 10%

  • Kiểm thử trong vòng 3 tuần với 3 hạng mục cốt lõi: tilemap, nhân vật (Spine), xây dựng UI
  • Kết quả là hoàn thành cả 3 bài toán chỉ trong 3 ngày, từ đó quyết định chuyển hướng

Quá trình port và kết quả

  • Tái triển khai toàn bộ hệ thống và nội dung sang Unity trong 6 tuần
  • Trải nghiệm giảm lượng mã, loại bỏ boilerplate, tăng tốc độ phát triển
  • Cải thiện khả năng học với AI và có thể tích cực tận dụng các công cụ trong hệ sinh thái Unity như AStar Pathfinding

Cuộc sống sau đó

  • Architect of Ruin hiện đang được phát triển trên nền tảng Unity, đồng thời duy trì khả năng phản ánh ý tưởng nhanh và năng suất cao
  • Dù vẫn giữ sự tôn trọng sâu sắc với Rust và Bevy, nhóm nhấn mạnh rằng cần có lựa chọn phù hợp với dự án
  • Trong tương lai, nhóm dự định chia sẻ thêm về chi tiết triển khai trên Unity và kinh nghiệm port

Kết luận

  • Nhóm thừa nhận đã không đánh giá các lựa chọn một cách công bằng ngay từ đầu
  • Dù đã đầu tư thời gian để đổi hướng, cuối cùng họ đánh giá rằng mình đã tiết kiệm được nhiều thời gian hơn
  • Nhóm nhận ra rằng để hiện thực hóa tầm nhìn phát triển, đánh giá thực tế vượt lên trên bản năng là điều quan trọng

3 bình luận

 
aer0700 2025-04-30

Chắc là có đâu đó một engine GUI dùng Rust như ngôn ngữ script, nhưng tôi không rõ có cái nào được dùng ở mức production hay không. Thỉnh thoảng cũng có những bài kiểu như ca thất bại? khi làm game bằng Rust xuất hiện, mà ừm... việc có các ca thất bại được đăng lên thì cũng dễ hiểu thôi, nhưng cảm giác là lại không nghe nhiều về các ca thành công, nên cũng hơi lấn cấn. Chắc hẳn vẫn có những người đang dùng rất tốt ở đâu đó chứ.

 
qwqwhs 2025-04-30

Hay là ngược lại, vì nghĩ rằng nếu dùng tốt thì ai cũng viết được đến mức này nên họ không đăng lên chăng?

 
GN⁺ 2025-04-29
Ý kiến Hacker News
  • Lại có thêm một trường hợp thất bại khi thực hiện dự án game bằng Rust. Điều này thật đáng tiếc

    • Đã phát triển một client metaverse bằng Rust gần 5 năm nay, nhưng mất quá nhiều thời gian
    • Người khác đã thực hiện một dự án tương tự bằng C#/Unity trong chưa đến 2 năm
    • Cộng đồng người dùng phát triển game 3D bằng Rust rất nhỏ
    • Chưa có trường hợp nào phát triển tựa game AAA bằng Rust, cũng không có ai giải quyết được các vấn đề hiệu năng
    • Stack đang dùng là Rend3/Egui/Winit/Wgpu/Vulkan, và ngoài Vulkan ra thì cái nào cũng có nhiều lỗi
    • Có quá nhiều crate khác nhau muốn nắm quyền sở hữu event loop
    • Nhiều crate bị refactor vài tháng một lần, khiến API thường xuyên bị phá vỡ
    • Việc dereference trong Rust rất khó
    • Rust cần một cách nhất quán cho single owner và dereference
    • Trait trong Rust không phải là object, nên không phù hợp để xây dựng cấu trúc phân cấp đối tượng
  • Nghe như một bài học hay về lý do các game engine thương mại đã thống trị việc phát triển game

    • Có rất nhiều việc phải làm để tạo ra một trò chơi, nhưng phần lớn đều là những vấn đề đã được giải quyết từ trước
  • Tôi thích Rust như một sự thay thế cho C++, nhưng nghĩ rằng C++ không phù hợp với phần lớn dự án

    • Có vẻ nhiều người chọn Rust vì nghĩ rằng nó hiệu quả hơn
  • Phát triển game bằng Rust giống như khai phá miền viễn biên, đòi hỏi rất nhiều công sức

    • Rust vẫn chưa sẵn sàng
  • Tôi thích Rust, nhưng rất khó lặp lại nhanh

    • Đã thử dùng Bevy nhưng rồi quay lại Godot
  • Đã chuyển từ Rust sang Go trong dự án, và tốc độ lặp lại nhanh hơn

    • Mã nguồn dễ vỡ hơn, nhưng xét theo tính chất của dự án thì đây là lựa chọn đúng
  • Mức độ biến động cao của hệ sinh thái Rust là một nhược điểm không ngờ tới

    • Crate thường xuyên bị bỏ dở, và tôi nghĩ điều này là do những người muốn chủ yếu dùng riêng Rust
  • Một nhà phát triển xây dựng game engine bằng C và phát triển game bằng Lua

    • Có sự tách biệt rõ ràng giữa game engine và game
    • Trò chơi có tên 'Sapiens' đã được phát hành thành công trên Steam
  • Làm việc với Rust gần như lúc nào cũng khó hơn

    • Đây là ý kiến dựa trên trải nghiệm cá nhân
  • Mục tiêu của dự án là để người anh/em không biết lập trình cũng có thể đóng góp

    • Cảm giác như luôn phải tiếp tục nâng cấp lên phiên bản mới nhất
    • Các studio dùng Unity thường không nâng cấp phiên bản thường xuyên trừ khi một lỗi cụ thể nào đó được sửa