Hi everyone,
I just released Project Möbius, a free 3D Shoot 'em up game, probably best classified as a rail shooter. You can watch a trailer and download the game here: https://cwulnil.itch.io/project-mobius.
It currently works in Windows but only for some Linux distributions and some versions of Mac.
For those who are interested, the game is written in Rust using my own 3D engine with the wgpu API.
Best,
Christian
Project Möbius: New free 3D Shoot 'em up
Re: Project Möbius: New free 3D Shoot 'em up
Cool, sim-style aircraft pitch and roll in a rail shooter is a nicely original idea, though aiming without a reticle looks like it could be tricky. Pleasing Minteresque abstract style.
Props for not only building your own tech - a respectable move - but also avoiding the infinite these tools aren't good enough vortex and managing to ship something with it
Spent some time in the Rust / GPU ecosystem myself, and found it quite pleasant to work with; didn't love the compile times, but static analysis is so helpful for getting things done. The trip-o-tunnel visuals look very smooth - are you doing those with screen-space shaders, or a traditional shaded geometry approach?
Props for not only building your own tech - a respectable move - but also avoiding the infinite these tools aren't good enough vortex and managing to ship something with it

Spent some time in the Rust / GPU ecosystem myself, and found it quite pleasant to work with; didn't love the compile times, but static analysis is so helpful for getting things done. The trip-o-tunnel visuals look very smooth - are you doing those with screen-space shaders, or a traditional shaded geometry approach?
Re: Project Möbius: New free 3D Shoot 'em up
Thanks a lot for the kind words!
Yes, aiming was a bit tricky in the early stages of development and I was thinking of adding a reticle. However, I instead ended up making an auto-aim system which only kicks in if you aim roughly at the enemy. This means that your forward shots are not always parallel to your aircraft but can deviate by a few degrees due to the auto aim system helping you out.
C++ was always my favourite language until I started in Rust. Slow compile time is the biggest downside but I feel I am much more efficient as it is harder to make bugs due to the borrow checker. I also love the functional programming parts of Rust.
By "screen space shader", do you mean a shader that makes post-processing effects like bloom? If so, I don't do that although it could maybe be something for a future version or for my next 3D game. I started out in OpenGL and learnt it through learnopengl.com before switching to Vulkan and then to wgpu, so I follow the techniques from learnopengl fairly closely. I also use Perlin and Simplex noise to generate some of the tunnel wall surfaces and texture color modifiers, including transparency.
Yes, aiming was a bit tricky in the early stages of development and I was thinking of adding a reticle. However, I instead ended up making an auto-aim system which only kicks in if you aim roughly at the enemy. This means that your forward shots are not always parallel to your aircraft but can deviate by a few degrees due to the auto aim system helping you out.
C++ was always my favourite language until I started in Rust. Slow compile time is the biggest downside but I feel I am much more efficient as it is harder to make bugs due to the borrow checker. I also love the functional programming parts of Rust.
By "screen space shader", do you mean a shader that makes post-processing effects like bloom? If so, I don't do that although it could maybe be something for a future version or for my next 3D game. I started out in OpenGL and learnt it through learnopengl.com before switching to Vulkan and then to wgpu, so I follow the techniques from learnopengl fairly closely. I also use Perlin and Simplex noise to generate some of the tunnel wall surfaces and texture color modifiers, including transparency.
Re: Project Möbius: New free 3D Shoot 'em up
Autoaim is a nice solve; avoids giving pinpoint precision the spotlight as per modern FPS. I fiddled with trying to directly 3D-ify traditional shmup mechanics at one point, and fighting back the just third-person shooting factor was quite tricky.
The functional programming side is amazing - Rust led me down that path a few years back and I've been chasing the rabbit ever since
ended up porting a chunk of Haskell's standard library to typenum / frunk -style trait encoding at one point, and writing a 2D software renderer that ran entirely in the compiler. Terribly impractical; rustc wasn't designed for that kind of abuse, so it took ~10mins to 'build' a trivial 128x128 test image, but it was fun and instructive.
It's very nice for trippy demoscene stuff - fractals, or other infinitely large / infinitely detailed structures - though has a higher performance floor than traditional rendering since GPUs are so heavily optimized around triangle rasterization.
If you've an interest in procedural graphics, Inigo Quilez is a goldmine. His work on distance fields is fascinating - makes me wish there was a 'Shader Rust' to supplant GLSL / HLSL with nice language features and compiler machinery!
Ha, same! I was always hard-line about using a performant systems language, but fell out of love with the C family after seeing just how much more a compiler / ecosystem can do to help.
The functional programming side is amazing - Rust led me down that path a few years back and I've been chasing the rabbit ever since

