- Tác giả đã viết về việc phát triển game 3D bằng Rust cách đây 1 năm, và đây là ghi nhận sau khi theo dõi diễn biến trong suốt một năm đó
- Vẫn đang sử dụng stack đồ họa Rend3, WGPU, Vulkan, và hiện tại nó hoạt động khá tốt
- Trong năm 2024, một số dự án game lớn phát triển bằng Rust đã bị dừng lại
- Có những đội ngũ cảm thấy các ràng buộc về quyền sở hữu (ownership) là quá nặng nề
- Cũng có những đội ngũ phàn nàn về thời gian biên dịch và các vấn đề tương tự
- arewegameyet.rs ít được cập nhật từ sau tháng 7/2024, nên thông tin liên quan có xu hướng bị chậm
- Rend3 đã ngừng phát triển, nên tác giả đang tự duy trì bản fork rend3-hp
- Đã cập nhật để phù hợp với các phiên bản mới của wgpu, winit, egui và sửa một lỗi race condition cũ
- Vẫn còn vấn đề nghẽn cổ chai ở CPU khi cố tận dụng tối đa hiệu năng GPU. Trên NVidia 3070, CPU đã thiếu thời gian ngay cả khi mức tải GPU chỉ ở 25%
- Cần bindless của Vulkan và nhiều hàng đợi Vulkan, và có khả năng wgpu sẽ hỗ trợ chúng trong năm 2025
- Nếu không cần hiệu năng tối đa thì stack này vẫn hoạt động ổn
- Từng có các dự án rendering khác như Orbit, Renderling, nhưng không được duy trì tích cực
- Renderling có phần hứa hẹn hơn, nhưng vẫn chưa sẵn sàng để sử dụng và hiện chỉ có một nhà phát triển
- Khi làm 3D bằng Rust, việc tự duy trì phần thấp của stack đồ họa tiêu tốn rất nhiều thời gian
- Mỗi khi winit, wgpu, egui thay đổi API thì phải cập nhật theo và tự sửa toàn bộ chỗ bị hỏng
- Chỉ cần một thành phần thay đổi thì các thành phần khác có thể mất 1-2 tháng mới theo kịp
- Đây là vấn đề thường gặp trong hệ sinh thái Rust: nếu dùng các cách cấp phát riêng thay vì cú pháp Rust an toàn, việc tìm lỗi trong môi trường đa luồng sẽ trở nên khó khăn
- Giới hạn của cấu trúc rendering
- Phần lớn renderer không quản lý riêng thông tin không gian, mà thường dùng cấu trúc thực hiện tính toán trên mọi vật thể cho từng nguồn sáng (O(N*M))
- Để xử lý các cảnh lớn thì cần khái niệm phân vùng không gian (scene graph), nhưng khi đó lại vướng vào việc phải tiến tới cấu trúc cấp game engine (ví dụ: Bevy)
- Bevy dùng hệ thống ECS riêng, không tận dụng nhiều mô hình ownership của Rust, và có nhược điểm là áp đặt cách làm của Bevy
- Kết luận, làm các tác vụ 3D phức tạp bằng Rust là khả thi, nhưng đòi hỏi rất nhiều công sức
9 bình luận
Dù có các quy tắc sở hữu mang tính hạn chế, vẫn có nhiều cấu trúc dữ liệu để lách qua chúng nên tạo cảm giác khá chắp vá: Đúng vậy, chính là thế này đây. Bảo là an toàn mà lại cần
unsafe, bảo là bất biến mà rồi cũng thành có thể biến đổi, đúng là lộn xộn. Đáng đời. Rust không thể nào thành công được.Thế còn game 2D thì sao?
Phải có một game engine dựa trên Rust mới được..
Nếu phát triển game mà không dùng engine, có lẽ dù dùng ngôn ngữ nào thì cũng sẽ cho cảm giác như thế này nhỉ.. hehe
Rust phù hợp để tạo ra các engine, core, framework vững chắc,
nhưng nếu dùng để xây dựng tầng ứng dụng thì tôi không muốn khuyến nghị lắm.
Nhìn biệt danh là thấy độ tin cậy tăng lên hẳn.
Tôi cũng từng làm việc một thời gian ngắn với Rust và đã tìm hiểu đôi chút vì định xuất bản một cuốn sách, nhưng dạo này cảm giác niềm tin của tôi đang dần giảm đi.
Tôi luôn tin chắc rằng Simple is best, nhưng lại có cảm giác như đang nhìn vào một ngôn ngữ đi theo hướng ngược lại.
Dù sao thì vì nó đã được đưa vào kernel rồi, nên có lẽ cũng không đến mức sẽ biến mất.
Ý kiến Hacker News
Tiny Glade là một ví dụ về trò chơi ấn tượng được viết bằng Rust
Đang học Rust và sắp gia nhập một nhóm mới
Lập trình viên C++ có thể ấn tượng với pattern matching và kiểu enum, nhưng với lập trình viên OCaml/Haskell thì không quá nổi bật
C++ khó và phức tạp, nhưng việc có thể dùng một ngôn ngữ hiện đại hơn là điều mới mẻ
Ngạc nhiên vì Godot không được nhắc đến
Muốn làm lại engine ray-caster 2.5D của mình bằng Rust