mirror of
https://github.com/overte-org/overte.git
synced 2025-04-23 03:33:38 +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
libraries/render-utils/src
|
@ -260,6 +260,7 @@ void RenderShadowCascadeSetup::run(const render::RenderContextPointer& renderCon
|
|||
RenderArgs* args = renderContext->args;
|
||||
|
||||
output.edit0() = args->_renderMode;
|
||||
output.edit2() = args->_sizeScale;
|
||||
|
||||
const auto globalShadow = lightStage->getCurrentKeyShadow();
|
||||
if (globalShadow && _cascadeIndex<globalShadow->getCascadeCount()) {
|
||||
|
@ -270,6 +271,14 @@ void RenderShadowCascadeSetup::run(const render::RenderContextPointer& renderCon
|
|||
// Set the keylight render args
|
||||
args->pushViewFrustum(*(globalShadow->getCascade(_cascadeIndex).getFrustum()));
|
||||
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 {
|
||||
output.edit1() = ItemFilter::Builder::nothing();
|
||||
}
|
||||
|
@ -284,4 +293,5 @@ void RenderShadowCascadeTeardown::run(const render::RenderContextPointer& render
|
|||
assert(args->hasViewFrustum());
|
||||
// Reset the render args
|
||||
args->_renderMode = input.get0();
|
||||
args->_sizeScale = input.get2();
|
||||
};
|
||||
|
|
|
@ -64,7 +64,7 @@ public:
|
|||
|
||||
class RenderShadowCascadeSetup {
|
||||
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>;
|
||||
|
||||
RenderShadowCascadeSetup(unsigned int cascadeIndex) : _cascadeIndex{ cascadeIndex } {}
|
||||
|
|
Loading…
Reference in a new issue