- 1 साल पहले मैंने Rust में 3D गेम डेवलप करने पर एक लेख लिखा था, और उसके बाद 1 साल तक इसके रुझान को देखते हुए यह फॉलो-अप लिखा है
- अब भी Rend3, WGPU, Vulkan graphics stack का उपयोग कर रहा हूँ, और फिलहाल यह काफ़ी अच्छी तरह काम कर रहा है
- 2024 में Rust में चल रहे कुछ बड़े गेम प्रोजेक्ट बंद हो गए
- कुछ टीमों को ownership constraints बोझिल लगे
- कुछ टीमों ने compile time आदि को लेकर असंतोष जताया
- arewegameyet.rs को जुलाई 2024 के बाद से बहुत कम अपडेट मिला है, इसलिए संबंधित जानकारी कुछ पीछे छूटती हुई दिखती है
- Rend3 का डेवलपमेंट बंद हो गया, इसलिए मैं स्वयं fork किए गए rend3-hp को maintain कर रहा हूँ
- इसे wgpu, winit, egui आदि के latest versions के अनुसार अपडेट किया गया है, और पुराने race condition bug को भी ठीक किया गया है
- GPU performance को अधिकतम तक खींचने पर अब भी CPU bottleneck की समस्या आती है। NVidia 3070 पर GPU load 25% होने पर ही CPU time कम पड़ने लगता है
- Vulkan के bindless और कई Vulkan queues की ज़रूरत है, और संभव है कि 2025 में wgpu इसका समर्थन करे
- अगर maximum performance की आवश्यकता नहीं है, तो यह stack पर्याप्त रूप से काम करता है
- Orbit, Renderling जैसे अन्य rendering projects भी थे, लेकिन उनका सक्रिय maintenance नहीं हो रहा है
- Renderling में कुछ संभावना है, लेकिन अभी यह उपयोग के लिए तैयार नहीं है, और इसका केवल एक ही developer है
- Rust में 3D काम करते समय, graphics stack की निचली परतों को सीधे maintain करने में बहुत समय लगता है
- winit, wgpu, egui आदि का API बदलते ही हर बार उसके अनुसार ढलना पड़ता है, और टूटे हुए हिस्सों को सब ठीक करना पड़ता है
- एक चीज़ बदलने पर बाकी चीज़ों को साथ आने में 1-2 महीने लग जाते हैं
- Rust ecosystem में आम तौर पर दिखने वाली समस्या यह है कि safe Rust syntax के बजाय अपनी allocation scheme इस्तेमाल करने पर multi-threading bugs ढूँढना कठिन हो जाता है
- rendering architecture की सीमाएँ
- अधिकांश renderers spatial information को अलग से manage नहीं करते, और प्रति light सभी objects पर computation करने वाली संरचना (O(N*M)) बहुत प्रचलित है
- बड़े scenes को संभालने के लिए spatial partitioning (scene graph) जैसी अवधारणा चाहिए, और इससे टकराव यह है कि फिर game engine स्तर की संरचना (जैसे Bevy) की ओर जाना पड़ता है
- Bevy अपने ECS system के कारण Rust के ownership model का बहुत अधिक उपयोग नहीं करता, और Bevy का अपना तरीका अपनाने के लिए मजबूर करता है
- निष्कर्षतः, Rust में जटिल 3D काम करना संभव है, लेकिन इसके लिए बहुत अधिक मेहनत चाहिए
9 टिप्पणियां
स्वामित्व के नियम सीमित हैं, लेकिन उन्हें बायपास करने के लिए तरह-तरह के data structures हैं, इसलिए यह थोड़ा अस्थायी जुगाड़ जैसा लगता है: बिल्कुल, यही तो है। कहते हैं safe है, फिर unsafe चाहिए, कहते हैं immutable है, फिर mutable भी हो जाता है, पूरा गड़बड़झाला है। अच्छा हुआ। Rust सफल हो ही नहीं सकता।
2D गेम का क्या?
Rust-आधारित गेम इंजन आना चाहिए..
गेम इंजन के बिना गेम डेवलपमेंट करें तो, शायद किसी भी भाषा में कुछ ऐसा ही महसूस होगा..हह
Rust मज़बूत engine, core, framework आदि बनाने के लिए तो उपयुक्त है, लेकिन
application layer बनाने के लिए इतनी सिफारिश नहीं करना चाहूँगा।
यूज़रनेम देखकर भरोसा और बढ़ जाता है।
मैंने भी Rust में थोड़े समय के लिए काम किया था और किताब लिखने के बारे में भी कुछ रिसर्च की थी, लेकिन आजकल मेरा भरोसा धीरे-धीरे कम होता हुआ लग रहा है.
मैं
Simple is bestपर मज़बूती से विश्वास करता हूँ, लेकिन इसे देखते हुए लगता है जैसे मैं इसके उलट किसी भाषा को देख रहा हूँ.खैर, अब जबकि यह kernel में भी शामिल हो चुका है, इसलिए यह गायब हो जाएगा ऐसा नहीं लगता.
Hacker News की राय
Tiny Glade, Rust में लिखे गए एक प्रभावशाली गेम का उदाहरण है
मैं Rust सीख रहा हूँ और जल्द ही एक नई टीम में शामिल होने वाला हूँ
pattern matching और enum types से C++ प्रोग्रामर प्रभावित हो सकते हैं, लेकिन OCaml/Haskell प्रोग्रामरों के लिए यह उतना प्रभावशाली नहीं है
C++ कठिन और जटिल है, लेकिन अधिक आधुनिक भाषा इस्तेमाल कर पाना ताज़गीभरा लगता है
यह देखकर हैरानी हुई कि Godot का ज़िक्र नहीं किया गया
मैं अपने 2.5D Ray-caster engine को Rust में फिर से बनाना चाहता हूँ