mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-26 09:35:28 +00:00
Make split point control parameters configurable with the new shadow technique.
This commit is contained in:
parent
e233dae1cd
commit
882b63cba9
@ -767,6 +767,16 @@ void SceneUtil::MWShadowTechnique::disableDebugHUD()
|
||||
_debugHud = nullptr;
|
||||
}
|
||||
|
||||
void SceneUtil::MWShadowTechnique::setSplitPointUniformLogarithmicRatio(double ratio)
|
||||
{
|
||||
_splitPointUniformLogRatio = ratio;
|
||||
}
|
||||
|
||||
void SceneUtil::MWShadowTechnique::setSplitPointDeltaBias(double bias)
|
||||
{
|
||||
_splitPointDeltaBias = bias;
|
||||
}
|
||||
|
||||
MWShadowTechnique::ViewDependentData* MWShadowTechnique::createViewDependentData(osgUtil::CullVisitor* /*cv*/)
|
||||
{
|
||||
return new ViewDependentData(this);
|
||||
@ -1096,8 +1106,6 @@ void MWShadowTechnique::cull(osgUtil::CullVisitor& cv)
|
||||
double f = reducedFar;
|
||||
double i = double(sm_i);
|
||||
double m = double(numShadowMapsPerLight);
|
||||
double ratio = 0.5; // TODO: Settings::Manager::getFloat("split point uniform logarithmic ratio", "Shadows");
|
||||
double deltaBias = 0.0; // TODO: Settings::Manager::getFloat("split point bias", "Shadows");
|
||||
if (sm_i == 0)
|
||||
r_start = -1.0;
|
||||
else
|
||||
@ -1105,7 +1113,7 @@ void MWShadowTechnique::cull(osgUtil::CullVisitor& cv)
|
||||
// compute the split point in main camera view
|
||||
double ciLog = n * pow(f / n, i / m);
|
||||
double ciUniform = n + (f - n) * i / m;
|
||||
double ci = ratio * ciLog + (1.0 - ratio) * ciUniform + deltaBias;
|
||||
double ci = _splitPointUniformLogRatio * ciLog + (1.0 - _splitPointUniformLogRatio) * ciUniform + _splitPointDeltaBias;
|
||||
|
||||
// work out where this is in light space
|
||||
osg::Vec3d worldSpacePos = frustum.eye + frustum.frustumCenterLine * ci;
|
||||
@ -1120,7 +1128,7 @@ void MWShadowTechnique::cull(osgUtil::CullVisitor& cv)
|
||||
// compute the split point in main camera view
|
||||
double ciLog = n * pow(f / n, (i + 1) / m);
|
||||
double ciUniform = n + (f - n) * (i + 1) / m;
|
||||
double ci = ratio * ciLog + (1.0 - ratio) * ciUniform + deltaBias;
|
||||
double ci = _splitPointUniformLogRatio * ciLog + (1.0 - _splitPointUniformLogRatio) * ciUniform + _splitPointDeltaBias;
|
||||
|
||||
// work out where this is in light space
|
||||
osg::Vec3d worldSpacePos = frustum.eye + frustum.frustumCenterLine * ci;
|
||||
|
@ -69,6 +69,10 @@ namespace SceneUtil {
|
||||
|
||||
virtual void disableDebugHUD();
|
||||
|
||||
virtual void setSplitPointUniformLogarithmicRatio(double ratio);
|
||||
|
||||
virtual void setSplitPointDeltaBias(double bias);
|
||||
|
||||
class ComputeLightSpaceBounds : public osg::NodeVisitor, public osg::CullStack
|
||||
{
|
||||
public:
|
||||
@ -232,6 +236,9 @@ namespace SceneUtil {
|
||||
|
||||
bool _enableShadows;
|
||||
|
||||
double _splitPointUniformLogRatio = 0.5;
|
||||
double _splitPointDeltaBias = 0.0;
|
||||
|
||||
class DebugHUD : public osg::Referenced
|
||||
{
|
||||
public:
|
||||
|
@ -40,6 +40,9 @@ namespace SceneUtil
|
||||
int mapres = Settings::Manager::getInt("shadow map resolution", "Shadows");
|
||||
settings->setTextureSize(osg::Vec2s(mapres, mapres));
|
||||
|
||||
mShadowTechnique->setSplitPointUniformLogarithmicRatio(Settings::Manager::getFloat("split point uniform logarithmic ratio", "Shadows"));
|
||||
mShadowTechnique->setSplitPointDeltaBias(Settings::Manager::getFloat("split point bias", "Shadows"));
|
||||
|
||||
if (Settings::Manager::getBool("enable debug hud", "Shadows"))
|
||||
mShadowTechnique->enableDebugHUD();
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user