Sort of; it's similar insofar as using a full-screen quad to offload everything to the fragment shader. But instead of modifying an existing image, you produce one from scratch by encoding geometry as functions and visualizing them through raymarching or other analytical techniques; like this or this.
It's very nice for trippy demoscene stuff - fractals, or other infinitely large / infinitely detailed structures - though has a higher performance floor than traditional rendering since GPUs are so heavily optimized around triangle rasterization.
If you've an interest in procedural graphics, Inigo Quilez is a goldmine. His work on distance fields is fascinating - makes me wish there was a 'Shader Rust' to supplant GLSL / HLSL with nice language features and compiler machinery!
Re: Project Möbius: New free 3D Shoot 'em up
Sounds cool with your Rust experiments! I just returned to a long-term C++ game project that I took a break from while working on Project Möbius. I already miss Rust and I feel it's probably too much work converting the game from C++ to Rust. I better start another Rust side project soon 
If I understand your description of "screen space shader" correctly, you fill the screen with two triangles and then you let the fragment shader shoot out rays for each pixel and what each ray hits is a function of its pixel coordinates. Sounds like a really efficient way of doing certain 3D effects by avoiding, e.g., overdrawing/z-buffer and triangles (except for 2). Maybe something I will try out for a future project. Thanks for the links! I am going to check those out.
And thanks for linking to Inigo Quilez! It indeed looks like a goldmine and it seems very relevant for the final level of Project Möbius where I used some 3D fractals (Mandelbulb and variants of it) for the boss. I had to smooth them out in Blender and remove small disconnected parts of the fractals as the meshes looked ugly otherwise. It ended up working quite well but I think some of the techniques on that page could make it look much better and give a more accurate rendering of the fractals. Maybe something for a future update to the game.
Regarding GLSL/HLSL: for wgpu, I used WGSL which has a syntax somewhat similar to Rust (at least more so than GLSL) but probably it is far from what you'd like in "Shader Rust".

If I understand your description of "screen space shader" correctly, you fill the screen with two triangles and then you let the fragment shader shoot out rays for each pixel and what each ray hits is a function of its pixel coordinates. Sounds like a really efficient way of doing certain 3D effects by avoiding, e.g., overdrawing/z-buffer and triangles (except for 2). Maybe something I will try out for a future project. Thanks for the links! I am going to check those out.
And thanks for linking to Inigo Quilez! It indeed looks like a goldmine and it seems very relevant for the final level of Project Möbius where I used some 3D fractals (Mandelbulb and variants of it) for the boss. I had to smooth them out in Blender and remove small disconnected parts of the fractals as the meshes looked ugly otherwise. It ended up working quite well but I think some of the techniques on that page could make it look much better and give a more accurate rendering of the fractals. Maybe something for a future update to the game.
Regarding GLSL/HLSL: for wgpu, I used WGSL which has a syntax somewhat similar to Rust (at least more so than GLSL) but probably it is far from what you'd like in "Shader Rust".
Re: Project Möbius: New free 3D Shoot 'em up
Rewrite It In Rust is a serious problemkoolooz wrote: ↑Tue Dec 24, 2024 8:33 am Sounds cool with your Rust experiments! I just returned to a long-term C++ game project that I took a break from while working on Project Möbius. I already miss Rust and I feel it's probably too much work converting the game from C++ to Rust. I better start another Rust side project soon![]()

