From a649d9edb06d1719c217d1c3b7005abac8f8b647 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Tue, 19 May 2015 18:02:20 -0700 Subject: [PATCH] more fooling around --- libraries/render-utils/src/DeferredBuffer.slh | 2 +- .../render-utils/src/DeferredBufferWrite.slh | 2 +- .../render-utils/src/DeferredGlobalLight.slh | 16 ++++++++++------ libraries/render-utils/src/DeferredLighting.slh | 7 ++++--- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/libraries/render-utils/src/DeferredBuffer.slh b/libraries/render-utils/src/DeferredBuffer.slh index fc32e81b9d..885fa96543 100755 --- a/libraries/render-utils/src/DeferredBuffer.slh +++ b/libraries/render-utils/src/DeferredBuffer.slh @@ -65,7 +65,7 @@ DeferredFragment unpackDeferredFragment(vec2 texcoord) { frag.diffuse = frag.diffuseVal.xyz; frag.opacity = frag.diffuseVal.w; frag.specular = frag.specularVal.xyz; - frag.gloss = frag.specularVal.w * 128.0; // bring back gloss to [0, 128] + frag.gloss = frag.specularVal.w; return frag; } diff --git a/libraries/render-utils/src/DeferredBufferWrite.slh b/libraries/render-utils/src/DeferredBufferWrite.slh index 15432f59c0..ea14830de2 100755 --- a/libraries/render-utils/src/DeferredBufferWrite.slh +++ b/libraries/render-utils/src/DeferredBufferWrite.slh @@ -48,7 +48,7 @@ void packDeferredFragment(vec3 normal, float alpha, vec3 diffuse, vec3 specular, } else { gl_FragData[1] = vec4(bestFitNormal(normal), 1.0); } - gl_FragData[2] = vec4(specular, shininess / 128.0); + gl_FragData[2] = vec4(specular, shininess / 100.0); } void packDeferredFragmentLightmap(vec3 normal, float alpha, vec3 diffuse, vec3 specular, float shininess, vec3 emissive) { diff --git a/libraries/render-utils/src/DeferredGlobalLight.slh b/libraries/render-utils/src/DeferredGlobalLight.slh index 6cf9e085ae..601f38d616 100755 --- a/libraries/render-utils/src/DeferredGlobalLight.slh +++ b/libraries/render-utils/src/DeferredGlobalLight.slh @@ -92,14 +92,18 @@ vec3 evalAmbienSphereGlobalColor(float shadowAttenuation, vec3 position, vec3 no vec3 fragNormal = normalize(vec3(invViewMat * vec4(normal, 0.0))); vec4 fragEyeVector = invViewMat * vec4(-position, 0.0); vec3 fragEyeDir = normalize(fragEyeVector.xyz); - - vec3 ambientNormal = fragNormal.xyz; - vec3 color = diffuse.rgb * evalSphericalLight(ambientSphere, ambientNormal).xyz * getLightAmbientIntensity(light); + + vec3 ambientLight = diffuse.rgb * evalSphericalLight(ambientSphere, fragNormal).xyz * getLightAmbientIntensity(light); vec4 shading = evalFragShading(fragNormal, -getLightDirection(light), fragEyeDir, specular, gloss); - color += vec3(diffuse + shading.rgb) * shading.w * shadowAttenuation * getLightColor(light) * getLightIntensity(light); + vec3 lightIrradiance = (getLightColor(light)) * getLightIntensity(light); + vec3 diffuseLight = (diffuse * (vec3(1.0) - specular) + specular) * shading.w * shadowAttenuation * lightIrradiance; + + vec3 specularLight = shading.rgb * shading.w * shadowAttenuation * lightIrradiance; + + vec3 color = ambientLight + diffuseLight + specularLight; return color; } @@ -116,11 +120,11 @@ vec3 evalSkyboxGlobalColor(float shadowAttenuation, vec3 position, vec3 normal, vec4 shading = evalFragShading(fragNormal, -getLightDirection(light), fragEyeDir, specular, gloss); vec3 reflectedDir = reflect(-fragEyeDir, fragNormal); - vec3 skyTexel = evalSkyboxLight(reflectedDir, 1 - gloss/128).xyz; + vec3 skyTexel = evalSkyboxLight(reflectedDir, 1 - gloss).xyz; vec3 lightIrradiance = (getLightColor(light)) * getLightIntensity(light); - vec3 diffuseLight = diffuse * shading.w * shadowAttenuation * lightIrradiance; + vec3 diffuseLight = (diffuse * (vec3(1.0) - specular) + skyTexel * specular) * shading.w * shadowAttenuation * lightIrradiance; vec3 specularLight = shading.rgb * skyTexel * shading.w * shadowAttenuation * lightIrradiance; diff --git a/libraries/render-utils/src/DeferredLighting.slh b/libraries/render-utils/src/DeferredLighting.slh index 8c99f8ed6d..721a3ff9c7 100755 --- a/libraries/render-utils/src/DeferredLighting.slh +++ b/libraries/render-utils/src/DeferredLighting.slh @@ -22,13 +22,14 @@ vec4 evalPBRShading(vec3 fragNormal, vec3 fragLightDir, vec3 fragEyeDir, vec3 sp vec3 halfDir = normalize(fragEyeDir + fragLightDir); // float specularPower = pow(facingLight * max(0.0, dot(halfDir, fragNormal)), gloss * 128.0); - float specularPower = pow(max(0.0, dot(halfDir, fragNormal)), gloss); - specularPower *= (gloss * 0.125 + 0.25); + float thegloss = pow(2.0, 13.0 * gloss); + float specularPower = pow(max(0.0, dot(halfDir, fragNormal)), thegloss); + specularPower *= (thegloss * 0.125 + 0.25); float shlickPower = (1.0 - dot(fragLightDir,halfDir)); float shlickPower2 = shlickPower * shlickPower; float shlickPower5 = shlickPower2 * shlickPower2 * shlickPower; - vec3 schlick = specular * (1.0 - shlickPower5) + vec3(shlickPower5); + vec3 schlick = specular + (vec3(1.0) - specular) * shlickPower5 / (4.0 - 3.0 * gloss); vec3 reflect = specularPower * schlick; return vec4(reflect, diffuse);