I have been playing around with Urho3D and engine development for years.
While I have never released any “big” games, I am still trying to make one.
“rbfx” is a meme name of Urho3D fork I personally use when doing anything game/engine-related.
rbfx has reached the point when I can declare an “intermediate release”: the core idea is implemented and the framework is usable. However, rbfx does not have a stable release yet, so there are bugs, there are missing features, and there would be breaking changes.
Links
Discord server with all relevant discussion: Urho3D
GitHub page: GitHub - rbfx/rbfx: Lightweight Game Engine/Framework in C++17 with WYSIWYG Editor. Experimental C# bindings.
WIP Documentation: https://rbfx.github.io/
Documentation contains a bit more of project philosophy, check it out if you care.
Sample project: GitHub - rbfx/sample-project: Simple example project that uses the Framework as submodule
Sample project on itch[dot]io: Sample Project for Rebel Fork Framework by eugeneko
So, why this project exists?
-
I really like some aspects of original Urho engine and I want to keep them: wide platform support, relatively simple but customizable API, compact engine size.
-
I wanted to change other aspects of Urho engine, and it was not possible without excessive backward compatibility breakage. That thread few years ago clearly showed me that Urho community didn’t want this kind of changes.
-
The goal is to replace outdated or misdesigned parts of Urho with reasonable effort and without too much feature bloat, and to reduce iteration times for project development.
-
While original Urho offers only “engine” itself, rbfx attempts to consider entire development pipeline: from assets to publishing.
What are the changes?
Well… there are quite a lot of them, and I am too lazy to list them all. Let’s talk about big ones.
-
Lua and AS are removed. Which is a deal-breaker for some, but it was necessary to speed up engine development and make big changes.
-
First-class Editor application in C++:
- Multiple tabs and windows;
- Flexible architecture;
- Game can be played in Editor “almost as-is”;
- Automatic asset importing;
- DPI-aware;
-
AssImp is removed. Instead, glTF standard is supported. There are a couple of minor quirks due to engine architecture, but almost all standard glTF are 100% correctly imported, and the rest is imported with minor differences. Blend and FBX formats are also partially supported via extensions.
-
Renderer overhaul:
- Unified shaders for DX and OpenGL;
- Shaders are almost completely rewritten;
- XML Render Paths and postprocessing are removed. Replacement on C++ side is WIP.
- Physically-based rendering (actually working and correctly-looking);
- Spherical harmonics for ambient lighting;
- Light mapper and light probe baker;
- Reflection probes with blending;
- Compute shaders;
- Graph-based particle system;
-
XML permutation hell is removed, we only need a dozen Techniques now;
-
Networking rewrite:
- Scene replication from Urho is removed due to its clumsiness.
- New networking requires more manual work, but it is much more flexible, reliable and has lower connection requirements.
-
Tweaks and changes too numerous to list:
- A lot of bugs in renderer and animation are fixed (like this one);
- Universal animation system. AnimationController can animate everything, not just bones.
- Microphone support;
-
Some Urho parts are replaced with 3rdParty libraries.
- EASTL for containers, fmt for string profiling, spdlog for logging, etc…
- UI is replaced with Dear ImGUI (for Editor and tools) and with RmlUI (for in-game UI, still WIP)
-
Experimental C# bindings are out there…
- … but I don’t have a clue about its state, not using it.
Plans for the future
-
VR/XR support;
-
Vulkan/Metal/DX12 support via middleware. Diligent? TheForge?
-
Improved Inverse Kinematics;
-
Polishing RmlUI integration, more samples;
-
Replace Bullet Physics. PhysX? Jolt?
-
Add scripting in some form. Lua? JS? Something else? Discussion is open.
-
Polishing renderer. Custom postprocessing. Custom render pipelines w/o forking. Better SSAO? SSR? Terrain? Foliage?
-
Improving asset and publishing pipeline. Docker images?
-
Actually do some games
Conclusion
I create this topic mostly to showcase this project, to gather feedback, and to post updates. Discussion is welcome, but I recommend to use Discord or GitHub for long technical discussions.
PS: Shout out to @rku, @glebedev and @JSandusky, who contributed a lot to this project! Also, ping me if I missed anything important in this post.