Integrating PopcornFX in O3DE – a focus on rendering

Lately, we’ve being working a lot on the O3DE PopcornFX plugin. Here is a first blog post on our progress so far, with a focus on the brand new O3DE rendering API.

Also, we are happy to announce that we will be at the O3DE Con. More on this at the end of the post!

The O3DE PopcornFX Gem

Open 3D Engine is an open source licensed real time engine focusing on high fidelity applications like AAA games or simulations. The engine is a modular solution heavily relying on Gems, submodules that supply specific features and functions, such as networking, simulation or AI. You can learn more on O3DE concepts here. The PopcornFX Gem allows you to load particle systems authored inside the PopcornFX editor into an O3DE project.

Like O3DE, our Gem is still in early development, but here is rough overview of the main rendering features we already have:

  • Billboard, ribbon and mesh renderers
  • Vertex billboarding for billboards
  • Solid/transparent, lit/unlit particles
  • Texture atlas
  • Soft (depth fade) particles
  • Distortion particles

The next features are not supported yet:

  • Triangle, decal, light renderers (but this one is coming very soon!)
  • Sound renderer
  • Multiple camera rendering

Atom powered rendering

One of the key feature of O3DE is the new Atom renderer. Its data driven render interface (RPI) gives the user full control on the rendering pipeline. The PopcornFX Gem relies on Atom to provide a consistent integration, and ships with materials using O3DE lighting functions.

Built-in and custom passes

For standard particles rendering, the PopcornFX Gem emits draw calls in O3DE default passes, and benefits from the engine functions and resources like diffuse GI or the current tile light list.

O3DE is a tile-based forward renderer. This comes with several benefits over deferred rendering, like being able to use MSAA or to have different lighting models coexist. It also means that the engine natively handles multiple lights for transparent objects.

Computing the screen tile lighting information implies doing some extra passes. The engine resolves maximum and minimum depths for the geometry that is both transparent and influenced by lights. This data is packed into a lower resolution texture and used by a compute shader to get most influential lights for each tile. PopcornFX particles write into the aforementioned passes to benefits from the engine various light types.

Closest and furthest transparent depth targets, and per-tile lighting information buffer.

Transparent PopcornFX billboards with O3DE point and spot lights. 

Using O3DE built-in passes turned out to be simple and powerful. On the other hand, we were able to easily add a custom render pass without any extra C++ code. A JSON file describing the pass and its binding is referenced into the project pipeline asset. This allowed us to implement particle based screen space distortion in a very natural way. A pass asset describes everything needed: an accumulation render target, an additive accumulation pass, and post processing pass with its dedicated shader. This asset is part of the Gem and can be inserted into any render pipeline.

The distortion buffer is created from a pass asset and used in a post processing shader

Mesh and light particle renderers are some of the most recent features

PopcornFX rendering is designed to be extensible. Right now, we mostly focused on integrating our default features, and we still have a few missing, but Atom’s RPI makes it easy for us, or for an advanced user, to integrate more custom features, whether those rely on extra passes or new per particle data.

Getting the gem

You can get the Gem and its installation instruction from this page.

We have a good news for those using the O3DE development branch: you can now also get the compatible Gem from this public git repository. It will contain the most recent Gem with potential hotfixes.

O3DE Con

We will be doing a PopcornFX workshop at the O3DE Con, taking place on october 11-12. We will cover the basic workflow from Gem installation to effect loading. We know it’s important for a particle system to be able interact with the various engine components. We will show you how PopcornFX can be used with EmotionFX animated models, Script Canvas or timeline.

Check the Sched event for details, we are looking forward to meet you there!