mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 22:13:12 +02:00
Fixed bug which culled medium sized objects in shadow maps due to perspective frustum assumed octree selection
This commit is contained in:
parent
a679dc6705
commit
b9d49318e7
2 changed files with 11 additions and 1 deletions
|
@ -260,6 +260,7 @@ void RenderShadowCascadeSetup::run(const render::RenderContextPointer& renderCon
|
||||||
RenderArgs* args = renderContext->args;
|
RenderArgs* args = renderContext->args;
|
||||||
|
|
||||||
output.edit0() = args->_renderMode;
|
output.edit0() = args->_renderMode;
|
||||||
|
output.edit2() = args->_sizeScale;
|
||||||
|
|
||||||
const auto globalShadow = lightStage->getCurrentKeyShadow();
|
const auto globalShadow = lightStage->getCurrentKeyShadow();
|
||||||
if (globalShadow && _cascadeIndex<globalShadow->getCascadeCount()) {
|
if (globalShadow && _cascadeIndex<globalShadow->getCascadeCount()) {
|
||||||
|
@ -270,6 +271,14 @@ void RenderShadowCascadeSetup::run(const render::RenderContextPointer& renderCon
|
||||||
// Set the keylight render args
|
// Set the keylight render args
|
||||||
args->pushViewFrustum(*(globalShadow->getCascade(_cascadeIndex).getFrustum()));
|
args->pushViewFrustum(*(globalShadow->getCascade(_cascadeIndex).getFrustum()));
|
||||||
args->_renderMode = RenderArgs::SHADOW_RENDER_MODE;
|
args->_renderMode = RenderArgs::SHADOW_RENDER_MODE;
|
||||||
|
if (lightStage->getCurrentKeyLight()->getType() == model::Light::SUN) {
|
||||||
|
const float shadowSizeScale = 1e16f;
|
||||||
|
// Set the size scale to a ridiculously high value to prevent small object culling which assumes
|
||||||
|
// the view frustum is a perspective projection. But this isn't the case for the sun which
|
||||||
|
// is an orthographic projection.
|
||||||
|
args->_sizeScale = shadowSizeScale;
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
output.edit1() = ItemFilter::Builder::nothing();
|
output.edit1() = ItemFilter::Builder::nothing();
|
||||||
}
|
}
|
||||||
|
@ -284,4 +293,5 @@ void RenderShadowCascadeTeardown::run(const render::RenderContextPointer& render
|
||||||
assert(args->hasViewFrustum());
|
assert(args->hasViewFrustum());
|
||||||
// Reset the render args
|
// Reset the render args
|
||||||
args->_renderMode = input.get0();
|
args->_renderMode = input.get0();
|
||||||
|
args->_sizeScale = input.get2();
|
||||||
};
|
};
|
||||||
|
|
|
@ -64,7 +64,7 @@ public:
|
||||||
|
|
||||||
class RenderShadowCascadeSetup {
|
class RenderShadowCascadeSetup {
|
||||||
public:
|
public:
|
||||||
using Outputs = render::VaryingSet2<RenderArgs::RenderMode, render::ItemFilter>;
|
using Outputs = render::VaryingSet3<RenderArgs::RenderMode, render::ItemFilter, float>;
|
||||||
using JobModel = render::Job::ModelO<RenderShadowCascadeSetup, Outputs>;
|
using JobModel = render::Job::ModelO<RenderShadowCascadeSetup, Outputs>;
|
||||||
|
|
||||||
RenderShadowCascadeSetup(unsigned int cascadeIndex) : _cascadeIndex{ cascadeIndex } {}
|
RenderShadowCascadeSetup(unsigned int cascadeIndex) : _cascadeIndex{ cascadeIndex } {}
|
||||||
|
|
Loading…
Reference in a new issue