![]() |
OGRE-Next
2.3
Object-Oriented Graphics Rendering Engine
|
Parallel Split Shadow Map (PSSM) shadow camera setup. More...
#include <OgreShadowCameraSetupPSSM.h>
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 SplitPointList & | getSplitBlendPoints () const |
Returns the calculated split blend points. More... | |
uint | getSplitCount () const |
Get the number of splits. More... | |
const Real & | getSplitFadePoint () 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 SplitPointList & | getSplitPoints () 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) |
Parallel Split Shadow Map (PSSM) shadow camera setup.
typedef vector<Real>::type Ogre::PSSMShadowCameraSetup::SplitPointList |
Ogre::PSSMShadowCameraSetup::PSSMShadowCameraSetup | ( | ) |
Constructor, defaults to 3 splits.
|
virtual |
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.
splitCount | The number of splits to use |
nearDist | The near plane to use for the first split |
farDist | The far plane to use for the last split |
lambda | Factor to use to reduce the split size |
blend | Factor to use to reduce the split seams |
fade | Factor to use to fade out the last split |
|
inlineinherited |
|
inlineinherited |
|
inline |
|
overridevirtual |
Returns a LiSPSM shadow camera with PSSM splits base on iteration.
Reimplemented from Ogre::FocusedShadowCameraSetup.
|
inline |
Returns the calculated split blend points.
|
inline |
Get the number of splits.
|
inline |
Returns the calculated split fade point.
|
inline |
Get the padding factor to apply to the near & far distances when matching up splits to one another, to avoid 'cracks'.
|
inline |
Returns the calculated split points.
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
operator new, with debug line info
|
inlineinherited |
placement operator new
|
inlineinherited |
|
inlineinherited |
array operator new, with debug line info
|
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
void Ogre::PSSMShadowCameraSetup::setOptimalAdjustFactor | ( | size_t | splitIndex, |
Real | factor | ||
) |
Set the LiSPSM optimal adjust factor for a given split (call after configuring splits).
|
inline |
Set the padding factor to apply to the near & far distances when matching up splits to one another, to avoid 'cracks'.
void Ogre::PSSMShadowCameraSetup::setSplitPoints | ( | const SplitPointList & | newSplitPoints, |
Real | blend = 0.125 , |
||
Real | fade = 0.313 |
||
) |
Manually configure a new splitting scheme.
newSplitPoints | A 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. |
blend | Factor to use to reduce the split seams. |
fade | Factor to use to fade out the last split. |
|
inlinestaticinherited |
|
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
pad | Value in range [0; inf) Negative values may cause glitches |