I was able to translate NukeyT's Mega Drive sound chip emulator to Rust quite quickly that way (with unit tests versus Tecnosoft soundtracks for equivalence!) but it took forever to clean up.
Yep - everything as a function of normalized screen coordinates, with uniforms and textures (or buffers, on a modern featureset) for parameters and instance data. More specialized renderers (like Dreams on PlayStation) skip the triangles entirely and use a compute shader to draw the fragments straight into a framebuffer, though you can also go the other way and use projected meshes as bounding shapes for raymarched objects, and potentially combine them with regular raster graphics given some careful projection matrix / depth buffer handling.koolooz wrote: ↑Tue Dec 24, 2024 8:33 am If I understand your description of "screen space shader" correctly, you fill the screen with two triangles and then you let the fragment shader shoot out rays for each pixel and what each ray hits is a function of its pixel coordinates. Sounds like a really efficient way of doing certain 3D effects by avoiding, e.g., overdrawing/z-buffer and triangles (except for 2). Maybe something I will try out for a future project. Thanks for the links! I am going to check those out.
Yeah, I fiddled a bit with WGSL. It's better than the alternatives, but is really just a nicer interface over the same limitations. Frustrates me to no end; all the big game engines end up inventing their own extensions to make shaders extensible or reusable, which inevitably hits the XKCD standards problem and makes writing libraries difficult unless you pick an ecosystem and stick to it.
There's a project called RustGPU that's valiantly attempting to compile Rust to SPIR-V, which would take **SL languages out of the picture and provide all the nice missing stuff like enums, interfaces, modules, packages, and so on. Though it wasn't really ready to use last time I experimented with it: easy to hit a compiler bug or missing feature, hack around it, and end up back at "I can't reuse this code".
-
- Posts: 9066
- Joined: Wed Jan 26, 2005 10:32 pm
Re: Project Möbius: New free 3D Shoot 'em up
The section of Project Mobius with the rotating openings to fly through reminds me of Mylstar's (aka Gottlieb) 1984 arcade laserdisc game, Us Vs. Them, that had your fightercraft going through gate openings in a "3rd-person from behind" viewpoint perspective.
Are there any plans to release Project Mobius on Steam and with Steam Deck support as well?
PC Engine Fan X! ^_~
Are there any plans to release Project Mobius on Steam and with Steam Deck support as well?
PC Engine Fan X! ^_~
Re: Project Möbius: New free 3D Shoot 'em up
It would be nice with such translators but I can imagine it must be a non-trivial problem if inheritance and other non-Rust mechanisms are used, at least if it should end up in a well-structured form. I actually decided to spend the next few weeks/months translating my C++ game to Rust. At least I know what to do for a whileLander wrote: ↑Tue Dec 24, 2024 6:50 pm Rewrite It In Rust is a serious problemthere are mechanical translators out there that work, but they require careful hand-tweaking to make sure the result is equivalent after you've adjusted naming conventions, refactored around traits, etc.
I was able to translate NukeyT's Mega Drive sound chip emulator to Rust quite quickly that way (with unit tests versus Tecnosoft soundtracks for equivalence!) but it took forever to clean up.

Oh, that sounds nice. I would love something like that. I will check it out and see if it has matured.Lander wrote: ↑Tue Dec 24, 2024 6:50 pm There's a project called RustGPU that's valiantly attempting to compile Rust to SPIR-V, which would take **SL languages out of the picture and provide all the nice missing stuff like enums, interfaces, modules, packages, and so on. Though it wasn't really ready to use last time I experimented with it: easy to hit a compiler bug or missing feature, hack around it, and end up back at "I can't reuse this code".
Re: Project Möbius: New free 3D Shoot 'em up
I never heard of that game but I will definitely check it out!PC Engine Fan X! wrote: ↑Thu Dec 26, 2024 2:26 pm The section of Project Mobius with the rotating openings to fly through reminds me of Mylstar's (aka Gottlieb) 1984 arcade laserdisc game, Us Vs. Them, that had your fightercraft going through gate openings in a "3rd-person from behind" viewpoint perspective.
No plans regarding Steam unfortunately. The main reason is that I need to pay Steam quite a lot in order to publish a game (at least the first game - I forgot the exact model) which feels wrong when I want the game to be free. But I will think about it since my game would likely get far more views/downloads on Steam. Getting it to work on Steam Deck will require tools that I currently don't have but I would love to make that happen (as well as smartphone support).PC Engine Fan X! wrote: ↑Thu Dec 26, 2024 2:26 pm Are there any plans to release Project Mobius on Steam and with Steam Deck support as well?
PC Engine Fan X! ^_~