The O3DE 24.09.1 Release is here! DOWNLOAD NOW
NEWS & BLOGS | Tech Blog

Unlocking New Levels of Performance: A Deep Dive into Our Latest Rendering Updates

Sidharth Moudgil
By Sidharth Moudgil | 17 Oct, 2024 | 10 min read

O3DE 24.09.0 is finally here and it’s packed with hundreds of bug fixes, enhanced mobile with a staggering performance boost of up to 400% on iOS and Android devices. These changes are driven by the invaluable feedback from our community.  We’ve refined performance, improved rendering quality, optimized memory usage, and enhanced the overall developer experience. We’ve also taken significant strides in our AR/VR implementation.

Over the next few weeks, we’ll be offering technical deep dives into some of these key features. We’re kicking things off with a detailed look at the rendering updates at the heart of these improvements.

What's New With Rendering?

Rendering quality is a crucial factor that impacts both the visual fidelity of a game and its performance, particularly on mobile platforms where resources are more limited. In this release, our team focused on two main goals: creating a new, highly optimized rendering pipeline for the mobile platforms as well as adding new features plus improvements that will lend themselves greatly towards VR content. The end result is a more efficient and an overall improvement in visual experience for both 2D and 3D games.

One of our render contributors, Sidharth Moudgil, delivered an insightful talk on the 24.09.0 render updates, offering a walkthrough of the improvements and enhancements included in this release. The session featured live demos showcasing many of the changes, highlighting optimizations and new features that significantly elevate the performance and visual quality of the engine.

Mobile Render Pipeline

Add support for an extremely performant mobile render pipeline built for tiled GPUs.

  1. Optimized BRDF for mobile – Added a new optimized BRDF for mobile as well as support for analytical Env IBL approximation.
  2. Added Gobo (i.e texture projection) support for simple spot lights.
  3. Added CPU culling for decals.
  4. Added shadow support for simple spotLights.
  5. Added support for new parameters: decal color and decal color factor. These params will  help modulate final calculated decal color.
  6. Added shader options for simple point lights, simple spot lights and decals. 
  7. Added support for cpu culling for simple point and simple punctual lights.
  8. Added support for deferred fog within the mobile pipeline.
  9. Added support for exponential and exponential squared fog modes. 
  10. Added support for shader options within PCF filtering for directional light shadows.
  11. Added Silhouette support to the mobile render pipeline. For more details about the Silhouette feature see the section about Rendering additions.
  12. Added particles support to the mobile render pipeline.
  13. Added support for postFX effects within the mobile pipeline
  14. Various half float optimizations for the mobile render pipeline.
  15. Add support for render scale and associated fixes for various mobile devices.
[/vc_column][/vc_row]

Rendering Additions/Improvements

Various rendering improvements for all the render pipelines and general Atom improvements.

  1. Initial scaffolding for Multi-GPU support within RHI and RPI layers of the engine. A lot of this work includes initial plumbing for Multi-GPU objects and initial support for basic GPU-GPU synchronization when transferring resources between devices.
  2. Silhouette Feature – Add support for Silhouette material type that, when applied to a mesh, draws an outline and filled-in silhouette in various modes: Always, XRay, Visible and Never.
  3. Added vertex color support  to BasePBR, StandardPBR, EnhancedPBR material types as well as material canvas.
  4. Added three new tone-mapping modes: AcesFitted, AcesFilmic and Filmic. Mobile render pipeline defaults to Filmic mode.
  5. Added android and ios registry settings for four tiers (low, medium, high, very high) of graphics quality.
  6. Added support for geometry shader within DX12 and Vulkan RHI backends.
  7. Added support for intersection shaders within DX12 and Vulkan RHI backends.
  8. Shadow culling outside view frustum – Improve performance by skipping unnecessary work for all shadows that won’t be visible. This is achieved by cpu culling of lights to limit the amount of lights that require processing.
  9. r_antiAliasing – Add support to switch anti-aliasing modes via CVar r_antiAliasing
  10. Add support for lighting channels – This feature introduces 3 channels for each kind of light and light-able objects. The objects and lights in the same channel are grouped and as a result the lights in the group affect the objects in the same group. The default behavior is all lights and objects in channel 0, so it should not change the current way to work with lighting, but it will provide a further option to grant the artists the flexibility to control which light shines on which objects.
  11. Enable and disable ContrastAdaptiveSharpening pass as well along with temporal anti aliasing (i.e TAA).
  12. Added support to allow passing customized derivatives to texture sampling functions.
  13. Added device attribute for the GPU model. This allows us to provide better device filtering for graphics quality tiers.
  14. Added per mesh shader option support when mesh instancing is enabled. This allows us to build optimized shader variants for a scene with mesh instancing.
  15. Added support for timeline semaphores within Vulkan RHI to help with low level synchronization.
  16. Added ability to disable creating a native window for game launchers for null renderers.

VR/OpenXR improvements

  1. I/O for OpenXR-compatible devices has been overhauled with new data driven APIs (Lua and C++) to manage Actions (I/O) and Spaces (world transform anchors).
  2. [Android + OpenXR] New Android Project Generator UI, integrated into the ProjectManager. Facilitates the generation of all the files required to compile and deploy a project on Android. Optionally, the Android project can be generated for Meta Quest  family of devices. Developer iteration times, on device, improved from ~1m:30s to less than 10s.

Atom Memory Optimizations

  1. Added support to dump information about loaded assets.
  2. Various Metal RHI related memory optimizations.
  3. Added support to release BufferAssets owned by ModelAssets. This allows us to release mesh related memory on the cpu once it is transferred to the gpu.
  4. Ring buffer support for RayTracing buffers.

Please don’t hesitate to share your thoughts, suggestions, or any issues you encounter on our Discord General Support Channel.

If you’re interested in all the updates in 24.09.0, please check out the release notes!

Subscribe for the latest updates, events, webinars and community news