ezEngine Release 26.9
Loading...
Searching...
No Matches
ezLSAOPass Class Reference

#include <LSAOPass.h>

Inheritance diagram for ezLSAOPass:

Public Member Functions

virtual ezStatus AddRenderPasses (const ezViewData &viewData, const ezCamera &camera, ezRenderGraph &ref_graph, const ezArrayPtr< const ezRenderPipelinePinConnection > inputs, ezArrayPtr< ezRenderPipelinePinConnection > outputs) override
 Called by the render pipeline when this pass is active. The pass declares its render-graph passes and writes the resulting transient handles into the outputs array.
 
virtual ezStatus AddRenderPassesInactive (const ezViewData &viewData, const ezCamera &camera, ezRenderGraph &ref_graph, const ezArrayPtr< const ezRenderPipelinePinConnection > inputs, ezArrayPtr< ezRenderPipelinePinConnection > outputs) override
 Called by the render pipeline when this pass is inactive instead of AddRenderPasses. The default implementation does nothing; passes that produce outputs must override this and at minimum write the same output handles they would in AddRenderPasses (typically by adding a clear pass) so downstream passes still see a valid resource.
 
virtual ezResult Serialize (ezStreamWriter &inout_stream) const override
 
virtual ezResult Deserialize (ezStreamReader &inout_stream) override
 
ezUInt32 GetLineToLinePixelOffset () const
 
void SetLineToLinePixelOffset (ezUInt32 uiPixelOffset)
 
ezUInt32 GetLineSamplePixelOffset () const
 
void SetLineSamplePixelOffset (ezUInt32 uiPixelOffset)
 
float GetDepthCutoffDistance () const
 
void SetDepthCutoffDistance (float fDepthCutoffDistance)
 
float GetOcclusionFalloff () const
 
void SetOcclusionFalloff (float fFalloff)
 
- Public Member Functions inherited from ezRenderPipelinePass
 ezRenderPipelinePass (const char *szName, bool bIsStereoAware=false)
 
void SetName (const char *szName)
 Sets the name of the pass.
 
const char * GetName () const
 returns the name of the pass.
 
EZ_ALWAYS_INLINE bool IsStereoAware () const
 True if the render pipeline pass can handle stereo cameras correctly.
 
virtual void ReadBackProperties (ezView *pView)
 Allows for the pass to write data back using ezView::SetRenderPassReadBackProperty. E.g. picking results etc.
 
void DeclareRendererDependenciesForCategory (ezRenderData::Category category, ezRenderGraph &ref_graph, ezRenderGraphPassBuilder &ref_passBuilder)
 
void RenderDataWithCategory (const ezRenderViewContext &renderViewContext, ezRenderData::Category category)
 
EZ_ALWAYS_INLINE ezRenderPipelineGetPipeline ()
 
EZ_ALWAYS_INLINE const ezRenderPipelineGetPipeline () const
 
virtual ezGALTextureHandle QueryTextureProvider (const ezRenderPipelineNodePin *pPin, const ezGALTextureCreationDescription &desc)
 
- Public Member Functions inherited from ezRenderPipelineNode
void InitializePins ()
 
ezHashedString GetPinName (const ezRenderPipelineNodePin *pPin) const
 
const ezRenderPipelineNodePinGetPinByName (ezTempHashedString sName) const
 
const ezArrayPtr< const ezRenderPipelineNodePin *const > GetInputPins () const
 
const ezArrayPtr< const ezRenderPipelineNodePin *const > GetOutputPins () const
 
- Public Member Functions inherited from ezReflectedClass
virtual const ezRTTIGetDynamicRTTI () const
 
bool IsInstanceOf (const ezRTTI *pType) const
 Returns whether the type of this instance is of the given type or derived from it.
 
template<typename T >
EZ_ALWAYS_INLINE bool IsInstanceOf () const
 Returns whether the type of this instance is of the given type or derived from it.
 

Protected Member Functions

void DestroyLineSweepData ()
 Destroys all GPU data that might have been created in in SetupLineSweepData.
 
