OGRE-Next  2.3
Object-Oriented Graphics Rendering Engine
Ogre::PSSMShadowCameraSetup Class Reference

Parallel Split Shadow Map (PSSM) shadow camera setup. More...

#include <OgreShadowCameraSetupPSSM.h>

+ Inheritance diagram for Ogre::PSSMShadowCameraSetup:

Public Types

typedef vector< Real >::type SplitPointList
 

Public Member Functions

 PSSMShadowCameraSetup ()
 Constructor, defaults to 3 splits. More...
 
virtual ~PSSMShadowCameraSetup ()
 
void calculateSplitPoints (uint splitCount, Real nearDist, Real farDist, Real lambda=0.95, Real blend=0.125, Real fade=0.313)
 Calculate a new splitting scheme. More...
 
Real getMaxDistance () const
 
Real getMinDistance () const
 
uint32 getNumStableSplits () const
 
void getShadowCamera (const Ogre::SceneManager *sm, const Ogre::Camera *cam, const Ogre::Light *light, Ogre::Camera *texCam, size_t iteration, const Vector2 &viewportRealSize) const override
 Returns a LiSPSM shadow camera with PSSM splits base on iteration. More...
 
const SplitPointListgetSplitBlendPoints () const
 Returns the calculated split blend points. More...
 
uint getSplitCount () const
 Get the number of splits. More...
 
const RealgetSplitFadePoint () const
 Returns the calculated split fade point. More...
 
Real getSplitPadding () const
 Get the padding factor to apply to the near & far distances when matching up splits to one another, to avoid 'cracks'. More...
 
const SplitPointListgetSplitPoints () const
 Returns the calculated split points. More...
 
Real getXYPadding () const
 See FocusedShadowCameraSetup::setXYPadding. More...
 
void operator delete (void *ptr)
 
void operator delete (void *ptr, const char *, int, const char *)
 
void operator delete (void *ptr, void *)
 
void operator delete[] (void *ptr)
 
void operator delete[] (void *ptr, const char *, int, const char *)
 
void * operator new (size_t sz)
 
void * operator new (size_t sz, const char *file, int line, const char *func)
 operator new, with debug line info More...
 
void * operator new (size_t sz, void *ptr)
 placement operator new More...
 
void * operator new[] (size_t sz)
 
void * operator new[] (size_t sz, const char *file, int line, const char *func)
 array operator new, with debug line info More...
 
void setNumStableSplits (uint32 numStableSplits)
 PSSM tends to be very unstable to camera rotation changes. More...
 
void setOptimalAdjustFactor (size_t splitIndex, Real factor)
 Set the LiSPSM optimal adjust factor for a given split (call after configuring splits). More...
 
void setSplitPadding (Real pad)
 Set the padding factor to apply to the near & far distances when matching up splits to one another, to avoid 'cracks'. More...
 
void setSplitPoints (const SplitPointList &newSplitPoints, Real blend=0.125, Real fade=0.313)
 Manually configure a new splitting scheme. More...
 
void setXYPadding (Real pad)
 setXYPadding FocusedShadowCameraSetup tries to make the shadow mapping camera fit the casters as tight as possible to minimize aliasing. More...
 

Static Public Member Functions

static void setUseEsm (bool useEsm)
 

Detailed Description

Parallel Split Shadow Map (PSSM) shadow camera setup.

Remarks
A PSSM shadow system uses multiple shadow maps per light and maps each texture into a region of space, progressing away from the camera. As such it is most appropriate for directional light setups. This particular version also uses LiSPSM projection for each split to maximise the quality.
Note
Because PSSM uses multiple shadow maps per light, you will need to increase the number of shadow textures available (via SceneManager) to match the number of shadow maps required (default is 3 per light).

Member Typedef Documentation

◆ SplitPointList

Constructor & Destructor Documentation

◆ PSSMShadowCameraSetup()

Ogre::PSSMShadowCameraSetup::PSSMShadowCameraSetup ( )

Constructor, defaults to 3 splits.

◆ ~PSSMShadowCameraSetup()

virtual Ogre::PSSMShadowCameraSetup::~PSSMShadowCameraSetup ( )
virtual

Member Function Documentation

◆ calculateSplitPoints()

void Ogre::PSSMShadowCameraSetup::calculateSplitPoints ( uint  splitCount,
Real  nearDist,
Real  farDist,
Real  lambda = 0.95,
Real  blend = 0.125,
Real  fade = 0.313 
)

Calculate a new splitting scheme.

Parameters
splitCountThe number of splits to use
nearDistThe near plane to use for the first split
farDistThe far plane to use for the last split
lambdaFactor to use to reduce the split size
blendFactor to use to reduce the split seams
fadeFactor to use to fade out the last split

◆ getMaxDistance()

Real Ogre::ShadowCameraSetup::getMaxDistance ( ) const
inlineinherited

◆ getMinDistance()

Real Ogre::ShadowCameraSetup::getMinDistance ( ) const
inlineinherited

