![]() |
OGRE-Next 4.0.0unstable
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. | |
~PSSMShadowCameraSetup () override | |
void | calculateSplitPoints (uint splitCount, Real nearDist, Real farDist, Real lambda=Real(0.95), Real blend=Real(0.125), Real fade=Real(0.313)) |
Calculate a new splitting scheme. | |
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. | |
const SplitPointList & | getSplitBlendPoints () const |
Returns the calculated split blend points. | |
uint | getSplitCount () const |
Get the number of splits. | |
const Real & | getSplitFadePoint () const |
Returns the calculated split fade point. | |
Real | getSplitPadding () const |
Get the padding factor to apply to the near & far distances when matching up splits to one another, to avoid 'cracks'. | |
const SplitPointList & | getSplitPoints () const |
Returns the calculated split points. | |
void | setNumStableSplits (uint32 numStableSplits) |
PSSM tends to be very unstable to camera rotation changes. | |
void | setOptimalAdjustFactor (size_t splitIndex, Real factor) |
Set the LiSPSM optimal adjust factor for a given split (call after configuring splits). | |
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'. | |
void | setSplitPoints (const SplitPointList &newSplitPoints, Real blend=Real(0.125), Real fade=Real(0.313)) |
Manually configure a new splitting scheme. | |
![]() | |
FocusedShadowCameraSetup () | |
Default constructor. | |
~FocusedShadowCameraSetup () override | |
Default destructor. | |
Real | getXYPadding () const |
See FocusedShadowCameraSetup::setXYPadding. | |
void | setXYPadding (Real pad) |
setXYPadding FocusedShadowCameraSetup tries to make the shadow mapping camera fit the casters as tight as possible to minimize aliasing. | |
![]() | |
DefaultShadowCameraSetup () | |
Default constructor. | |
~DefaultShadowCameraSetup () override | |
Destructor. | |
![]() | |
ShadowCameraSetup () | |
virtual | ~ShadowCameraSetup () |
Need virtual destructor in case subclasses use it. | |
Real | getMaxDistance () const |
Real | getMinDistance () const |
Additional Inherited Members | |
![]() | |
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.
|
override |
void Ogre::PSSMShadowCameraSetup::calculateSplitPoints | ( | uint | splitCount, |
Real | nearDist, | ||
Real | farDist, | ||
Real | lambda = Real(0.95) , |
||
Real | blend = Real(0.125) , |
||
Real | fade = Real(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 |
|
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.
|
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 = Real(0.125) , |
||
Real | fade = Real(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. |