Ogre 14.3.0 was just released. This release contains some significant bug-fixes and feature additions, which we will discuss in more detail below. We recommend all users of the 14.x branch to update.
For a full overview of the changes, see the changelog.
Table of Contents
- 3D Gaussian Splatting and VET_HALF support
- Mesh Shader Support
- Wayland Support on Linux
- HighPy module for Python
3D Gaussian Splatting and VET_HALF support
Ogre 14.3 now comes with an example that shows how to render 3D gaussian splats alongside with normal mesh data.
To efficiently store the splats they were converted from the original .ply files to native ogre .mesh files which reduced the storage by 10x. See my blog post for the details of the procedure.
To achieve this reduction the new VET_HALFx
types were introduced in Ogre, which allow storing vertex attributes using 16bit floating points.
As the most useful VET_HALF3
type is neither supported by D3D9 nor by D3D11, Ogre will transparently pad it to VET_HALF4
on loading. This approach maintains reduced file sizes on these render systems with a slight increase in loading time. It’s worth mentioning that all other rendering systems, such as Metal and Vulkan, do support VET_HALF3
.
Mesh Shader Support
Initial mesh shader support has been introduced in Ogre. They are supported on GL3Plus via GL_NV_mesh_shader
and on Vulkan via VK_EXT_mesh_shader
. Although the loading and processing of these shaders is now supported in the OgreMain component, the rest of the pipeline still needs to be developed in upcoming releases. Specifically, the generation of the meshlet structure, which is essential for the effectiveness of mesh shaders, is not yet available. Storing this structure will likely require an update to the .mesh format, which must be handled carefully to ensure backward compatibility.
Wayland Support on Linux
Thanks to the contributions of “Joakim Haugen”, “benjaminvdh” and the work of yours truly, all OpenGL and the Vulkan RenderSystems can now be compiled on Linux without any X11 dependencies and will use the Wayland display server instead. This is particularly beneficial for running Ogre on embedded devices or through WSL.
If you use OgreBites, this feature is automatically available by setting the environment variable SDL_VIDEODRIVER=wayland
to instruct SDL to use Wayland. There is also initial support for OgreBitesQt, but Wayland interoperability with Qt is still under development and not fully functional with Ogre yet.
HighPy module for Python
The new HighPy module enables Ogre to function as a lightweight Python renderer. As the name implies, this module offers a high-level API, allowing users to start using Ogre without the need to read the documentation.
If you want to render a mesh it is just:
import Ogre.HighPy as ohi
ohi.window_create("ohi_world", (800, 600))
ohi.mesh_show("ohi_world", "DamagedHelmet.glb", position=(0, 0, -3))
while ohi.window_draw("ohi_world") != 27: pass
This will load the gltf2 file using the Assimp Plugin and display it using our Filament-based PBR rendering pipeline.
want to add a GUI to that? Add
import Ogre.ImGui as ImGui
ohi.window_use_imgui("ohi_world", ImGui.ShowDemoWindow)
want to display an background image?
ohi.imshow("ohi_world", "image.png")
This will use the secure image-rs rust plugin to load most image formats.
Then there is Physics with the Bullet component and headless EGL rendering on Linux..
Another improvement to the Python bindings is that Ogre now works better with Python threading. Previously we would just hog the GIL preventing any other (python) thread to run. Now you can allow python threads while waiting for vsync by calling Ogre.Root.getSingleton().allowPyThread()
Finally, the Python modules are now part of the official Docs.