mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-30 21:44:14 +02:00
exposing one more parameter
This commit is contained in:
parent
4e5869b247
commit
8d1ab01018
8 changed files with 29 additions and 8 deletions
examples/utilities/tools
libraries
|
@ -129,6 +129,11 @@ panel.newCheckbox("Ambient Occlusion Dithering",
|
|||
function() { return Render.ambientOcclusion.ditheringEnabled; },
|
||||
function (value) { return (value); });
|
||||
|
||||
panel.newSlider("Ambient Occlusion Falloff Bias", 0.0, 0.2,
|
||||
function (value) { Render.ambientOcclusion.falloffBias = value; },
|
||||
function() { return Render.ambientOcclusion.falloffBias; },
|
||||
function (value) { return (value.toFixed(2)); });
|
||||
|
||||
panel.newSlider("Ambient Occlusion Edge Sharpness", 0.0, 1.0,
|
||||
function (value) { Render.ambientOcclusion.edgeSharpness = value; },
|
||||
function() { return Render.ambientOcclusion.edgeSharpness; },
|
||||
|
|
|
@ -246,6 +246,15 @@ void AmbientOcclusionEffect::setDithering(bool enabled) {
|
|||
}
|
||||
}
|
||||
|
||||
void AmbientOcclusionEffect::setFalloffBias(float bias) {
|
||||
bias = std::max(0.0f, std::min(bias, 0.2f));
|
||||
if (bias != getFalloffBias()) {
|
||||
auto& current = _parametersBuffer.edit<Parameters>()._ditheringInfo;
|
||||
current.z = (float)bias;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void AmbientOcclusionEffect::setNumSamples(int numSamples) {
|
||||
numSamples = std::max(1.f, (float) numSamples);
|
||||
if (numSamples != getNumSamples()) {
|
||||
|
|
|
@ -37,6 +37,10 @@ public:
|
|||
void setDithering(bool enabled);
|
||||
bool isDitheringEnabled() const { return _parametersBuffer.get<Parameters>()._ditheringInfo.x; }
|
||||
|
||||
// Faloff Bias
|
||||
void setFalloffBias(float bias);
|
||||
int getFalloffBias() const { return (int)_parametersBuffer.get<Parameters>()._ditheringInfo.z; }
|
||||
|
||||
// Number of samples per pixel to evaluate the Obscurance
|
||||
void setNumSamples(int numSamples);
|
||||
int getNumSamples() const { return (int)_parametersBuffer.get<Parameters>()._sampleInfo.x; }
|
||||
|
@ -94,8 +98,8 @@ private:
|
|||
glm::vec4 _resolutionInfo{ -1.0, 0.0, 0.0, 0.0 };
|
||||
// radius info is { R, R^2, 1 / R^6, ObscuranceScale}
|
||||
glm::vec4 _radiusInfo{ 0.5, 0.5 * 0.5, 1.0 / (0.25 * 0.25 * 0.25), 1.0 };
|
||||
// Dithering info
|
||||
glm::vec4 _ditheringInfo{ 0.0, 0.0, 0.0, 0.0 };
|
||||
// Dithering info
|
||||
glm::vec4 _ditheringInfo{ 0.0, 0.0, 0.01, 0.0 };
|
||||
// Sampling info
|
||||
glm::vec4 _sampleInfo{ 11.0, 1.0/11.0, 7.0, 1.0 };
|
||||
// Blurring info
|
||||
|
|
|
@ -180,6 +180,7 @@ void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const Rend
|
|||
_jobs[_occlusionJobIndex].edit<AmbientOcclusionEffect>().setNumSamples(renderContext->getAmbientOcclusion().numSamples);
|
||||
_jobs[_occlusionJobIndex].edit<AmbientOcclusionEffect>().setNumSpiralTurns(renderContext->getAmbientOcclusion().numSpiralTurns);
|
||||
_jobs[_occlusionJobIndex].edit<AmbientOcclusionEffect>().setDithering(renderContext->getAmbientOcclusion().ditheringEnabled);
|
||||
_jobs[_occlusionJobIndex].edit<AmbientOcclusionEffect>().setFalloffBias(renderContext->getAmbientOcclusion().falloffBias);
|
||||
_jobs[_occlusionJobIndex].edit<AmbientOcclusionEffect>().setEdgeSharpness(renderContext->getAmbientOcclusion().edgeSharpness);
|
||||
_jobs[_occlusionJobIndex].edit<AmbientOcclusionEffect>().setBlurRadius(renderContext->getAmbientOcclusion().blurRadius);
|
||||
_jobs[_occlusionJobIndex].edit<AmbientOcclusionEffect>().setBlurDeviation(renderContext->getAmbientOcclusion().blurDeviation);
|
||||
|
|
|
@ -76,6 +76,7 @@ namespace RenderScripting {
|
|||
Q_PROPERTY(int numSamples MEMBER numSamples)
|
||||
Q_PROPERTY(float numSpiralTurns MEMBER numSpiralTurns)
|
||||
Q_PROPERTY(bool ditheringEnabled MEMBER ditheringEnabled)
|
||||
Q_PROPERTY(float falloffBias MEMBER falloffBias)
|
||||
Q_PROPERTY(float edgeSharpness MEMBER edgeSharpness)
|
||||
Q_PROPERTY(int blurRadius MEMBER blurRadius)
|
||||
Q_PROPERTY(float blurDeviation MEMBER blurDeviation)
|
||||
|
|
|
@ -113,6 +113,9 @@ float getFrameDithering() {
|
|||
return params._ditheringInfo.y;
|
||||
}
|
||||
|
||||
float getFalloffBias() {
|
||||
return params._ditheringInfo.z;
|
||||
}
|
||||
|
||||
float getNumSamples() {
|
||||
return params._sampleInfo.x;
|
||||
|
|
|
@ -84,13 +84,10 @@ float sampleAO(in ivec2 side, in ivec2 ssC, in vec3 C, in vec3 n_C, in float ssD
|
|||
float vv = dot(v, v);
|
||||
float vn = dot(v, n_C);
|
||||
|
||||
const float bias = 0.01;
|
||||
const float epsilon = 0.01;
|
||||
float radius2 = getRadius2();
|
||||
|
||||
// Fall off function as recommended in SAO paper
|
||||
float f = max(radius2 - vv, 0.0);
|
||||
return f * f * f * max((vn - bias) / (epsilon + vv), 0.0);
|
||||
const float epsilon = 0.01;
|
||||
float f = max(getRadius2() - vv, 0.0);
|
||||
return f * f * f * max((vn - getFalloffBias()) / (epsilon + vv), 0.0);
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
|
|
|
@ -80,6 +80,7 @@ public:
|
|||
int numSamples = 11; // Num Samples per pixel
|
||||
float numSpiralTurns = 7.0f;
|
||||
bool ditheringEnabled = true;
|
||||
float falloffBias = 0.01f;
|
||||
float edgeSharpness = 1.0f;
|
||||
int blurRadius = 4;
|
||||
float blurDeviation = 2.5f;
|
||||
|
|
Loading…
Reference in a new issue