◆ getNumStableSplits()

uint32 Ogre::PSSMShadowCameraSetup::getNumStableSplits ( ) const
inline

◆ getShadowCamera()

void Ogre::PSSMShadowCameraSetup::getShadowCamera ( const Ogre::SceneManager sm,
const Ogre::Camera cam,
const Ogre::Light light,
Ogre::Camera texCam,
size_t  iteration,
const Vector2 viewportRealSize 
) const
overridevirtual

Returns a LiSPSM shadow camera with PSSM splits base on iteration.

Reimplemented from Ogre::FocusedShadowCameraSetup.

◆ getSplitBlendPoints()

const SplitPointList& Ogre::PSSMShadowCameraSetup::getSplitBlendPoints ( ) const
inline

Returns the calculated split blend points.

◆ getSplitCount()

uint Ogre::PSSMShadowCameraSetup::getSplitCount ( ) const
inline

Get the number of splits.

◆ getSplitFadePoint()

const Real& Ogre::PSSMShadowCameraSetup::getSplitFadePoint ( ) const
inline

Returns the calculated split fade point.

◆ getSplitPadding()

Real Ogre::PSSMShadowCameraSetup::getSplitPadding ( ) const
inline

Get the padding factor to apply to the near & far distances when matching up splits to one another, to avoid 'cracks'.

◆ getSplitPoints()

const SplitPointList& Ogre::PSSMShadowCameraSetup::getSplitPoints ( ) const
inline

Returns the calculated split points.

◆ getXYPadding()

Real Ogre::FocusedShadowCameraSetup::getXYPadding ( ) const
inlineinherited

◆ operator delete() [1/3]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr)
inlineinherited

◆ operator delete() [2/3]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
const char *  ,
int  ,
const char *   
)
inlineinherited

◆ operator delete() [3/3]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
void *   
)
inlineinherited

◆ operator delete[]() [1/2]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr)
inlineinherited

◆ operator delete[]() [2/2]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr,
const char *  ,
int  ,
const char *   
)
inlineinherited

◆ operator new() [1/3]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz)
inlineinherited

◆ operator new() [2/3]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
const char *  file,
int  line,
const char *  func 
)
inlineinherited

operator new, with debug line info

◆ operator new() [3/3]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
void *  ptr 
)
inlineinherited

placement operator new

◆ operator new[]() [1/2]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz)
inlineinherited

◆ operator new[]() [2/2]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz,
const char *  file,
int  line,
const char *  func 
)
inlineinherited

array operator new, with debug line info

◆ setNumStableSplits()

void Ogre::PSSMShadowCameraSetup::setNumStableSplits ( uint32  numStableSplits)
inline

PSSM tends to be very unstable to camera rotation changes.

Rotate the camera around and the shadow mapping artifacts keep changing.

setNumStableSplits allows you to fix that problem; by switching to ConcentricShadowCamera for the first N splits you specify; while the rest of the splits will use FocusedShadowCameraSetup.

We achieve rotation stability by sacrificing overall quality. Using ConcentricShadowCamera on higher splits means sacrificing exponentially a lot more quality (and even performance); thus the recommended values are numStableSplits = 1 or numStableSplits = 2

The default is numStableSplits = 0 which disables the feature

◆ setOptimalAdjustFactor()

void Ogre::PSSMShadowCameraSetup::setOptimalAdjustFactor ( size_t  splitIndex,
Real  factor 
)

Set the LiSPSM optimal adjust factor for a given split (call after configuring splits).

◆ setSplitPadding()

void Ogre::PSSMShadowCameraSetup::setSplitPadding ( Real  pad)
inline

Set the padding factor to apply to the near & far distances when matching up splits to one another, to avoid 'cracks'.

◆ setSplitPoints()

void Ogre::PSSMShadowCameraSetup::setSplitPoints ( const SplitPointList newSplitPoints,
Real  blend = 0.125,
Real  fade = 0.313 
)

Manually configure a new splitting scheme.

Parameters
newSplitPointsA list which is splitCount + 1 entries long, containing the split points. The first value is the near point, the last value is the far point, and each value in between is both a far point of the previous split, and a near point for the next one.
blendFactor to use to reduce the split seams.
fadeFactor to use to fade out the last split.

◆ setUseEsm()

static void Ogre::ShadowCameraSetup::setUseEsm ( bool  useEsm)
inlinestaticinherited

◆ setXYPadding()

void Ogre::FocusedShadowCameraSetup::setXYPadding ( Real  pad)
inlineinherited

setXYPadding FocusedShadowCameraSetup tries to make the shadow mapping camera fit the casters as tight as possible to minimize aliasing.

But due to various math issues sometimes it ends up being too tight.

If you experience missing shadows or with gaps/holes you may need to increase the padding.

Most likely you want the reverse. In particular circumstances you want maximum quality thus you want to minimize this padding

Parameters
padValue in range [0; inf) Negative values may cause glitches

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