In order to support low-level access to important sections of the OWL 360 Movie Render Pipeline, we have exposed a new hooks class. Our 360 Burn-In renderer binds into this. These hooks are only available to PRO 360 Movie Render Queue licensees.
See the full C++ header file OWLMRQ360Hooks.h in the Source/OWLMRQPipeline/Public/OWL360Camera folder
Blueprints
While this class is blueprintable, only a subset of the methods are available in blueprints because of the Unreal restrictions that blueprints only be executed on the game thread.
Methods:
- Setup_GameThread- called while the pipeline is being initialised. This is useful for setting up any objects or variables required in your class later
- TearDown_GameThread- called when the movie pipeline is being destroyed. For cleaning up variables / data
- PreRenderCamera_GameThread- Called on the game thread for each camera found. Be aware that cameras are sometimes not rendered (e.g. when- Fadeis- 0) and so it's important to check the bSkipRendering flags. Also note that when rendering composited outputs, this hook will be called for every camera, however the- PostComposite_TaskThreadhook will only be called once for the composited output. You can check the setting OWLPass→- Settings.Output.bCompositeCamerasfor this.
- ModifyTilePostProcess_GameThread- called for each file of each face on each camera. This exposes mutable- Post Process Settingsstruct which can be modified, like for example by adding a custom- Blend Materialwith face or tile-specific material parameters.
C++
C++ can call all of the above methods by overriding the above methods with the _Implementation suffix
Additionally there are the following methods:
- PostStitch_TaskThread- this is run concurrently on different task threads and enables modification of the raw pixel data.
- PostComposite_TaskThread- run concurrently on different task threads after stitching and any compositing or adjustment due to Fade values.
- PostTileRender_RenderThread- this is executed on the render thread after each tile / face is rendered with an- FTextureRHIRefTile that can be used in custom C++ shaders etc. This happens before the surface is read
Adding passes / Submitting extra layers to output
It is trivial to add extra passes to the render. These passes are pure C++ and can perform calculations or simply append layers.
To submit a pass call one of the three AddRenderPass_... methods below from inside your class:
- AddRenderPass_8Bit
- AddRenderPass_16Bit
- AddRenderPass_32Bit
All 3 methods take the PassIdentifier which is an unreal struct for EXR / output file labelling and a callback with the following typing:
bool YourCallback32Bit(
  const FMoviePipelineRenderPassMetrics& SampleState,
  const FIntPoint& OutputResolution,
  TArray64<FLinearColor>& OutData) { return true};