Plasma Engine  2.0
Loading...
Searching...
No Matches
plLSAOPass Class Reference

#include <LSAOPass.h>

Inheritance diagram for plLSAOPass:

Public Member Functions

virtual bool GetRenderTargetDescriptions (const plView &view, const plArrayPtr< plGALTextureCreationDescription *const > inputs, plArrayPtr< plGALTextureCreationDescription > outputs) override
 For a given input pin configuration, provide the output configuration of this node. Outputs is already resized to the number of output pins.
 
virtual void InitRenderPipelinePass (const plArrayPtr< plRenderPipelinePassConnection *const > inputs, const plArrayPtr< plRenderPipelinePassConnection *const > outputs) override
 After GetRenderTargetDescriptions was called successfully for each pass, this function is called with the inputs and outputs for review. Disconnected pins have a nullptr value in the passed in arrays. This is the time to create additional resources that are not covered by the pins automatically, e.g. a picking texture or eye adaptation buffer.
 
virtual void Execute (const plRenderViewContext &renderViewContext, const plArrayPtr< plRenderPipelinePassConnection *const > inputs, const plArrayPtr< plRenderPipelinePassConnection *const > outputs) override
 Render into outputs. Both inputs and outputs are passed in with actual texture handles. Disconnected pins have a nullptr value in the passed in arrays. You can now create views and render target setups on the fly and fill the output targets with data.
 
virtual void ExecuteInactive (const plRenderViewContext &renderViewContext, const plArrayPtr< plRenderPipelinePassConnection *const > inputs, const plArrayPtr< plRenderPipelinePassConnection *const > outputs) override
 
virtual plResult Serialize (plStreamWriter &inout_stream) const override
 
virtual plResult Deserialize (plStreamReader &inout_stream) override
 
plUInt32 GetLineToLinePixelOffset () const
 
void SetLineToLinePixelOffset (plUInt32 uiPixelOffset)
 
plUInt32 GetLineSamplePixelOffset () const
 
void SetLineSamplePixelOffset (plUInt32 uiPixelOffset)
 
float GetDepthCutoffDistance () const
 
void SetDepthCutoffDistance (float fDepthCutoffDistance)
 
float GetOcclusionFalloff () const
 
void SetOcclusionFalloff (float fFalloff)
 
- Public Member Functions inherited from plRenderPipelinePass
 plRenderPipelinePass (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.
 
bool IsStereoAware () const
 True if the render pipeline pass can handle stereo cameras correctly.
 
virtual plGALTextureHandle QueryTextureProvider (const plRenderPipelineNodePin *pPin, const plGALTextureCreationDescription &desc)
 
virtual void ReadBackProperties (plView *pView)
 Allows for the pass to write data back using plView::SetRenderPassReadBackProperty. E.g. picking results etc.
 
void RenderDataWithCategory (const plRenderViewContext &renderViewContext, plRenderData::Category category, plRenderDataBatch::Filter filter=plRenderDataBatch::Filter())
 
PL_ALWAYS_INLINE plRenderPipelineGetPipeline ()
 
PL_ALWAYS_INLINE const plRenderPipelineGetPipeline () const
 
- Public Member Functions inherited from plRenderPipelineNode
void InitializePins ()
 
plHashedString GetPinName (const plRenderPipelineNodePin *pPin) const
 
const plRenderPipelineNodePinGetPinByName (const char *szName) const
 
const plRenderPipelineNodePinGetPinByName (plHashedString sName) const
 
const plArrayPtr< const plRenderPipelineNodePin *const > GetInputPins () const
 
const plArrayPtr< const plRenderPipelineNodePin *const > GetOutputPins () const
 
- Public Member Functions inherited from plReflectedClass
virtual const plRTTIGetDynamicRTTI () const
 
bool IsInstanceOf (const plRTTI *pType) const
 Returns whether the type of this instance is of the given type or derived from it.
 
template<typename T >
PL_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 plVec3I32 &imageResolution)
 
