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 laterTearDown_GameThread- called when the movie pipeline is being destroyed. For cleaning up variables / dataPreRenderCamera_GameThread- Called on the game thread for each camera found. Be aware that cameras are sometimes not rendered (e.g. whenFadeis0) 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 thePostComposite_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 mutablePost Process Settingsstruct which can be modified, like for example by adding a customBlend 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 anFTextureRHIRefTile 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_8BitAddRenderPass_16BitAddRenderPass_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};