Ogre 13.6.0 was just released. This is the last scheduled release for the 13.x series and contains some significant bug-fixes and feature additions, which we will discuss in more detail below. We recommend all users of Ogre 13.x to update.

Generally speaking, this release brings much better lighting/ shadowing due to several bugfixes that previously degraded results.

For a full overview of the changes, see the changelog.

RTSS Terrain

Already mentioned in the 13.5 announcement, this has now finally landed. Thanks to the preliminary testing by the rigs-of-rods guys, the remaining bugs have been ironed out. This feature allows to easily enable multiple lights or switch to PBR equations altogether.

RTSS based Terrain with multiple lights

Additionally, the layer normal blending equations have been improved and now multi-layer terrain has improved lighting.

Improved LiSPSM Quality

Here, I finally found the bug that significantly reduced the shadowmap resolution, when using LiSPSM (see above). This bug also affected PSSM, which internally uses LiSPSM.

Additionally, I could add shadow pancaking for directional lights. This is a feature also present in Ogre Next, that improves depth shadow z-resolution and thus reduces shadow acne.

Shadow pancaking is automatically used on RenderSystems that support depth clamping, like GL3+, D3D11 and Vulkan.

Image Codec implemented in Rust

To improve the security of the Ogre codebase, I looked into using the Rust language. The most critical part of Ogre is probably texture loading, as it has to deal with a plethora of different image formats. As astart, I have implemented a new Codec_RsImage.
Image codec are plugins since Ogre 1.11, this means that the Rust part is completely optional and you do not have to update your build environment, if you dont need it.

The new Codec internally uses image-rs to load the various formats, that are all implemented in Rust and thus provide memory safety.
Unfortunately, currently the Rust implementation is slower than the highly optimized C libs that have been around for decades. However, as Firefox is using image-rs internally too, I assume performance will catch-up over time.

UAV support in Ogre Script and compute shaders in D3D11

The texture shows the grid of GPU thread-groups that are generating it

Complementing GL3+, D3D11 now supports compute shaders as well. The respective Sample in the SampleBrowser will show you how to do it.

Additionally, that sample now got considerably simpler too, as you can now specify in the ogre script that you want to use a texture for writing in the compute shader, as

texture_unit {
   texture …
   unordered_access_mip 0
}

This will bind mipmap level 0, at the binding point of the texture_unit order UAV access (D3D11 jargon) or image load/ store (GL jargon).

IBL support added to the RTSS

Now the RTSS can add indirect, image based lighting (IBL) to PBR materials. To enable it via material scripts, you have to specify

rtshader_system {
   lighting_stage metal_roughness
   image_based_lighting texture lightroom_14b_ibl.ktx
}

Note, that it requires the metal_roughness parametrization to work. For best results, generate the cubemaps using cmgen tool of the Filament project.

While at it, the cubemap support was generally improved. Ogre now can correctly load the HDR .ktx files generated by cmgen (GL3+, D3D11 only) and also use the slightly more sane _px, _nx, _py, _ny .. layer suffixes in additon to the _fr, _bk, _lf .. suffixes it traditionally used.