diff options
Diffstat (limited to 'indra/newview/app_settings/shaders/class1/deferred')
3 files changed, 131 insertions, 9 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl index e71d080fc5..6ab966ae01 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl @@ -383,7 +383,8 @@ vec3 pbrIbl(vec3 diffuseColor,              vec3 irradiance, // irradiance map sample              float ao,       // ambient occlusion factor              float nv,       // normal dot view vector -            float perceptualRough) +            float perceptualRough, +            out vec3 specContrib)  {      // retrieve a scale and bias to F0. See [1], Figure 3  	vec2 brdf = BRDF(clamp(nv, 0, 1), 1.0-perceptualRough); @@ -393,9 +394,24 @@ vec3 pbrIbl(vec3 diffuseColor,  	vec3 diffuse = diffuseLight * diffuseColor;  	vec3 specular = specularLight * (specularColor * brdf.x + brdf.y); +    specContrib = specular * ao; +  	return (diffuse + specular*0.5) * ao;  //reduce by half to place in appropriate color space for atmospherics  } +vec3 pbrIbl(vec3 diffuseColor, +            vec3 specularColor, +            vec3 radiance, // radiance map sample +            vec3 irradiance, // irradiance map sample +            float ao,       // ambient occlusion factor +            float nv,       // normal dot view vector +            float perceptualRough) +{ +    vec3 specContrib; +    return pbrIbl(diffuseColor, specularColor, radiance, irradiance, ao, nv, perceptualRough, specContrib); +} + +  // Encapsulate the various inputs used by the various functions in the shading equation  // We store values in this struct to simplify the integration of alternative implementations  // of the shading terms, outlined in the Readme.MD Appendix. @@ -460,7 +476,8 @@ vec3 pbrPunctual(vec3 diffuseColor, vec3 specularColor,                      float metallic,                      vec3 n, // normal                      vec3 v, // surface point to camera -                    vec3 l) //surface point to light +                    vec3 l, //surface point to light +                    out vec3 specContrib) //specular contribution (exposed to alpha shaders to calculate "glare")  {      // make sure specular highlights from punctual lights don't fall off of polished surfaces      perceptualRoughness = max(perceptualRoughness, 8.0/255.0); @@ -506,17 +523,30 @@ vec3 pbrPunctual(vec3 diffuseColor, vec3 specularColor,  	float G = geometricOcclusion(pbrInputs);  	float D = microfacetDistribution(pbrInputs); -	const vec3 u_LightColor = vec3(1.0); -  	// Calculation of analytical lighting contribution  	vec3 diffuseContrib = (1.0 - F) * diffuse(pbrInputs); -	vec3 specContrib = F * G * D / (4.0 * NdotL * NdotV); +	specContrib = F * G * D / (4.0 * NdotL * NdotV);  	// Obtain final intensity as reflectance (BRDF) scaled by the energy of the light (cosine law) -	vec3 color = NdotL * u_LightColor * (diffuseContrib + specContrib); +	vec3 color = NdotL * (diffuseContrib + specContrib); + +    specContrib *= NdotL; +    specContrib = max(specContrib, vec3(0));      return color;  } +vec3 pbrPunctual(vec3 diffuseColor, vec3 specularColor,  +                    float perceptualRoughness,  +                    float metallic, +                    vec3 n, // normal +                    vec3 v, // surface point to camera +                    vec3 l) //surface point to light +{ +    vec3 specContrib; + +    return pbrPunctual(diffuseColor, specularColor, perceptualRoughness, metallic, n, v, l, specContrib); +} +  void calcDiffuseSpecular(vec3 baseColor, float metallic, inout vec3 diffuseColor, inout vec3 specularColor)  {      vec3 f0 = vec3(0.04); @@ -525,15 +555,19 @@ void calcDiffuseSpecular(vec3 baseColor, float metallic, inout vec3 diffuseColor      specularColor = mix(f0, baseColor, metallic);  } -vec3 pbrBaseLight(vec3 diffuseColor, vec3 specularColor, float metallic, vec3 v, vec3 norm, float perceptualRoughness, vec3 light_dir, vec3 sunlit, float scol, vec3 radiance, vec3 irradiance, vec3 colorEmissive, float ao, vec3 additive, vec3 atten) +vec3 pbrBaseLight(vec3 diffuseColor, vec3 specularColor, float metallic, vec3 v, vec3 norm, float perceptualRoughness, vec3 light_dir, vec3 sunlit, float scol, vec3 radiance, vec3 irradiance, vec3 colorEmissive, float ao, vec3 additive, vec3 atten, out vec3 specContrib)  {      vec3 color = vec3(0);      float NdotV = clamp(abs(dot(norm, v)), 0.001, 1.0); -    color += pbrIbl(diffuseColor, specularColor, radiance, irradiance, ao, NdotV, 0.2); +    vec3 ibl_spec; +    color += pbrIbl(diffuseColor, specularColor, radiance, irradiance, ao, NdotV, 0.2, ibl_spec); -    color += pbrPunctual(diffuseColor, specularColor, perceptualRoughness, metallic, norm, v, normalize(light_dir)) * sunlit * 2.75 * scol; +    color += pbrPunctual(diffuseColor, specularColor, perceptualRoughness, metallic, norm, v, normalize(light_dir), specContrib) * sunlit * 2.75 * scol; +    specContrib *= sunlit * 2.75 * scol; +    specContrib += ibl_spec; +      color += colorEmissive*0.5;      color = atmosFragLightingLinear(color, additive, atten); @@ -542,6 +576,12 @@ vec3 pbrBaseLight(vec3 diffuseColor, vec3 specularColor, float metallic, vec3 v,      return color;  } +vec3 pbrBaseLight(vec3 diffuseColor, vec3 specularColor, float metallic, vec3 v, vec3 norm, float perceptualRoughness, vec3 light_dir, vec3 sunlit, float scol, vec3 radiance, vec3 irradiance, vec3 colorEmissive, float ao, vec3 additive, vec3 atten) +{ +    vec3 specContrib; +    return pbrBaseLight(diffuseColor, specularColor, metallic, v, norm, perceptualRoughness, light_dir, sunlit, scol, radiance, irradiance, colorEmissive, ao, additive, atten, specContrib); +} +  uniform vec4 waterPlane;  uniform float waterSign; diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl new file mode 100644 index 0000000000..4b98e6708f --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -0,0 +1,49 @@ +/** +* @file materialF.glsl +* +* $LicenseInfo:firstyear=2023&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2023, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA +* $/LicenseInfo$ +*/ + +/*[EXTRA_CODE_HERE]*/ + +// debug stub + +#define DIFFUSE_ALPHA_MODE_BLEND    1 + +#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND) +out vec4 frag_color; +#else +out vec4 frag_data[3]; +#endif + +void main() +{ +#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND) +    frag_color = vec4(0.5, 0, 1, 0.5); +#else // mode is not DIFFUSE_ALPHA_MODE_BLEND, encode to gbuffer  +    // deferred path               // See: C++: addDeferredAttachment(), shader: softenLightF.glsl +    frag_data[0] = vec4(0.5, 0, 1, 0);    // gbuffer is sRGB for legacy materials +    frag_data[1] = vec4(0); // XYZ = Specular color. W = Specular exponent. +    frag_data[2] = vec4(0); // XY = Normal.  Z = Env. intensity. W = 1 skip atmos (mask off fog) +#endif +} + diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl new file mode 100644 index 0000000000..3f3c11517e --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl @@ -0,0 +1,33 @@ +/**  + * @file pbralphaF.glsl + * + * $LicenseInfo:firstyear=2023&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2023, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + + // debug stub + +out vec4 frag_color; + +void main() +{ +    frag_color = vec4(1.0, 0, 0.5, 0.5); +}
\ No newline at end of file | 
