From 44caf67527da4a48edbf8499c7f94232efffdc41 Mon Sep 17 00:00:00 2001 From: raveenajain Date: Tue, 18 Jun 2019 10:02:22 -0700 Subject: [PATCH 1/8] init change, bias triggered via script --- libraries/graphics/src/graphics/Light.cpp | 8 +++ libraries/graphics/src/graphics/Light.h | 4 ++ libraries/render-utils/src/LightStage.cpp | 1 + libraries/render-utils/src/LightStage.h | 3 ++ .../render-utils/src/RenderShadowTask.cpp | 52 +++++++++++++++---- libraries/render-utils/src/RenderShadowTask.h | 10 ++++ libraries/render-utils/src/Shadow.slh | 2 +- 7 files changed, 68 insertions(+), 12 deletions(-) mode change 100644 => 100755 libraries/render-utils/src/LightStage.cpp mode change 100644 => 100755 libraries/render-utils/src/LightStage.h mode change 100644 => 100755 libraries/render-utils/src/RenderShadowTask.cpp mode change 100644 => 100755 libraries/render-utils/src/RenderShadowTask.h mode change 100644 => 100755 libraries/render-utils/src/Shadow.slh diff --git a/libraries/graphics/src/graphics/Light.cpp b/libraries/graphics/src/graphics/Light.cpp index 8a7281880e..3d2ddb4908 100755 --- a/libraries/graphics/src/graphics/Light.cpp +++ b/libraries/graphics/src/graphics/Light.cpp @@ -89,6 +89,14 @@ float Light::getShadowsBiasScale() const { return _shadowsBiasScale; } +void Light::setBiasInput(const float bias) { + _biasInput = bias; +} + +float Light::getBiasInput() const { + return _biasInput; +} + void Light::setColor(const Color& color) { _lightSchemaBuffer.edit().irradiance.color = color; updateLightRadius(); diff --git a/libraries/graphics/src/graphics/Light.h b/libraries/graphics/src/graphics/Light.h index 824a9138c0..3ef1571032 100755 --- a/libraries/graphics/src/graphics/Light.h +++ b/libraries/graphics/src/graphics/Light.h @@ -112,6 +112,9 @@ public: void setShadowsBiasScale(const float scale); float getShadowsBiasScale() const; + void setBiasInput(const float bias); + float getBiasInput() const; + void setOrientation(const Quat& orientation); const glm::quat& getOrientation() const { return _transform.getRotation(); } @@ -200,6 +203,7 @@ protected: float _shadowsMaxDistance{ 40.0f }; float _shadowsBiasScale{ 1.0f }; + float _biasInput{ 0.3f }; // gives default constant and slope values bool _castShadows{ false }; void updateLightRadius(); diff --git a/libraries/render-utils/src/LightStage.cpp b/libraries/render-utils/src/LightStage.cpp old mode 100644 new mode 100755 index 524deaaad2..e22428148a --- a/libraries/render-utils/src/LightStage.cpp +++ b/libraries/render-utils/src/LightStage.cpp @@ -151,6 +151,7 @@ LightStage::Shadow::Shadow(graphics::LightPointer light, unsigned int cascadeCou if (light) { setMaxDistance(light->getShadowsMaxDistance()); + setBiasInput(light->getBiasInput()); } } diff --git a/libraries/render-utils/src/LightStage.h b/libraries/render-utils/src/LightStage.h old mode 100644 new mode 100755 index 4da66843cc..75dd14871f --- a/libraries/render-utils/src/LightStage.h +++ b/libraries/render-utils/src/LightStage.h @@ -92,6 +92,8 @@ public: float getMaxDistance() const { return _maxDistance; } void setMaxDistance(float value); + void setBiasInput(float value) { _biasInput = value; } + const graphics::LightPointer& getLight() const { return _light; } gpu::TexturePointer map; @@ -110,6 +112,7 @@ public: graphics::LightPointer _light; float _maxDistance{ 0.0f }; + float _biasInput; Cascades _cascades; UniformBufferView _schemaBuffer = nullptr; diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp old mode 100644 new mode 100755 index 5de89a11b5..80a7c5d7e2 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -56,7 +56,6 @@ void RenderShadowTask::build(JobModel& task, const render::Varying& input, rende auto fadeEffect = DependencyManager::get(); initZPassPipelines(*shapePlumber, state, fadeEffect->getBatchSetter(), fadeEffect->getItemUniformSetter()); } - const auto setupOutput = task.addJob("ShadowSetup", input); const auto queryResolution = setupOutput.getN(1); const auto shadowFrame = setupOutput.getN(3); @@ -318,15 +317,43 @@ RenderShadowSetup::RenderShadowSetup() : } void RenderShadowSetup::configure(const Config& configuration) { - setConstantBias(0, configuration.constantBias0); - setSlopeBias(0, configuration.slopeBias0); -#if SHADOW_CASCADE_MAX_COUNT>1 - setConstantBias(1, configuration.constantBias1); - setSlopeBias(1, configuration.slopeBias1); - setConstantBias(2, configuration.constantBias2); - setSlopeBias(2, configuration.slopeBias2); - setConstantBias(3, configuration.constantBias3); - setSlopeBias(3, configuration.slopeBias3); + + // change shadow map based on distinct constant and slope values + float constant0 = configuration.constantBias0; + float constant1 = configuration.constantBias1; + float constant2 = configuration.constantBias2; + float constant3 = configuration.constantBias3; + float slope0 = configuration.slopeBias0; + float slope1 = configuration.slopeBias1; + float slope2 = configuration.slopeBias2; + float slope3 = configuration.slopeBias3; + + // based on external bias input + if (prevBiasInput != configuration.biasInput) { + prevBiasInput = configuration.biasInput; + _biasInput = configuration.biasInput; + + constant0 = (cacasdeDepths[0] / resolution) * _biasInput; + constant1 = (cacasdeDepths[1] / resolution) * _biasInput; + constant2 = (cacasdeDepths[2] / resolution) * _biasInput * 1.1f; + constant3 = (cacasdeDepths[3] / resolution) * _biasInput * 1.3f; + slope0 = constant0 * 2.7f; + slope1 = constant1 * 3.0f; + slope2 = constant2 * 3.7f; + slope3 = constant3 * 3.3f; + } + + setConstantBias(0, constant0); + setSlopeBias(0, slope0); + +#if SHADOW_CASCADE_MAX_COUNT > 1 + setConstantBias(1, constant1); + setConstantBias(2, constant2); + setConstantBias(3, constant3); + + setSlopeBias(1, slope1); + setSlopeBias(2, slope2); + setSlopeBias(3, slope3); #endif } @@ -368,7 +395,7 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c if (!_globalShadowObject) { _globalShadowObject = std::make_shared(currentKeyLight, SHADOW_CASCADE_COUNT); } - + resolution = _globalShadowObject->MAP_SIZE; _globalShadowObject->setLight(currentKeyLight); _globalShadowObject->setKeylightFrustum(args->getViewFrustum(), SHADOW_FRUSTUM_NEAR, SHADOW_FRUSTUM_FAR); @@ -378,6 +405,7 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c // Adjust each cascade frustum const auto biasScale = currentKeyLight->getShadowsBiasScale(); + setBiasInput(currentKeyLight->getBiasInput()); for (cascadeIndex = 0; cascadeIndex < _globalShadowObject->getCascadeCount(); ++cascadeIndex) { auto& bias = _bias[cascadeIndex]; _globalShadowObject->setKeylightCascadeFrustum(cascadeIndex, args->getViewFrustum(), @@ -398,6 +426,7 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c auto bottom = glm::dot(farBottomRight, firstCascadeFrustum->getUp()); auto near = firstCascadeFrustum->getNearClip(); auto far = firstCascadeFrustum->getFarClip(); + cacasdeDepths[0] = far; for (cascadeIndex = 1; cascadeIndex < _globalShadowObject->getCascadeCount(); ++cascadeIndex) { auto& cascadeFrustum = _globalShadowObject->getCascade(cascadeIndex).getFrustum(); @@ -417,6 +446,7 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c top = glm::max(top, cascadeTop); near = glm::min(near, cascadeNear); far = glm::max(far, cascadeFar); + cacasdeDepths[cascadeIndex] = far; } _coarseShadowFrustum->setPosition(firstCascadeFrustum->getPosition()); diff --git a/libraries/render-utils/src/RenderShadowTask.h b/libraries/render-utils/src/RenderShadowTask.h old mode 100644 new mode 100755 index ef469a7247..14178f0505 --- a/libraries/render-utils/src/RenderShadowTask.h +++ b/libraries/render-utils/src/RenderShadowTask.h @@ -87,8 +87,12 @@ class RenderShadowSetupConfig : public render::Job::Config { Q_PROPERTY(float slopeBias1 MEMBER slopeBias1 NOTIFY dirty) Q_PROPERTY(float slopeBias2 MEMBER slopeBias2 NOTIFY dirty) Q_PROPERTY(float slopeBias3 MEMBER slopeBias3 NOTIFY dirty) + Q_PROPERTY(float biasInput MEMBER biasInput NOTIFY dirty) + public: + float biasInput { 0.3f }; + float constantBias0{ 0.15f }; float constantBias1{ 0.15f }; float constantBias2{ 0.175f }; @@ -112,6 +116,11 @@ public: RenderShadowSetup(); void configure(const Config& configuration); void run(const render::RenderContextPointer& renderContext, const Input& input, Output& output); + + float _biasInput; + float prevBiasInput { _biasInput }; + int resolution { 1024 }; + QVector cacasdeDepths = QVector(4); private: @@ -127,6 +136,7 @@ private: void setConstantBias(int cascadeIndex, float value); void setSlopeBias(int cascadeIndex, float value); + void setBiasInput(float input) { _biasInput = input; } }; class RenderShadowCascadeSetup { diff --git a/libraries/render-utils/src/Shadow.slh b/libraries/render-utils/src/Shadow.slh old mode 100644 new mode 100755 index 94bec86b34..ac55bc95e5 --- a/libraries/render-utils/src/Shadow.slh +++ b/libraries/render-utils/src/Shadow.slh @@ -63,7 +63,7 @@ ShadowSampleOffsets evalShadowFilterOffsets(vec4 position) { coords.y += (index & 2) >> 1; #endif - // Offset for efficient PCF, see http://http.developer.nvidia.com/GPUGems/gpugems_ch11.html + // Offset for efficient PCF, see https://developer.nvidia.com/gpugems/GPUGems/gpugems_ch11.html ivec2 offset = coords & ivec2(1,1); offset.y = (offset.x+offset.y) & 1; From f0660ba3813e8ebe5d57bc3dd1f60aacd5d3a0fa Mon Sep 17 00:00:00 2001 From: raveenajain Date: Mon, 24 Jun 2019 11:03:10 -0700 Subject: [PATCH 2/8] modify shadow config via single bias --- libraries/graphics/src/graphics/Light.h | 2 +- libraries/render-utils/src/LightStage.cpp | 1 - .../render-utils/src/RenderShadowTask.cpp | 54 +++++++++++++------ libraries/render-utils/src/RenderShadowTask.h | 16 +++--- 4 files changed, 46 insertions(+), 27 deletions(-) diff --git a/libraries/graphics/src/graphics/Light.h b/libraries/graphics/src/graphics/Light.h index 3ef1571032..e0451f019b 100755 --- a/libraries/graphics/src/graphics/Light.h +++ b/libraries/graphics/src/graphics/Light.h @@ -203,7 +203,7 @@ protected: float _shadowsMaxDistance{ 40.0f }; float _shadowsBiasScale{ 1.0f }; - float _biasInput{ 0.3f }; // gives default constant and slope values + float _biasInput{ 0.23f }; // gives default constant and slope values bool _castShadows{ false }; void updateLightRadius(); diff --git a/libraries/render-utils/src/LightStage.cpp b/libraries/render-utils/src/LightStage.cpp index e22428148a..524deaaad2 100755 --- a/libraries/render-utils/src/LightStage.cpp +++ b/libraries/render-utils/src/LightStage.cpp @@ -151,7 +151,6 @@ LightStage::Shadow::Shadow(graphics::LightPointer light, unsigned int cascadeCou if (light) { setMaxDistance(light->getShadowsMaxDistance()); - setBiasInput(light->getBiasInput()); } } diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp index 80a7c5d7e2..cdd99d4cac 100755 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -327,20 +327,30 @@ void RenderShadowSetup::configure(const Config& configuration) { float slope1 = configuration.slopeBias1; float slope2 = configuration.slopeBias2; float slope3 = configuration.slopeBias3; - - // based on external bias input - if (prevBiasInput != configuration.biasInput) { - prevBiasInput = configuration.biasInput; - _biasInput = configuration.biasInput; - constant0 = (cacasdeDepths[0] / resolution) * _biasInput; - constant1 = (cacasdeDepths[1] / resolution) * _biasInput; - constant2 = (cacasdeDepths[2] / resolution) * _biasInput * 1.1f; - constant3 = (cacasdeDepths[3] / resolution) * _biasInput * 1.3f; - slope0 = constant0 * 2.7f; - slope1 = constant1 * 3.0f; - slope2 = constant2 * 3.7f; - slope3 = constant3 * 3.3f; + // based on external bias input + if (_biasInput != configuration.biasInput || _globalMaxDistance != configuration.globalMaxDistance) { + _biasInput = configuration.biasInput; + _globalMaxDistance = configuration.globalMaxDistance; + + // bias is relative to resolution + int resolutionScale = 1024 / resolution; + _biasInput *= (100.0f / resolutionScale); + float furtherScale = 1.0f; + + furtherScale = cacasdeDistances[0] / cacasdeDistances[5]; + constant0 = (cacasdeDistances[1] / resolution) * _biasInput * furtherScale; + constant1 = (cacasdeDistances[1] / resolution) * _biasInput * furtherScale; + slope0 = (cacasdeDistances[1] / resolution) * _biasInput * furtherScale * 2.5f; + slope1 = (cacasdeDistances[1] / resolution) * _biasInput * furtherScale * 2.75f; + + furtherScale = cacasdeDistances[0] / cacasdeDistances[6]; + constant2 = (cacasdeDistances[2] / resolution) * _biasInput * furtherScale; + slope2 = (cacasdeDistances[2] / resolution) * _biasInput * furtherScale * 3.75f; + + furtherScale = cacasdeDistances[0] / cacasdeDistances[7]; + constant3 = (cacasdeDistances[3] / resolution) * _biasInput * furtherScale; + slope3 = (cacasdeDistances[3] / resolution) * _biasInput * furtherScale * 3.75f; } setConstantBias(0, constant0); @@ -357,11 +367,18 @@ void RenderShadowSetup::configure(const Config& configuration) { #endif } +// cap constant and slope at 1 to prevent peter panning void RenderShadowSetup::setConstantBias(int cascadeIndex, float value) { + if (value > 1.0f) { + value = 1.0f; + } _bias[cascadeIndex]._constant = value * value * value * 0.004f; } void RenderShadowSetup::setSlopeBias(int cascadeIndex, float value) { + if (value > 1.0f) { + value = 1.0f; + } _bias[cascadeIndex]._slope = value * value * value * 0.001f; } @@ -378,6 +395,7 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c output.edit3() = _shadowFrameCache; const auto currentKeyLight = lightStage->getCurrentKeyLight(lightFrame); + setBiasInput(currentKeyLight->getBiasInput()); if (!lightingModel->isShadowEnabled() || !currentKeyLight || !currentKeyLight->getCastShadows()) { renderContext->taskFlow.abortTask(); return; @@ -398,6 +416,7 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c resolution = _globalShadowObject->MAP_SIZE; _globalShadowObject->setLight(currentKeyLight); _globalShadowObject->setKeylightFrustum(args->getViewFrustum(), SHADOW_FRUSTUM_NEAR, SHADOW_FRUSTUM_FAR); + _globalShadowObject->setMaxDistance(_globalMaxDistance); auto& firstCascade = _globalShadowObject->getCascade(0); auto& firstCascadeFrustum = firstCascade.getFrustum(); @@ -405,7 +424,6 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c // Adjust each cascade frustum const auto biasScale = currentKeyLight->getShadowsBiasScale(); - setBiasInput(currentKeyLight->getBiasInput()); for (cascadeIndex = 0; cascadeIndex < _globalShadowObject->getCascadeCount(); ++cascadeIndex) { auto& bias = _bias[cascadeIndex]; _globalShadowObject->setKeylightCascadeFrustum(cascadeIndex, args->getViewFrustum(), @@ -426,8 +444,10 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c auto bottom = glm::dot(farBottomRight, firstCascadeFrustum->getUp()); auto near = firstCascadeFrustum->getNearClip(); auto far = firstCascadeFrustum->getFarClip(); - cacasdeDepths[0] = far; + cacasdeDistances[0] = _globalShadowObject->getCascade(0).getMaxDistance(); + cacasdeDistances[4] = _globalShadowObject->getCascade(0).getMinDistance(); + for (cascadeIndex = 1; cascadeIndex < _globalShadowObject->getCascadeCount(); ++cascadeIndex) { auto& cascadeFrustum = _globalShadowObject->getCascade(cascadeIndex).getFrustum(); @@ -446,7 +466,9 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c top = glm::max(top, cascadeTop); near = glm::min(near, cascadeNear); far = glm::max(far, cascadeFar); - cacasdeDepths[cascadeIndex] = far; + + cacasdeDistances[cascadeIndex] = _globalShadowObject->getCascade(cascadeIndex).getMaxDistance(); + cacasdeDistances[cascadeIndex + 4] = _globalShadowObject->getCascade(cascadeIndex).getMinDistance(); } _coarseShadowFrustum->setPosition(firstCascadeFrustum->getPosition()); diff --git a/libraries/render-utils/src/RenderShadowTask.h b/libraries/render-utils/src/RenderShadowTask.h index 14178f0505..c770144b20 100755 --- a/libraries/render-utils/src/RenderShadowTask.h +++ b/libraries/render-utils/src/RenderShadowTask.h @@ -50,7 +50,6 @@ signals: class RenderShadowTask { public: - // There is one AABox per shadow cascade using CascadeBoxes = render::VaryingArray; using Input = render::VaryingSet2; @@ -74,7 +73,6 @@ public: }; CullFunctor _cullFunctor; - }; class RenderShadowSetupConfig : public render::Job::Config { @@ -88,10 +86,11 @@ class RenderShadowSetupConfig : public render::Job::Config { Q_PROPERTY(float slopeBias2 MEMBER slopeBias2 NOTIFY dirty) Q_PROPERTY(float slopeBias3 MEMBER slopeBias3 NOTIFY dirty) Q_PROPERTY(float biasInput MEMBER biasInput NOTIFY dirty) + Q_PROPERTY(float globalMaxDistance MEMBER globalMaxDistance NOTIFY dirty) public: - - float biasInput { 0.3f }; + float biasInput{ 0.23f }; + float globalMaxDistance{ 40 }; float constantBias0{ 0.15f }; float constantBias1{ 0.15f }; @@ -116,14 +115,13 @@ public: RenderShadowSetup(); void configure(const Config& configuration); void run(const render::RenderContextPointer& renderContext, const Input& input, Output& output); - + float _biasInput; - float prevBiasInput { _biasInput }; - int resolution { 1024 }; - QVector cacasdeDepths = QVector(4); + float _globalMaxDistance; + int resolution{ 1024 }; + QVector cacasdeDistances = QVector(8); // 4 max then 4 min distances private: - ViewFrustumPointer _cameraFrustum; ViewFrustumPointer _coarseShadowFrustum; struct { From f68bb957ffe3c00f83dc57606f540dc16be4ec74 Mon Sep 17 00:00:00 2001 From: raveenajain Date: Mon, 24 Jun 2019 16:42:38 -0700 Subject: [PATCH 3/8] clamp and initialize values --- libraries/graphics/src/graphics/Light.h | 4 +- libraries/render-utils/src/LightStage.h | 2 +- .../render-utils/src/RenderShadowTask.cpp | 42 +++++++++---------- libraries/render-utils/src/RenderShadowTask.h | 15 ++++--- 4 files changed, 33 insertions(+), 30 deletions(-) diff --git a/libraries/graphics/src/graphics/Light.h b/libraries/graphics/src/graphics/Light.h index e0451f019b..1f2c8d1d34 100755 --- a/libraries/graphics/src/graphics/Light.h +++ b/libraries/graphics/src/graphics/Light.h @@ -112,7 +112,7 @@ public: void setShadowsBiasScale(const float scale); float getShadowsBiasScale() const; - void setBiasInput(const float bias); + void setBiasInput(float bias); float getBiasInput() const; void setOrientation(const Quat& orientation); @@ -203,7 +203,7 @@ protected: float _shadowsMaxDistance{ 40.0f }; float _shadowsBiasScale{ 1.0f }; - float _biasInput{ 0.23f }; // gives default constant and slope values + float _biasInput{ 0.23f }; // roughly gives default constant and slope values bool _castShadows{ false }; void updateLightRadius(); diff --git a/libraries/render-utils/src/LightStage.h b/libraries/render-utils/src/LightStage.h index 75dd14871f..275d1ac666 100755 --- a/libraries/render-utils/src/LightStage.h +++ b/libraries/render-utils/src/LightStage.h @@ -112,7 +112,7 @@ public: graphics::LightPointer _light; float _maxDistance{ 0.0f }; - float _biasInput; + float _biasInput{ 0.23f }; Cascades _cascades; UniformBufferView _schemaBuffer = nullptr; diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp index cdd99d4cac..972b0079ef 100755 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -333,26 +333,28 @@ void RenderShadowSetup::configure(const Config& configuration) { _biasInput = configuration.biasInput; _globalMaxDistance = configuration.globalMaxDistance; - // bias is relative to resolution - int resolutionScale = 1024 / resolution; + // the bias is relative to resolution + // to remain consistant with the constant and slope bias values, the biasInput + // value is in the 0.0 - 1.0 range but needs to be scaled up for further calculations + int resolutionScale = DEFAULT_RESOLUTION / resolution; _biasInput *= (100.0f / resolutionScale); - float furtherScale = 1.0f; + float scaleFactor = 1.0f; - furtherScale = cacasdeDistances[0] / cacasdeDistances[5]; - constant0 = (cacasdeDistances[1] / resolution) * _biasInput * furtherScale; - constant1 = (cacasdeDistances[1] / resolution) * _biasInput * furtherScale; - slope0 = (cacasdeDistances[1] / resolution) * _biasInput * furtherScale * 2.5f; - slope1 = (cacasdeDistances[1] / resolution) * _biasInput * furtherScale * 2.75f; + scaleFactor = _biasInput * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[5], 0.0001f, FLT_MAX)) / (float)resolution; + constant0 = cacasdeDistances[1] * scaleFactor; + constant1 = cacasdeDistances[1] * scaleFactor; + slope0 = cacasdeDistances[1] * scaleFactor * 2.5f; + slope1 = cacasdeDistances[1] * scaleFactor * 2.75f; - furtherScale = cacasdeDistances[0] / cacasdeDistances[6]; - constant2 = (cacasdeDistances[2] / resolution) * _biasInput * furtherScale; - slope2 = (cacasdeDistances[2] / resolution) * _biasInput * furtherScale * 3.75f; + scaleFactor = _biasInput * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[6], 0.0001f, FLT_MAX)) / (float)resolution; + constant2 = cacasdeDistances[2] * scaleFactor; + slope2 = cacasdeDistances[2] * scaleFactor * 3.75f; - furtherScale = cacasdeDistances[0] / cacasdeDistances[7]; - constant3 = (cacasdeDistances[3] / resolution) * _biasInput * furtherScale; - slope3 = (cacasdeDistances[3] / resolution) * _biasInput * furtherScale * 3.75f; + scaleFactor = _biasInput * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[7], 0.0001f, FLT_MAX)) / (float)resolution; + constant3 = cacasdeDistances[3] * scaleFactor; + slope3 = cacasdeDistances[3] * scaleFactor * 3.75f; } - + setConstantBias(0, constant0); setSlopeBias(0, slope0); @@ -367,18 +369,14 @@ void RenderShadowSetup::configure(const Config& configuration) { #endif } -// cap constant and slope at 1 to prevent peter panning +// clamp constant and slope at 1 to prevent peter panning void RenderShadowSetup::setConstantBias(int cascadeIndex, float value) { - if (value > 1.0f) { - value = 1.0f; - } + value = glm::clamp(value, 0.0f, 1.0f); _bias[cascadeIndex]._constant = value * value * value * 0.004f; } void RenderShadowSetup::setSlopeBias(int cascadeIndex, float value) { - if (value > 1.0f) { - value = 1.0f; - } + value = glm::clamp(value, 0.0f, 1.0f); _bias[cascadeIndex]._slope = value * value * value * 0.001f; } diff --git a/libraries/render-utils/src/RenderShadowTask.h b/libraries/render-utils/src/RenderShadowTask.h index c770144b20..504a0f266a 100755 --- a/libraries/render-utils/src/RenderShadowTask.h +++ b/libraries/render-utils/src/RenderShadowTask.h @@ -75,6 +75,9 @@ public: CullFunctor _cullFunctor; }; +const float DEFAULT_BIAS_INPUT = 0.23f; +const float DEFAULT_MAX_DISTANCE = 40.0f; + class RenderShadowSetupConfig : public render::Job::Config { Q_OBJECT Q_PROPERTY(float constantBias0 MEMBER constantBias0 NOTIFY dirty) @@ -89,8 +92,8 @@ class RenderShadowSetupConfig : public render::Job::Config { Q_PROPERTY(float globalMaxDistance MEMBER globalMaxDistance NOTIFY dirty) public: - float biasInput{ 0.23f }; - float globalMaxDistance{ 40 }; + float biasInput{ DEFAULT_BIAS_INPUT }; + float globalMaxDistance{ DEFAULT_MAX_DISTANCE }; float constantBias0{ 0.15f }; float constantBias1{ 0.15f }; @@ -116,9 +119,9 @@ public: void configure(const Config& configuration); void run(const render::RenderContextPointer& renderContext, const Input& input, Output& output); - float _biasInput; - float _globalMaxDistance; - int resolution{ 1024 }; + float _biasInput{ DEFAULT_BIAS_INPUT }; + float _globalMaxDistance{ DEFAULT_MAX_DISTANCE }; + int resolution{ DEFAULT_RESOLUTION }; QVector cacasdeDistances = QVector(8); // 4 max then 4 min distances private: @@ -129,6 +132,8 @@ private: float _slope; } _bias[SHADOW_CASCADE_MAX_COUNT]; + const int DEFAULT_RESOLUTION = 1024; + LightStage::ShadowFrame::Object _globalShadowObject; LightStage::ShadowFramePointer _shadowFrameCache; From bb5896c174142f92ae4e2b3109576da46e2602f3 Mon Sep 17 00:00:00 2001 From: raveenajain Date: Mon, 24 Jun 2019 17:24:37 -0700 Subject: [PATCH 4/8] const fix --- libraries/render-utils/src/RenderShadowTask.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/render-utils/src/RenderShadowTask.h b/libraries/render-utils/src/RenderShadowTask.h index 504a0f266a..0b12e9c5cc 100755 --- a/libraries/render-utils/src/RenderShadowTask.h +++ b/libraries/render-utils/src/RenderShadowTask.h @@ -119,6 +119,7 @@ public: void configure(const Config& configuration); void run(const render::RenderContextPointer& renderContext, const Input& input, Output& output); + const int DEFAULT_RESOLUTION = 1024; float _biasInput{ DEFAULT_BIAS_INPUT }; float _globalMaxDistance{ DEFAULT_MAX_DISTANCE }; int resolution{ DEFAULT_RESOLUTION }; @@ -132,8 +133,6 @@ private: float _slope; } _bias[SHADOW_CASCADE_MAX_COUNT]; - const int DEFAULT_RESOLUTION = 1024; - LightStage::ShadowFrame::Object _globalShadowObject; LightStage::ShadowFramePointer _shadowFrameCache; From 534794d7ff8fdf71a9cc6bb40f211e2b994ac9e6 Mon Sep 17 00:00:00 2001 From: raveenajain Date: Wed, 26 Jun 2019 15:42:11 -0700 Subject: [PATCH 5/8] move bias init from config to run --- libraries/graphics/src/graphics/Light.cpp | 2 +- libraries/graphics/src/graphics/Light.h | 2 +- libraries/render-utils/src/LightStage.h | 3 - .../render-utils/src/RenderShadowTask.cpp | 146 ++++++++++++------ libraries/render-utils/src/RenderShadowTask.h | 28 +++- 5 files changed, 119 insertions(+), 62 deletions(-) diff --git a/libraries/graphics/src/graphics/Light.cpp b/libraries/graphics/src/graphics/Light.cpp index 3d2ddb4908..a5d03beda1 100755 --- a/libraries/graphics/src/graphics/Light.cpp +++ b/libraries/graphics/src/graphics/Light.cpp @@ -89,7 +89,7 @@ float Light::getShadowsBiasScale() const { return _shadowsBiasScale; } -void Light::setBiasInput(const float bias) { +void Light::setBiasInput(float bias) { _biasInput = bias; } diff --git a/libraries/graphics/src/graphics/Light.h b/libraries/graphics/src/graphics/Light.h index 1f2c8d1d34..9b431b3e26 100755 --- a/libraries/graphics/src/graphics/Light.h +++ b/libraries/graphics/src/graphics/Light.h @@ -203,7 +203,7 @@ protected: float _shadowsMaxDistance{ 40.0f }; float _shadowsBiasScale{ 1.0f }; - float _biasInput{ 0.23f }; // roughly gives default constant and slope values + float _biasInput{ 0.5f }; // 0.23f will roughly give the default constant and slope values bool _castShadows{ false }; void updateLightRadius(); diff --git a/libraries/render-utils/src/LightStage.h b/libraries/render-utils/src/LightStage.h index 275d1ac666..4da66843cc 100755 --- a/libraries/render-utils/src/LightStage.h +++ b/libraries/render-utils/src/LightStage.h @@ -92,8 +92,6 @@ public: float getMaxDistance() const { return _maxDistance; } void setMaxDistance(float value); - void setBiasInput(float value) { _biasInput = value; } - const graphics::LightPointer& getLight() const { return _light; } gpu::TexturePointer map; @@ -112,7 +110,6 @@ public: graphics::LightPointer _light; float _maxDistance{ 0.0f }; - float _biasInput{ 0.23f }; Cascades _cascades; UniformBufferView _schemaBuffer = nullptr; diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp index 972b0079ef..eee9cbce6a 100755 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -317,55 +317,94 @@ RenderShadowSetup::RenderShadowSetup() : } void RenderShadowSetup::configure(const Config& configuration) { + distanceTriggeredByConfig = _globalMaxDistance != configuration.globalMaxDistance; + biasTriggeredByConfig = _biasInput != configuration.biasInput; - // change shadow map based on distinct constant and slope values - float constant0 = configuration.constantBias0; - float constant1 = configuration.constantBias1; - float constant2 = configuration.constantBias2; - float constant3 = configuration.constantBias3; - float slope0 = configuration.slopeBias0; - float slope1 = configuration.slopeBias1; - float slope2 = configuration.slopeBias2; - float slope3 = configuration.slopeBias3; + // go back to using the config's default bias values if a change to any of those is triggered + if (constant0 != configuration.constantBias0 || slope0 != configuration.slopeBias0 || + constant1 != configuration.constantBias1 || slope1 != configuration.slopeBias1 || + constant2 != configuration.constantBias2 || slope2 != configuration.slopeBias2 || + constant3 != configuration.constantBias3 || slope3 != configuration.slopeBias3) { + constant0 = configuration.constantBias0; + slope0 = configuration.slopeBias0; + constant1 = configuration.constantBias1; + slope1 = configuration.slopeBias1; + constant2 = configuration.constantBias2; + slope2 = configuration.slopeBias2; + constant3 = configuration.constantBias3; + slope3 = configuration.slopeBias3; + changeInDefaultConfigValues = true; + distanceTriggeredByConfig = false; + biasTriggeredByConfig = false; - // based on external bias input - if (_biasInput != configuration.biasInput || _globalMaxDistance != configuration.globalMaxDistance) { - _biasInput = configuration.biasInput; - _globalMaxDistance = configuration.globalMaxDistance; + setConstantBias(0, constant0); + setSlopeBias(0, slope0); - // the bias is relative to resolution - // to remain consistant with the constant and slope bias values, the biasInput - // value is in the 0.0 - 1.0 range but needs to be scaled up for further calculations - int resolutionScale = DEFAULT_RESOLUTION / resolution; - _biasInput *= (100.0f / resolutionScale); - float scaleFactor = 1.0f; - - scaleFactor = _biasInput * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[5], 0.0001f, FLT_MAX)) / (float)resolution; - constant0 = cacasdeDistances[1] * scaleFactor; - constant1 = cacasdeDistances[1] * scaleFactor; - slope0 = cacasdeDistances[1] * scaleFactor * 2.5f; - slope1 = cacasdeDistances[1] * scaleFactor * 2.75f; + #if SHADOW_CASCADE_MAX_COUNT > 1 + setConstantBias(1, constant1); + setConstantBias(2, constant2); + setConstantBias(3, constant3); - scaleFactor = _biasInput * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[6], 0.0001f, FLT_MAX)) / (float)resolution; - constant2 = cacasdeDistances[2] * scaleFactor; - slope2 = cacasdeDistances[2] * scaleFactor * 3.75f; - - scaleFactor = _biasInput * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[7], 0.0001f, FLT_MAX)) / (float)resolution; - constant3 = cacasdeDistances[3] * scaleFactor; - slope3 = cacasdeDistances[3] * scaleFactor * 3.75f; + setSlopeBias(1, slope1); + setSlopeBias(2, slope2); + setSlopeBias(3, slope3); + #endif } + + // modify bias using single input and work in calculateBias() + if (distanceTriggeredByConfig) { + changeInDefaultConfigValues = false; + _globalMaxDistance = configuration.globalMaxDistance; + calculateBiases(); + } + if (biasTriggeredByConfig) { + changeInDefaultConfigValues = false; + _biasInput = configuration.biasInput; + calculateBiases(); + } +} - setConstantBias(0, constant0); - setSlopeBias(0, slope0); +void RenderShadowSetup::calculateBiases() { + // slope scaling values derived from ratio between original constantBias and slopeBias pairs + float SCALE_SLOPE_0 = 2.7f; + float SCALE_SLOPE_1 = 3.0f; + float SCALE_SLOPE_2 = 3.7f; + float SCALE_SLOPE_3 = 3.5f; + float CONVERT_BIAS = 100.0f; + + // the bias is relative to resolution + // to remain consistent with the constant and slope bias values, the biasInput + // value is in the 0.0 - 1.0 range but needs to be scaled up for further calculations + float inverseResolution = 1.0f / (float)resolution; + int resolutionScale = DEFAULT_RESOLUTION * inverseResolution; + float convertedBias = _biasInput * (CONVERT_BIAS / resolutionScale); + float scaleFactor = 1.0f; + + scaleFactor = convertedBias * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[5], 0.0001f, FLT_MAX)) * inverseResolution; + float localConstant0 = cacasdeDistances[1] * scaleFactor; + float localConstant1 = cacasdeDistances[1] * scaleFactor; + float localSlope0 = cacasdeDistances[1] * scaleFactor * SCALE_SLOPE_0; + float localSlope1 = cacasdeDistances[1] * scaleFactor * SCALE_SLOPE_1; + + scaleFactor = convertedBias * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[6], 0.0001f, FLT_MAX)) * inverseResolution; + float localConstant2 = cacasdeDistances[2] * scaleFactor; + float localSlope2 = cacasdeDistances[2] * scaleFactor * SCALE_SLOPE_2; + + scaleFactor = convertedBias * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[7], 0.0001f, FLT_MAX)) * inverseResolution; + float localConstant3 = cacasdeDistances[3] * scaleFactor; + float localSlope3 = cacasdeDistances[3] * scaleFactor * SCALE_SLOPE_3; + + setConstantBias(0, localConstant0); + setSlopeBias(0, localSlope0); #if SHADOW_CASCADE_MAX_COUNT > 1 - setConstantBias(1, constant1); - setConstantBias(2, constant2); - setConstantBias(3, constant3); + setConstantBias(1, localConstant1); + setConstantBias(2, localConstant2); + setConstantBias(3, localConstant3); - setSlopeBias(1, slope1); - setSlopeBias(2, slope2); - setSlopeBias(3, slope3); + setSlopeBias(1, localSlope1); + setSlopeBias(2, localSlope2); + setSlopeBias(3, localSlope3); #endif } @@ -393,7 +432,6 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c output.edit3() = _shadowFrameCache; const auto currentKeyLight = lightStage->getCurrentKeyLight(lightFrame); - setBiasInput(currentKeyLight->getBiasInput()); if (!lightingModel->isShadowEnabled() || !currentKeyLight || !currentKeyLight->getCastShadows()) { renderContext->taskFlow.abortTask(); return; @@ -414,18 +452,32 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c resolution = _globalShadowObject->MAP_SIZE; _globalShadowObject->setLight(currentKeyLight); _globalShadowObject->setKeylightFrustum(args->getViewFrustum(), SHADOW_FRUSTUM_NEAR, SHADOW_FRUSTUM_FAR); + // if the max distance isn't altered externally, grab the value from the light + if (!distanceTriggeredByConfig && !biasTriggeredByConfig) { + _globalMaxDistance = currentKeyLight->getShadowsMaxDistance(); + } _globalShadowObject->setMaxDistance(_globalMaxDistance); - + auto& firstCascade = _globalShadowObject->getCascade(0); auto& firstCascadeFrustum = firstCascade.getFrustum(); unsigned int cascadeIndex; + for (cascadeIndex = 0; cascadeIndex < _globalShadowObject->getCascadeCount(); ++cascadeIndex) { + cacasdeDistances[cascadeIndex] = _globalShadowObject->getCascade(cascadeIndex).getMaxDistance(); + cacasdeDistances[cascadeIndex + 4] = _globalShadowObject->getCascade(cascadeIndex).getMinDistance(); + } + + if (!biasTriggeredByConfig && !distanceTriggeredByConfig && !changeInDefaultConfigValues) { + setBiasInput(currentKeyLight->getBiasInput()); + calculateBiases(); + } + // Adjust each cascade frustum const auto biasScale = currentKeyLight->getShadowsBiasScale(); for (cascadeIndex = 0; cascadeIndex < _globalShadowObject->getCascadeCount(); ++cascadeIndex) { auto& bias = _bias[cascadeIndex]; - _globalShadowObject->setKeylightCascadeFrustum(cascadeIndex, args->getViewFrustum(), - SHADOW_FRUSTUM_NEAR, SHADOW_FRUSTUM_FAR, + _globalShadowObject->setKeylightCascadeFrustum(cascadeIndex, args->getViewFrustum(), + SHADOW_FRUSTUM_NEAR, SHADOW_FRUSTUM_FAR, bias._constant, bias._slope * biasScale); } @@ -443,9 +495,6 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c auto near = firstCascadeFrustum->getNearClip(); auto far = firstCascadeFrustum->getFarClip(); - cacasdeDistances[0] = _globalShadowObject->getCascade(0).getMaxDistance(); - cacasdeDistances[4] = _globalShadowObject->getCascade(0).getMinDistance(); - for (cascadeIndex = 1; cascadeIndex < _globalShadowObject->getCascadeCount(); ++cascadeIndex) { auto& cascadeFrustum = _globalShadowObject->getCascade(cascadeIndex).getFrustum(); @@ -464,9 +513,6 @@ void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, c top = glm::max(top, cascadeTop); near = glm::min(near, cascadeNear); far = glm::max(far, cascadeFar); - - cacasdeDistances[cascadeIndex] = _globalShadowObject->getCascade(cascadeIndex).getMaxDistance(); - cacasdeDistances[cascadeIndex + 4] = _globalShadowObject->getCascade(cascadeIndex).getMinDistance(); } _coarseShadowFrustum->setPosition(firstCascadeFrustum->getPosition()); diff --git a/libraries/render-utils/src/RenderShadowTask.h b/libraries/render-utils/src/RenderShadowTask.h index 0b12e9c5cc..aad40de028 100755 --- a/libraries/render-utils/src/RenderShadowTask.h +++ b/libraries/render-utils/src/RenderShadowTask.h @@ -75,7 +75,7 @@ public: CullFunctor _cullFunctor; }; -const float DEFAULT_BIAS_INPUT = 0.23f; +const float DEFAULT_BIAS_INPUT = 0.5f; const float DEFAULT_MAX_DISTANCE = 40.0f; class RenderShadowSetupConfig : public render::Job::Config { @@ -119,12 +119,6 @@ public: void configure(const Config& configuration); void run(const render::RenderContextPointer& renderContext, const Input& input, Output& output); - const int DEFAULT_RESOLUTION = 1024; - float _biasInput{ DEFAULT_BIAS_INPUT }; - float _globalMaxDistance{ DEFAULT_MAX_DISTANCE }; - int resolution{ DEFAULT_RESOLUTION }; - QVector cacasdeDistances = QVector(8); // 4 max then 4 min distances - private: ViewFrustumPointer _cameraFrustum; ViewFrustumPointer _coarseShadowFrustum; @@ -136,9 +130,29 @@ private: LightStage::ShadowFrame::Object _globalShadowObject; LightStage::ShadowFramePointer _shadowFrameCache; + const int DEFAULT_RESOLUTION = 1024; + float _biasInput{ DEFAULT_BIAS_INPUT }; + float _globalMaxDistance{ DEFAULT_MAX_DISTANCE }; + int resolution{ DEFAULT_RESOLUTION }; + + // initialize with values from RenderShadowSetupConfig + float constant0{ 0.15f }; + float constant1{ 0.15f }; + float constant2{ 0.175f }; + float constant3{ 0.2f }; + float slope0{ 0.4f }; + float slope1{ 0.45f }; + float slope2{ 0.65f }; + float slope3{ 0.7f }; + bool changeInDefaultConfigValues{ false }; + bool distanceTriggeredByConfig{ false }; + bool biasTriggeredByConfig{ false }; + std::vector cacasdeDistances = std::vector(8); // 4 max then 4 min distances + void setConstantBias(int cascadeIndex, float value); void setSlopeBias(int cascadeIndex, float value); void setBiasInput(float input) { _biasInput = input; } + void calculateBiases(); }; class RenderShadowCascadeSetup { From 04afbde1888b2158d01479f748f5c08b9a2157ce Mon Sep 17 00:00:00 2001 From: raveenajain Date: Thu, 27 Jun 2019 09:41:39 -0700 Subject: [PATCH 6/8] cascade loop, fine tune calc --- .../render-utils/src/RenderShadowTask.cpp | 46 +++++-------------- 1 file changed, 12 insertions(+), 34 deletions(-) diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp index eee9cbce6a..c49acc49fc 100755 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -366,11 +366,9 @@ void RenderShadowSetup::configure(const Config& configuration) { void RenderShadowSetup::calculateBiases() { // slope scaling values derived from ratio between original constantBias and slopeBias pairs - float SCALE_SLOPE_0 = 2.7f; - float SCALE_SLOPE_1 = 3.0f; - float SCALE_SLOPE_2 = 3.7f; - float SCALE_SLOPE_3 = 3.5f; - float CONVERT_BIAS = 100.0f; + const std::vector SLOPE_SCALES = {2.7f, 3.0f, 3.7f, 3.5f}; + const float CONVERT_BIAS = 100.0f; + const float MIN_SCALE_DIVISOR = 0.5f; // the bias is relative to resolution // to remain consistent with the constant and slope bias values, the biasInput @@ -378,44 +376,24 @@ void RenderShadowSetup::calculateBiases() { float inverseResolution = 1.0f / (float)resolution; int resolutionScale = DEFAULT_RESOLUTION * inverseResolution; float convertedBias = _biasInput * (CONVERT_BIAS / resolutionScale); + std::vector localConstants = std::vector(4); + std::vector localSlopes = std::vector(4); float scaleFactor = 1.0f; - scaleFactor = convertedBias * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[5], 0.0001f, FLT_MAX)) * inverseResolution; - float localConstant0 = cacasdeDistances[1] * scaleFactor; - float localConstant1 = cacasdeDistances[1] * scaleFactor; - float localSlope0 = cacasdeDistances[1] * scaleFactor * SCALE_SLOPE_0; - float localSlope1 = cacasdeDistances[1] * scaleFactor * SCALE_SLOPE_1; - - scaleFactor = convertedBias * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[6], 0.0001f, FLT_MAX)) * inverseResolution; - float localConstant2 = cacasdeDistances[2] * scaleFactor; - float localSlope2 = cacasdeDistances[2] * scaleFactor * SCALE_SLOPE_2; - - scaleFactor = convertedBias * (cacasdeDistances[0] / glm::clamp(cacasdeDistances[7], 0.0001f, FLT_MAX)) * inverseResolution; - float localConstant3 = cacasdeDistances[3] * scaleFactor; - float localSlope3 = cacasdeDistances[3] * scaleFactor * SCALE_SLOPE_3; - - setConstantBias(0, localConstant0); - setSlopeBias(0, localSlope0); - -#if SHADOW_CASCADE_MAX_COUNT > 1 - setConstantBias(1, localConstant1); - setConstantBias(2, localConstant2); - setConstantBias(3, localConstant3); - - setSlopeBias(1, localSlope1); - setSlopeBias(2, localSlope2); - setSlopeBias(3, localSlope3); -#endif + for (int i = 0; i < SHADOW_CASCADE_MAX_COUNT; i++) { + scaleFactor = convertedBias * (cacasdeDistances[0] / glm::max(MIN_SCALE_DIVISOR, cacasdeDistances[i + 4])) * inverseResolution; + localConstants[i] = cacasdeDistances[i] * scaleFactor; + localSlopes[i] = cacasdeDistances[i] * scaleFactor * SLOPE_SCALES[i]; + setConstantBias(i, localConstants[i]); + setSlopeBias(i, localSlopes[i]); + } } -// clamp constant and slope at 1 to prevent peter panning void RenderShadowSetup::setConstantBias(int cascadeIndex, float value) { - value = glm::clamp(value, 0.0f, 1.0f); _bias[cascadeIndex]._constant = value * value * value * 0.004f; } void RenderShadowSetup::setSlopeBias(int cascadeIndex, float value) { - value = glm::clamp(value, 0.0f, 1.0f); _bias[cascadeIndex]._slope = value * value * value * 0.001f; } From d6fb7f8a6f8643c0f92180075ea8d940622cefd0 Mon Sep 17 00:00:00 2001 From: raveenajain Date: Thu, 27 Jun 2019 10:42:14 -0700 Subject: [PATCH 7/8] arrays for bias calcs --- libraries/render-utils/src/RenderShadowTask.cpp | 6 +++--- libraries/render-utils/src/RenderShadowTask.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp index c49acc49fc..6227a0382b 100755 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -366,7 +366,7 @@ void RenderShadowSetup::configure(const Config& configuration) { void RenderShadowSetup::calculateBiases() { // slope scaling values derived from ratio between original constantBias and slopeBias pairs - const std::vector SLOPE_SCALES = {2.7f, 3.0f, 3.7f, 3.5f}; + const std::array SLOPE_SCALES = { 2.7f, 3.0f, 3.7f, 3.5f }; const float CONVERT_BIAS = 100.0f; const float MIN_SCALE_DIVISOR = 0.5f; @@ -376,8 +376,8 @@ void RenderShadowSetup::calculateBiases() { float inverseResolution = 1.0f / (float)resolution; int resolutionScale = DEFAULT_RESOLUTION * inverseResolution; float convertedBias = _biasInput * (CONVERT_BIAS / resolutionScale); - std::vector localConstants = std::vector(4); - std::vector localSlopes = std::vector(4); + std::array localConstants; + std::array localSlopes; float scaleFactor = 1.0f; for (int i = 0; i < SHADOW_CASCADE_MAX_COUNT; i++) { diff --git a/libraries/render-utils/src/RenderShadowTask.h b/libraries/render-utils/src/RenderShadowTask.h index aad40de028..ceca28cec8 100755 --- a/libraries/render-utils/src/RenderShadowTask.h +++ b/libraries/render-utils/src/RenderShadowTask.h @@ -147,7 +147,7 @@ private: bool changeInDefaultConfigValues{ false }; bool distanceTriggeredByConfig{ false }; bool biasTriggeredByConfig{ false }; - std::vector cacasdeDistances = std::vector(8); // 4 max then 4 min distances + std::array cacasdeDistances; // 4 max then 4 min distances void setConstantBias(int cascadeIndex, float value); void setSlopeBias(int cascadeIndex, float value); From 3a60bc6a135138504724d78a93704326a111f98f Mon Sep 17 00:00:00 2001 From: raveenajain Date: Thu, 27 Jun 2019 11:52:43 -0700 Subject: [PATCH 8/8] clang braces fix --- libraries/render-utils/src/RenderShadowTask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp index 6227a0382b..f54b2e563e 100755 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -366,7 +366,7 @@ void RenderShadowSetup::configure(const Config& configuration) { void RenderShadowSetup::calculateBiases() { // slope scaling values derived from ratio between original constantBias and slopeBias pairs - const std::array SLOPE_SCALES = { 2.7f, 3.0f, 3.7f, 3.5f }; + const std::array SLOPE_SCALES = {{ 2.7f, 3.0f, 3.7f, 3.5f }}; const float CONVERT_BIAS = 100.0f; const float MIN_SCALE_DIVISOR = 0.5f;