- Setahun lalu saya menulis tentang pengembangan game 3D dengan Rust, dan ini adalah catatan setelah mengikuti perkembangannya selama satu tahun
- Masih menggunakan stack grafis Rend3, WGPU, dan Vulkan, dan saat ini semuanya bekerja cukup baik
- Pada 2024, beberapa proyek game besar yang dikembangkan dengan Rust dihentikan
- Ada tim yang merasa terbebani oleh batasan ownership
- Ada juga tim yang menyampaikan keluhan karena waktu kompilasi dan alasan lainnya
- arewegameyet.rs jarang diperbarui sejak Juli 2024, sehingga informasi terkait cenderung tertinggal
- Rend3 sudah tidak lagi dikembangkan, sehingga penulis memelihara fork sendiri bernama rend3-hp
- Sudah diperbarui agar sesuai dengan versi terbaru wgpu, winit, egui, dan lain-lain, serta memperbaiki bug race condition lama
- Saat performa GPU didorong semaksimal mungkin, masalah bottleneck CPU masih terjadi. Pada NVidia 3070, waktu CPU menjadi tidak mencukupi saat beban GPU berada di 25%
- Dibutuhkan bindless Vulkan dan beberapa queue Vulkan, dan ada kemungkinan wgpu akan mendukung ini pada 2025
- Jika tidak membutuhkan performa puncak, stack ini bekerja dengan cukup layak
- Ada proyek rendering lain seperti Orbit dan Renderling, tetapi tidak dipelihara secara aktif
- Renderling masih terlihat paling menjanjikan, tetapi belum siap digunakan, dan pengembangnya hanya satu orang
- Saat mengerjakan 3D dengan Rust, banyak waktu habis untuk memelihara sendiri lapisan bawah stack grafis
- Setiap kali API winit, wgpu, egui, dan lainnya berubah, semuanya harus disesuaikan dan semua bagian yang rusak harus diperbaiki
- Saat satu komponen berubah, komponen lain butuh 1-2 bulan untuk menyusul
- Ini adalah masalah yang sering muncul di ekosistem Rust: ketika memakai skema alokasi buatan sendiri alih-alih sintaks Rust yang aman, bug di lingkungan multithread menjadi sulit ditemukan
- Keterbatasan struktur rendering
- Banyak renderer tidak mengelola informasi spasial secara terpisah, dan sering memakai struktur yang menghitung semua objek untuk setiap sumber cahaya (O(N*M))
- Untuk menangani scene berskala besar, dibutuhkan konsep pembagian ruang (scene graph), dan ini kemudian berbenturan dengan kebutuhan akan struktur setingkat game engine (misalnya Bevy)
- Bevy tidak banyak memanfaatkan model ownership Rust karena menggunakan sistem ECS-nya sendiri, dan memiliki kelemahan karena memaksakan pendekatan khas Bevy
- Kesimpulannya, melakukan pekerjaan 3D yang kompleks dengan Rust itu memungkinkan, tetapi membutuhkan upaya besar
9 komentar
Meski ada aturan kepemilikan yang membatasi, ada berbagai struktur data untuk mengakalinya sehingga terasa agak seperti solusi tambal sulam: betul, ini dia masalahnya. Katanya aman tapi tetap butuh
unsafe, katanya immutable tapi malah bisa jadi mutable, benar-benar berantakan. Rasain. Rust tidak mungkin bisa berhasil.Bagaimana dengan game 2D?
Harus ada game engine berbasis Rust..
Kalau mengembangkan game tanpa game engine, rasanya akan seperti ini apa pun bahasa yang dipakai.. hehe
Rust untuk pengembangan game: kondisi setelah 1 tahun
Rust cocok untuk membuat engine, core, framework, dan sejenisnya yang tangguh,
namun
saya tidak begitu ingin merekomendasikannya untuk membangun lapisan aplikasi.
Melihat nama penggunanya, tingkat kepercayaannya jadi meningkat.
Saya juga sempat bekerja singkat dengan Rust dan melakukan sedikit riset karena ingin menerbitkan buku, tetapi belakangan ini rasanya keyakinan saya makin berkurang.
Saya sangat percaya bahwa Simple is best, tetapi rasanya seperti melihat bahasa yang bertolak belakang.
Bagaimanapun, karena sudah masuk ke kernel, sepertinya bahasa ini tidak akan menghilang.
Opini Hacker News
Tiny Glade adalah contoh game mengesankan yang ditulis dengan Rust
Sedang belajar Rust dan akan bergabung dengan tim baru
Programmer C++ mungkin akan terkesan dengan pattern matching dan tipe enum, tetapi bagi programmer OCaml/Haskell hal itu tidak terlalu mengesankan
C++ sulit dan kompleks, tetapi rasanya segar karena bisa memakai bahasa yang lebih modern
Terkejut karena Godot tidak disebutkan
Ingin membuat ulang engine Ray-caster 2.5D miliknya dalam Rust