From 361371b2a9909bc21a6f72af97cce4f7de0d8e5a Mon Sep 17 00:00:00 2001 From: Olivier Prat Date: Fri, 5 Apr 2019 08:58:06 +0200 Subject: [PATCH] Added flag to enable / disable ambient fresnel LUT --- libraries/render-utils/src/LightAmbient.slh | 8 ++++---- libraries/render-utils/src/LightingModel.cpp | 4 ++++ libraries/render-utils/src/render-utils/ShaderConstants.h | 4 ++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/libraries/render-utils/src/LightAmbient.slh b/libraries/render-utils/src/LightAmbient.slh index 8e7abd8861..cb76a8e545 100644 --- a/libraries/render-utils/src/LightAmbient.slh +++ b/libraries/render-utils/src/LightAmbient.slh @@ -30,13 +30,13 @@ vec4 evalSkyboxLight(vec3 direction, float lod) { LAYOUT(binding=RENDER_UTILS_TEXTURE_AMBIENT_FRESNEL) uniform sampler2D ambientFresnelLUT; vec3 fresnelSchlickAmbient(vec3 fresnelColor, float ndotd, float roughness) { -#if 0 +#if RENDER_UTILS_ENABLE_AMBIENT_FRESNEL_LUT + vec2 ambientFresnel = texture(ambientFresnelLUT, vec2(roughness, ndotd)).xy; + return fresnelColor * ambientFresnel.x + vec3(ambientFresnel.y); +#else float gloss = 1.0-roughness; float f = pow(1.0 - ndotd, 5.0); return fresnelColor + (max(vec3(gloss), fresnelColor) - fresnelColor) * f; -#else - vec2 ambientFresnel = texture(ambientFresnelLUT, vec2(roughness, ndotd)).xy; - return fresnelColor * ambientFresnel.x + vec3(ambientFresnel.y); #endif } diff --git a/libraries/render-utils/src/LightingModel.cpp b/libraries/render-utils/src/LightingModel.cpp index cd49acd3da..5a9ab310c6 100644 --- a/libraries/render-utils/src/LightingModel.cpp +++ b/libraries/render-utils/src/LightingModel.cpp @@ -12,6 +12,8 @@ #include "RandomAndNoise.h" #include "BRDF.h" +#include "render-utils/ShaderConstants.h" + #include #include @@ -21,6 +23,7 @@ LightingModel::LightingModel() { Parameters parameters; _parametersBuffer = gpu::BufferView(std::make_shared(sizeof(Parameters), (const gpu::Byte*) ¶meters, sizeof(Parameters))); +#if RENDER_UTILS_ENABLE_AMBIENT_FRESNEL_LUT if (!_ambientFresnelLUT) { // Code taken from the IntegrateBRDF method as described in this talk : // https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf @@ -88,6 +91,7 @@ LightingModel::LightingModel() { _ambientFresnelLUT->assignStoredMip(0, N_roughness * N_NdotV * sizeof(LUTVector::value_type), (const gpu::Byte*)lut.data()); } +#endif } void LightingModel::setUnlit(bool enable) { diff --git a/libraries/render-utils/src/render-utils/ShaderConstants.h b/libraries/render-utils/src/render-utils/ShaderConstants.h index ffa580503b..76c8dd4981 100644 --- a/libraries/render-utils/src/render-utils/ShaderConstants.h +++ b/libraries/render-utils/src/render-utils/ShaderConstants.h @@ -14,6 +14,10 @@ #ifndef RENDER_UTILS_SHADER_CONSTANTS_H #define RENDER_UTILS_SHADER_CONSTANTS_H +// Feature enabling flags (possibly need to rebuild shaders if this changes) +#define RENDER_UTILS_ENABLE_AMBIENT_FRESNEL_LUT 1 + +// Binding slots #define RENDER_UTILS_ATTR_TEXCOORD01 0 #define RENDER_UTILS_ATTR_COLOR 1