void SetupLineSweepData (const ezVec3I32 &imageResolution)
 
void AddLinesForDirection (const ezVec3I32 &imageResolution, const ezVec2I32 &sampleDir, ezUInt32 lineIndex, ezDynamicArray< LineInstruction > &outinLineInstructions, ezUInt32 &outinTotalNumberOfSamples)
 
- Protected Member Functions inherited from ezRenderPipelinePass
void SetReadBackProperty (ezView *pView, ezStringView sPropertyName, const ezVariant &value)
 

Protected Attributes

ezRenderPipelineNodeInputPin m_PinDepthInput
 
ezRenderPipelineNodeOutputPin m_PinOutput
 
ezConstantBufferStorageHandle m_hLineSweepCB
 
bool m_bSweepDataDirty = true
 
bool m_bConstantsDirty = true
 
ezGALBufferHandle m_hLineSweepOutputBuffer
 Output of the line sweep pass.
 
ezGALBufferRange m_LineSweepOutputBufferRange
 
ezGALBufferHandle m_hLineInfoBuffer
 Structured buffer containing instructions for every single line to trace.
 
ezUInt32 m_uiNumSweepLines = 0
 Total number of lines to be traced.
 
ezInt32 m_iLineToLinePixelOffset = 2
 
ezInt32 m_iLineSamplePixelOffsetFactor = 1
 
float m_fOcclusionFalloff = 0.2f
 
float m_fDepthCutoffDistance = 4.0f
 
ezEnum< ezLSAODepthCompareFunctionm_DepthCompareFunction
 
bool m_bDistributedGathering = true
 
ezShaderResourceHandle m_hShaderLineSweep
 
ezShaderResourceHandle m_hShaderGather
 
ezShaderResourceHandle m_hShaderAverage
 

Additional Inherited Members

- Static Public Member Functions inherited from ezNoBase
static const ezRTTIGetStaticRTTI ()
 

Detailed Description

Screen space ambient occlusion using "line sweep ambient occlusion" by Ville Timonen

Resources: Use in Quantum Break: http://wili.cc/research/quantum_break/SIGGRAPH_2015_Remedy_Notes.pdf Presentation slides EGSR: http://wili.cc/research/lsao/EGSR13_LSAO.pdf Paper: http://wili.cc/research/lsao/lsao.pdf

There are a few adjustments and own ideas worked into this implementation. The biggest change probably is that pixels in the gather pass compute their target linesample arithmetically instead of relying on lookups.

Member Function Documentation

◆ AddRenderPasses()

ezStatus ezLSAOPass::AddRenderPasses ( const ezViewData viewData,
const ezCamera camera,
ezRenderGraph ref_graph,
const ezArrayPtr< const ezRenderPipelinePinConnection inputs,
ezArrayPtr< ezRenderPipelinePinConnection outputs 
)
overridevirtual

Called by the render pipeline when this pass is active. The pass declares its render-graph passes and writes the resulting transient handles into the outputs array.

Reimplemented from ezRenderPipelinePass.

◆ AddRenderPassesInactive()

ezStatus ezLSAOPass::AddRenderPassesInactive ( const ezViewData viewData,
const ezCamera camera,
ezRenderGraph ref_graph,
const ezArrayPtr< const ezRenderPipelinePinConnection inputs,
ezArrayPtr< ezRenderPipelinePinConnection outputs 
)
overridevirtual

Called by the render pipeline when this pass is inactive instead of AddRenderPasses. The default implementation does nothing; passes that produce outputs must override this and at minimum write the same output handles they would in AddRenderPasses (typically by adding a clear pass) so downstream passes still see a valid resource.

Reimplemented from ezRenderPipelinePass.

◆ Deserialize()

ezResult ezLSAOPass::Deserialize ( ezStreamReader inout_stream)
overridevirtual

Reimplemented from ezRenderPipelinePass.

◆ Serialize()

ezResult ezLSAOPass::Serialize ( ezStreamWriter inout_stream) const
overridevirtual

Reimplemented from ezRenderPipelinePass.


The documentation for this class was generated from the following files: