From 2960ad845c0ddf0b0904d3e3c4b366c0b8dc607e Mon Sep 17 00:00:00 2001 From: Olivier Prat Date: Wed, 10 Jan 2018 10:55:45 +0100 Subject: [PATCH] Fixed weird rendering bug. --- libraries/render-utils/src/LightAmbient.slh | 2 +- libraries/render-utils/src/LightingModel.slh | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/libraries/render-utils/src/LightAmbient.slh b/libraries/render-utils/src/LightAmbient.slh index 3decdbcf7c..eb565d60e4 100644 --- a/libraries/render-utils/src/LightAmbient.slh +++ b/libraries/render-utils/src/LightAmbient.slh @@ -16,7 +16,7 @@ uniform samplerCube skyboxMap; vec4 evalSkyboxLight(vec3 direction, float lod) { // textureQueryLevels is not available until #430, so we require explicit lod // float mipmapLevel = lod * textureQueryLevels(skyboxMap); - float filterLod = textureQueryLod(skyboxMap, direction); + float filterLod = textureQueryLod(skyboxMap, direction).x; // Keep texture filtering LOD as limit to prevent aliasing on specular reflection lod = max(lod, filterLod); return textureLod(skyboxMap, direction, lod); diff --git a/libraries/render-utils/src/LightingModel.slh b/libraries/render-utils/src/LightingModel.slh index 279a010cf4..d96c565b81 100644 --- a/libraries/render-utils/src/LightingModel.slh +++ b/libraries/render-utils/src/LightingModel.slh @@ -133,16 +133,19 @@ SurfaceData initSurfaceData(float roughness, vec3 normal, vec3 eyeDir) { SurfaceData surface; surface.eyeDir = eyeDir; surface.normal = normal; - surface.lightDir = vec3(0,0,0); - surface.halfDir = vec3(0,0,0); surface.roughness = mix(0.001, 1.0, roughness); surface.roughness2 = surface.roughness * surface.roughness; surface.roughness4 = surface.roughness2 * surface.roughness2; surface.ndotv = clamp(dot(normal, eyeDir), 0.0, 1.0); + surface.smithInvG1NdotV = evalSmithInvG1(surface.roughness4, surface.ndotv); + + // These values will be set when we know the light direction, in updateSurfaceDataWithLight surface.ndoth = 0.0; surface.ndotl = 0.0; surface.ldoth = 0.0; - surface.smithInvG1NdotV = evalSmithInvG1(surface.roughness4, surface.ndotv); + surface.lightDir = vec3(0,0,1); + surface.halfDir = vec3(0,0,1); + return surface; }