3
0
Fork 0
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:
samcake 2016-01-20 18:32:44 -08:00
parent 4e5869b247
commit 8d1ab01018
8 changed files with 29 additions and 8 deletions

View file

@ -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; },

View file

@ -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()) {

View file

@ -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

View file

@ -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);

View file

@ -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)

View file

@ -113,6 +113,9 @@ float getFrameDithering() {
return params._ditheringInfo.y;
}
float getFalloffBias() {
return params._ditheringInfo.z;
}
float getNumSamples() {
return params._sampleInfo.x;

View file

@ -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) {

View file

@ -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;