void AddLinesForDirection (const plVec3I32 &imageResolution, const plVec2I32 &sampleDir, plUInt32 lineIndex, plDynamicArray< LineInstruction > &outinLineInstructions, plUInt32 &outinTotalNumberOfSamples)
 

Protected Attributes

plRenderPipelineNodeInputPin m_PinDepthInput
 
plRenderPipelineNodeOutputPin m_PinOutput
 
plConstantBufferStorageHandle m_hLineSweepCB
 
bool m_bSweepDataDirty = true
 
bool m_bConstantsDirty = true
 
plGALBufferHandle m_hLineSweepOutputBuffer
 Output of the line sweep pass.
 
plGALBufferUnorderedAccessViewHandle m_hLineSweepOutputUAV
 
plGALBufferResourceViewHandle m_hLineSweepOutputSRV
 
plGALBufferHandle m_hLineInfoBuffer
 Structured buffer containing instructions for every single line to trace.
 
plGALBufferResourceViewHandle m_hLineSweepInfoSRV
 
plUInt32 m_uiNumSweepLines = 0
 Total number of lines to be traced.
 
plInt32 m_iLineToLinePixelOffset = 2
 
plInt32 m_iLineSamplePixelOffsetFactor = 1
 
float m_fOcclusionFalloff = 0.2f
 
float m_fDepthCutoffDistance = 4.0f
 
plEnum< plLSAODepthCompareFunctionm_DepthCompareFunction
 
bool m_bDistributedGathering = true
 
plShaderResourceHandle m_hShaderLineSweep
 
plShaderResourceHandle m_hShaderGather
 
plShaderResourceHandle m_hShaderAverage
 

Additional Inherited Members

- Static Public Member Functions inherited from plNoBase
static const plRTTIGetStaticRTTI ()
 

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

◆ Deserialize()

plResult plLSAOPass::Deserialize ( plStreamReader & inout_stream)
overridevirtual

Reimplemented from plRenderPipelinePass.

◆ Execute()

void plLSAOPass::Execute ( const plRenderViewContext & renderViewContext,
const plArrayPtr< plRenderPipelinePassConnection *const > inputs,
const plArrayPtr< plRenderPipelinePassConnection *const > outputs )
overridevirtual

Render into outputs. Both inputs and outputs are passed in with actual texture handles. Disconnected pins have a nullptr value in the passed in arrays. You can now create views and render target setups on the fly and fill the output targets with data.

Implements plRenderPipelinePass.

◆ ExecuteInactive()

void plLSAOPass::ExecuteInactive ( const plRenderViewContext & renderViewContext,
const plArrayPtr< plRenderPipelinePassConnection *const > inputs,
const plArrayPtr< plRenderPipelinePassConnection *const > outputs )
overridevirtual

Reimplemented from plRenderPipelinePass.

◆ GetRenderTargetDescriptions()

bool plLSAOPass::GetRenderTargetDescriptions ( const plView & view,
const plArrayPtr< plGALTextureCreationDescription *const > inputs,
plArrayPtr< plGALTextureCreationDescription > outputs )
overridevirtual

For a given input pin configuration, provide the output configuration of this node. Outputs is already resized to the number of output pins.

Implements plRenderPipelinePass.

◆ InitRenderPipelinePass()

void plLSAOPass::InitRenderPipelinePass ( const plArrayPtr< plRenderPipelinePassConnection *const > inputs,
const plArrayPtr< plRenderPipelinePassConnection *const > outputs )
overridevirtual

After GetRenderTargetDescriptions was called successfully for each pass, this function is called with the inputs and outputs for review. Disconnected pins have a nullptr value in the passed in arrays. This is the time to create additional resources that are not covered by the pins automatically, e.g. a picking texture or eye adaptation buffer.

Reimplemented from plRenderPipelinePass.

◆ Serialize()

plResult plLSAOPass::Serialize ( plStreamWriter & inout_stream) const
overridevirtual

Reimplemented from plRenderPipelinePass.


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