diff options
| author | Jonathan "Geenz" Goodman <geenz@geenzo.com> | 2023-06-11 20:56:02 -0700 | 
|---|---|---|
| committer | Jonathan "Geenz" Goodman <geenz@geenzo.com> | 2023-06-11 20:56:02 -0700 | 
| commit | ffac2df6caedf48f30b3913386ea6e4c82ae5a0b (patch) | |
| tree | c5e5a0541b318551cc04b6b7108f8f9025c6b72d /indra/newview/app_settings/shaders/class1 | |
| parent | 47e311d6e8b9996de3e0a1ac75c13724ce7735aa (diff) | |
| parent | 1ebfc1876ec3383067a2399218037a33601b04d5 (diff) | |
Merge branch 'DRTVWR-559' into DRTVWR-583-glossy-ssr
Diffstat (limited to 'indra/newview/app_settings/shaders/class1')
19 files changed, 771 insertions, 32 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl index 55e45ce0af..c8eaba6418 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl @@ -387,7 +387,7 @@ vec3 pbrIbl(vec3 diffuseColor,  {      // retrieve a scale and bias to F0. See [1], Figure 3  	vec2 brdf = BRDF(clamp(nv, 0, 1), 1.0-perceptualRough); -	vec3 diffuseLight = irradiance*1.25;  //magic 1.25 to balance with legacy materials +	vec3 diffuseLight = irradiance;  	vec3 specularLight = radiance;  	vec3 diffuse = diffuseLight * diffuseColor; @@ -563,7 +563,7 @@ vec3 pbrBaseLight(vec3 diffuseColor, vec3 specularColor, float metallic, vec3 v,      vec3 ibl_spec;      color += pbrIbl(diffuseColor, specularColor, radiance, irradiance, ao, NdotV, perceptualRoughness, ibl_spec); -    color += pbrPunctual(diffuseColor, specularColor, perceptualRoughness, metallic, norm, v, normalize(light_dir), specContrib) * sunlit * 3.9 * scol; //magic number to balance with legacy materials +    color += pbrPunctual(diffuseColor, specularColor, perceptualRoughness, metallic, norm, v, normalize(light_dir), specContrib) * sunlit * 3.0 * scol; //magic number to balance with legacy materials      specContrib *= sunlit * 2.75 * scol;      specContrib += ibl_spec; diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl index 385cd51969..b752307d13 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl @@ -44,7 +44,7 @@ vec3 legacy_adjust_fullbright(vec3 c);  vec3 legacy_adjust(vec3 c);  vec3 linear_to_srgb(vec3 cl);  vec3 atmosFragLighting(vec3 light, vec3 additive, vec3 atten); -void calcAtmosphericVars(vec3 inPositionEye, vec3 light_dir, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten, bool use_ao); +void calcAtmosphericVars(vec3 inPositionEye, vec3 light_dir, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten);  #ifdef HAS_ALPHA_MASK  uniform float minimum_alpha; @@ -85,7 +85,7 @@ void main()      vec3 amblit;      vec3 additive;      vec3 atten; -    calcAtmosphericVars(pos.xyz, vec3(0), 1.0, sunlit, amblit, additive, atten, false); +    calcAtmosphericVars(pos.xyz, vec3(0), 1.0, sunlit, amblit, additive, atten);  #endif  #ifdef WATER_FOG diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl index ee425f97fc..c8afacf9bb 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl @@ -47,6 +47,6 @@ void main()      tc.y -= 0.1; // HACK - nudge exposure sample down a little bit to favor ground over sky      vec3 c = texture(diffuseRect, tc).rgb + texture(emissiveRect, tc).rgb;      float L = lum(c); -    frag_color = vec4(L); +    frag_color = vec4(max(L, 0.0));  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbralphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbralphaV.glsl index e9515a9187..6b960fae33 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pbralphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pbralphaV.glsl @@ -71,6 +71,7 @@ flat out float vary_sign;  out vec3 vary_normal;  vec2 texture_transform(vec2 vertex_texcoord, vec4[2] khr_gltf_transform, mat4 sl_animation_transform); +vec3 tangent_space_transform(vec4 vertex_tangent, vec3 vertex_normal, vec4[2] khr_gltf_transform, mat4 sl_animation_transform);  void main() @@ -102,9 +103,11 @@ void main()    	vec3 t = normal_matrix * tangent.xyz;  #endif //HAS_SKIN -    vary_tangent = normalize(t); +    n = normalize(n); + +    vary_tangent = normalize(tangent_space_transform(vec4(t, tangent.w), n, texture_normal_transform, texture_matrix0));      vary_sign = tangent.w; -    vary_normal = normalize(n); +    vary_normal = n;  	vertex_color = diffuse_color; diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueV.glsl index e2c23ac8f0..160ae7a215 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueV.glsl @@ -61,6 +61,7 @@ flat out float vary_sign;  out vec3 vary_normal;  vec2 texture_transform(vec2 vertex_texcoord, vec4[2] khr_gltf_transform, mat4 sl_animation_transform); +vec3 tangent_space_transform(vec4 vertex_tangent, vec3 vertex_normal, vec4[2] khr_gltf_transform, mat4 sl_animation_transform);  void main()  { @@ -91,9 +92,11 @@ void main()  	vec3 t = normal_matrix * tangent.xyz;  #endif -    vary_tangent = normalize(t); +    n = normalize(n); + +    vary_tangent = normalize(tangent_space_transform(vec4(t, tangent.w), n, texture_normal_transform, texture_matrix0));      vary_sign = tangent.w; -    vary_normal = normalize(n); +    vary_normal = n;  	vertex_color = diffuse_color;  } @@ -107,8 +110,6 @@ uniform mat4 modelview_projection_matrix;  uniform mat4 texture_matrix0;  uniform vec4[2] texture_base_color_transform; -uniform vec4[2] texture_normal_transform; -uniform vec4[2] texture_metallic_roughness_transform;  uniform vec4[2] texture_emissive_transform;  in vec3 position; diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl index a32296369c..53e4f02314 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl @@ -102,16 +102,12 @@ vec3 toneMap(vec3 color)  {  #ifndef NO_POST      float exp_scale = texture(exposureMap, vec2(0.5,0.5)).r; - +          color *= exposure * exp_scale;      color = toneMapACES_Hill(color); -#else -    color *= 0.6;  #endif -    color = linear_to_srgb(color); -      return color;  } @@ -158,10 +154,10 @@ float noise(vec2 x) {  vec3 legacyGamma(vec3 color)  { -    color = 1. - clamp(color, vec3(0.), vec3(1.)); -    color = 1. - pow(color, vec3(gamma)); // s/b inverted already CPU-side +    vec3 c = 1. - clamp(color, vec3(0.), vec3(1.)); +    c = 1. - pow(c, vec3(gamma)); // s/b inverted already CPU-side -    return color; +    return c;  }  void main()  @@ -169,12 +165,14 @@ void main()      //this is the one of the rare spots where diffuseRect contains linear color values (not sRGB)      vec4 diff = texture(diffuseRect, vary_fragcoord); -    diff.rgb = toneMap(diff.rgb); -  #ifdef LEGACY_GAMMA -#ifndef NO_POST +    diff.rgb = linear_to_srgb(diff.rgb);      diff.rgb = legacyGamma(diff.rgb); +#else +#ifndef NO_POST +    diff.rgb = toneMap(diff.rgb);  #endif +    diff.rgb = linear_to_srgb(diff.rgb);  #endif      vec2 tc = vary_fragcoord.xy*screen_res*4.0; diff --git a/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl b/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl index 71f7ec52c4..636dfed4ba 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl @@ -76,3 +76,47 @@ vec2 texture_transform(vec2 vertex_texcoord, vec4[2] khr_gltf_transform, mat4 sl      return texcoord;  } + +// Take the rotation only from both transforms and apply to the tangent. This +// accounts for the change of the topology of the normal texture when a texture +// rotation is applied to it. +// *HACK: Assume the imported GLTF model did not have both normal texture +// transforms and tangent vertices. The use of this function is inconsistent +// with the GLTF sample viewer when that is the case. See getNormalInfo in +// https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Viewer/47a191931461a6f2e14de48d6da0f0eb6ec2d147/source/Renderer/shaders/material_info.glsl +// We may want to account for this case during GLTF model import. +// -Cosmic,2023-06-06 +vec3 tangent_space_transform(vec4 vertex_tangent, vec3 vertex_normal, vec4[2] khr_gltf_transform, mat4 sl_animation_transform) +{ +    vec2 weights = vec2(0, 1); + +    // Apply texture animation first to avoid shearing and other artifacts (rotation only) +    mat2 sl_rot_scale; +    sl_rot_scale[0][0] = sl_animation_transform[0][0]; +    sl_rot_scale[0][1] = sl_animation_transform[0][1]; +    sl_rot_scale[1][0] = sl_animation_transform[1][0]; +    sl_rot_scale[1][1] = sl_animation_transform[1][1]; +    weights = sl_rot_scale * weights; +    // Remove scale +    weights = normalize(weights); + +    // Convert to left-handed coordinate system +    weights.y = -weights.y; + +    // Apply KHR_texture_transform (rotation only) +    float khr_rotation = khr_gltf_transform[0].z; +    mat2 khr_rotation_mat = mat2( +        cos(khr_rotation),-sin(khr_rotation), +        sin(khr_rotation), cos(khr_rotation) +    ); +    weights = khr_rotation_mat * weights; + +    // Convert back to right-handed coordinate system +    weights.y = -weights.y; + +    // Similar to the MikkTSpace-compatible method of extracting the binormal +    // from the normal and tangent, as seen in the fragment shader +    vec3 vertex_binormal = vertex_tangent.w * cross(vertex_normal, vertex_tangent.xyz); + +    return (weights.x * vertex_binormal.xyz) + (weights.y * vertex_tangent.xyz); +} diff --git a/indra/newview/app_settings/shaders/class1/environment/srgbF.glsl b/indra/newview/app_settings/shaders/class1/environment/srgbF.glsl index 689c345b2c..31b02377da 100644 --- a/indra/newview/app_settings/shaders/class1/environment/srgbF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/srgbF.glsl @@ -113,18 +113,31 @@ vec3 inv_toneMapACES_Hill(vec3 color)      return color;  } +// adjust legacy colors to back out tonemapping and exposure  +//   NOTE: obsolete now that setting probe ambiance to zero removes tonemapping and exposure, but keeping for a minute +//   while that change goes through testing - davep 6/1/2023 +#define LEGACY_ADJUST 0 +  vec3 legacy_adjust(vec3 c)  { +#if LEGACY_ADJUST      vec3 desat = rgb2hsv(c.rgb);      desat.g *= 1.0-(1.0-desat.b)*0.5;      desat.b += (1.0-desat.b)*0.1f;      desat.rgb = hsv2rgb(desat);      return desat; +#else +    return c; +#endif  }  vec3 legacy_adjust_fullbright(vec3 c)  { -    float exp_scale = texture(exposureMap, vec2(0.5, 0.5)).r; +#if LEGACY_ADJUST +    float exp_scale = clamp(texture(exposureMap, vec2(0.5, 0.5)).r, 0.01, 10.0);      return c / exp_scale * 1.34; //magic 1.34 arrived at by binary search for a value that reproduces midpoint grey consistenty +#else +    return c; +#endif  } diff --git a/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl index 0c3ea4231e..75a327d3d7 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl @@ -38,15 +38,7 @@ vec4 sumLights(vec3 pos, vec3 norm, vec4 color)  	col.a = color.a;  	col.rgb = light_diffuse[1].rgb * calcDirectionalLight(norm, light_position[1].xyz); -	col.rgb = scaleDownLight(col.rgb); - -#if defined(LOCAL_LIGHT_KILL) -    col.rgb = vec3(0); -#endif - -#if !defined(SUNLIGHT_KILL) -	col.rgb += atmosAffectDirectionalLight(calcDirectionalLight(norm, light_position[0].xyz)); -#endif +    col.rgb += light_diffuse[1].rgb * sqrt(calcDirectionalLight(norm, -light_position[1].xyz)*0.5+0.25);  	col.rgb = min(col.rgb*color.rgb, 1.0);  	return col;	 diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl new file mode 100644 index 0000000000..48cf234aa0 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl @@ -0,0 +1,54 @@ +/**  + * @file class2\wl\atmosphericsF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, 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$ + */ + +vec3 getAdditiveColor(); +vec3 getAtmosAttenuation(); +vec3 scaleSoftClipFrag(vec3 light); + +vec3 srgb_to_linear(vec3 col); +vec3 linear_to_srgb(vec3 col); + +uniform float sky_hdr_scale; + +vec3 atmosFragLighting(vec3 light, vec3 additive, vec3 atten) +{  +    light *= atten.r; +    additive = srgb_to_linear(additive*2.0); +    // magic 1.25 here is to match the default RenderSkyHDRScale -- this parameter needs to be plumbed into sky settings or something +    // so it's available to all shaders that call atmosFragLighting instead of just softenLightF.glsl +    additive *= sky_hdr_scale; +    light += additive; +    return light; +} + +vec3 atmosFragLightingLinear(vec3 light, vec3 additive, vec3 atten) +{ +    return atmosFragLighting(light, additive, atten); +} + +vec3 atmosLighting(vec3 light) +{ +    return atmosFragLighting(light, getAdditiveColor(), getAtmosAttenuation()); +} diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl new file mode 100644 index 0000000000..437fa0a6d5 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl @@ -0,0 +1,159 @@ +/** + * @file class2\windlight\atmosphericsFuncs.glsl + * + * $LicenseInfo:firstyear=2022&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2022, 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$ + */ + +uniform vec3  lightnorm; +uniform vec3  sunlight_color; +uniform vec3  moonlight_color; +uniform int   sun_up_factor; +uniform vec3  ambient_color; +uniform vec3  blue_horizon; +uniform vec3  blue_density; +uniform float haze_horizon; +uniform float haze_density; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float distance_multiplier; +uniform float max_y; +uniform vec3  glow; +uniform float scene_light_strength; +uniform float sun_moon_glow_factor; +uniform float sky_hdr_scale; + +float getAmbientClamp() { return 1.0f; } + +vec3 srgb_to_linear(vec3 col); +vec3 legacy_adjust(vec3 col); + +// return colors in sRGB space +void calcAtmosphericVars(vec3 inPositionEye, vec3 light_dir, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, +                         out vec3 atten) +{ +    vec3 rel_pos = inPositionEye; + +    //(TERRAIN) limit altitude +    if (abs(rel_pos.y) > max_y) rel_pos *= (max_y / rel_pos.y); + +    vec3  rel_pos_norm = normalize(rel_pos); +    float rel_pos_len  = length(rel_pos); +     +    vec3  sunlight     = (sun_up_factor == 1) ? sunlight_color: moonlight_color; +     +    // sunlight attenuation effect (hue and brightness) due to atmosphere +    // this is used later for sunlight modulation at various altitudes +    vec3 light_atten = (blue_density + vec3(haze_density * 0.25)) * (density_multiplier * max_y); +    // I had thought blue_density and haze_density should have equal weighting, +    // but attenuation due to haze_density tends to seem too strong + +    vec3 combined_haze = blue_density + vec3(haze_density); +    vec3 blue_weight   = blue_density / combined_haze; +    vec3 haze_weight   = vec3(haze_density) / combined_haze; + +    //(TERRAIN) compute sunlight from lightnorm y component. Factor is roughly cosecant(sun elevation) (for short rays like terrain) +    float above_horizon_factor = 1.0 / max(1e-6, lightnorm.y); +    sunlight *= exp(-light_atten * above_horizon_factor);  // for sun [horizon..overhead] this maps to an exp curve [0..1] + +    // main atmospheric scattering line integral +    float density_dist = rel_pos_len * density_multiplier; + +    // Transparency (-> combined_haze) +    // ATI Bugfix -- can't store combined_haze*density_dist*distance_multiplier in a variable because the ati +    // compiler gets confused. +    combined_haze = exp(-combined_haze * density_dist * distance_multiplier); + +    // final atmosphere attenuation factor +    atten = combined_haze.rgb; + +    // compute haze glow +    float haze_glow = dot(rel_pos_norm, lightnorm.xyz); + +    // dampen sun additive contrib when not facing it... +    // SL-13539: This "if" clause causes an "additive" white artifact at roughly 77 degreees. +    //    if (length(light_dir) > 0.01) +    haze_glow *= max(0.0f, dot(light_dir, rel_pos_norm)); + +    haze_glow = 1. - haze_glow; +    // haze_glow is 0 at the sun and increases away from sun +    haze_glow = max(haze_glow, .001);  // set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) +    haze_glow *= glow.x; +    // higher glow.x gives dimmer glow (because next step is 1 / "angle") +    haze_glow = pow(haze_glow, glow.z); +    // glow.z should be negative, so we're doing a sort of (1 / "angle") function + +    // add "minimum anti-solar illumination" +    haze_glow += .25; + +    haze_glow *= sun_moon_glow_factor; + +    vec3 amb_color = ambient_color; + +    // increase ambient when there are more clouds +    vec3 tmpAmbient = amb_color + (vec3(1.) - amb_color) * cloud_shadow * 0.5; + +    // Similar/Shared Algorithms: +    //     indra\llinventory\llsettingssky.cpp                                        -- LLSettingsSky::calculateLightSettings() +    //     indra\newview\app_settings\shaders\class1\windlight\atmosphericsFuncs.glsl -- calcAtmosphericVars() +    // haze color +    vec3 cs = sunlight.rgb * (1. - cloud_shadow); +    additive = (blue_horizon.rgb * blue_weight.rgb) * (cs + tmpAmbient.rgb) + (haze_horizon * haze_weight.rgb) * (cs * haze_glow + tmpAmbient.rgb); + +    // brightness of surface both sunlight and ambient +     +    sunlit = sunlight.rgb; +    amblit = tmpAmbient; + +    additive *= vec3(1.0 - combined_haze); +} + +vec3 srgb_to_linear(vec3 col); + +// provide a touch of lighting in the opposite direction of the sun light  +    // so areas in shadow don't lose all detail +float ambientLighting(vec3 norm, vec3 light_dir) +{ +    float ambient = min(abs(dot(norm.xyz, light_dir.xyz)), 1.0); +    ambient *= 0.5; +    ambient *= ambient; +    ambient = (1.0 - ambient); +    return ambient; +} + + +// return lit amblit in linear space, leave sunlit and additive in sRGB space +void calcAtmosphericVarsLinear(vec3 inPositionEye, vec3 norm, vec3 light_dir, out vec3 sunlit, out vec3 amblit, out vec3 additive, +                         out vec3 atten) +{ +    calcAtmosphericVars(inPositionEye, light_dir, 1.0, sunlit, amblit, additive, atten); + +    // multiply to get similar colors as when the "scaleSoftClip" implementation was doubling color values +    // (allows for mixing of light sources other than sunlight e.g. reflection probes) +    sunlit *= 1.5; +    amblit *= 0.5; +     +    // override amblit with ambient_color if sky probe ambiance is not zero +    amblit = mix(amblit, ambient_color, clamp(sky_hdr_scale-1.0, 0.0, 1.0)); + +    amblit = srgb_to_linear(amblit); +    amblit *= ambientLighting(norm, light_dir); +} diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersF.glsl new file mode 100644 index 0000000000..800d08047a --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersF.glsl @@ -0,0 +1,44 @@ +/** + * @file class2\wl\atmosphericsHelpersV.glsl + * + * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, 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$ + */ + +// Output variables + +uniform float scene_light_strength; + +vec3 atmosFragAmbient(vec3 light, vec3 amblit) +{ +    return amblit + light / 2.0; +} + +vec3 atmosFragAffectDirectionalLight(float lightIntensity, vec3 sunlit) +{ +    return sunlit * lightIntensity; +} + +vec3 scaleDownLightFrag(vec3 light) +{ +    return (light / scene_light_strength ); +} + diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl new file mode 100644 index 0000000000..6ecbfaecb1 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl @@ -0,0 +1,57 @@ +/** + * @file class2\wl\atmosphericsHelpersV.glsl + * + * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, 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$ + */ +  + + +// Output variables +vec3 getSunlitColor(); +vec3 getAmblitColor(); +vec3 getAdditiveColor(); +vec3 getAtmosAttenuation(); +vec3 getPositionEye(); + +uniform float scene_light_strength; + +vec3 atmosAmbient() +{ +    return getAmblitColor(); +} + +vec3 atmosAffectDirectionalLight(float lightIntensity) +{ +    return getSunlitColor() * lightIntensity; +} + +vec3 atmosGetDiffuseSunlightColor() +{ +    return getSunlitColor(); +} + +vec3 scaleDownLight(vec3 light) +{ +    return (light / scene_light_strength ); +} + + diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl new file mode 100644 index 0000000000..cc3617ba61 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl @@ -0,0 +1,56 @@ +/** + * @file class2\wl\atmosphericsV.glsl + * + * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, 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$ + */ + +// out param funcs + + +uniform vec3 sun_dir; +uniform vec3 moon_dir; +uniform int sun_up_factor; + +void setSunlitColor(vec3 v); +void setAmblitColor(vec3 v); +void setAdditiveColor(vec3 v); +void setAtmosAttenuation(vec3 v); +void setPositionEye(vec3 v); + +vec3 getAdditiveColor(); + +void calcAtmosphericVars(vec3 inPositionEye, vec3 light_dir, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten); + +void calcAtmospherics(vec3 inPositionEye) { +    vec3 P = inPositionEye; +    setPositionEye(P); +    vec3 tmpsunlit = vec3(1); +    vec3 tmpamblit = vec3(1); +    vec3 tmpaddlit = vec3(1); +    vec3 tmpattenlit = vec3(1); +	vec3 light_dir = (sun_up_factor == 1) ? sun_dir : moon_dir;	 +    calcAtmosphericVars(inPositionEye, light_dir, 1, tmpsunlit, tmpamblit, tmpaddlit, tmpattenlit); +    setSunlitColor(tmpsunlit); +    setAmblitColor(tmpamblit); +    setAdditiveColor(tmpaddlit); +    setAtmosAttenuation(tmpattenlit); +} diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl new file mode 100644 index 0000000000..34669a6796 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl @@ -0,0 +1,48 @@ +/**  + * @file class2\wl\atmosphericVarsF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, 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$ + */ +  + +in vec3 vary_AdditiveColor; +in vec3 vary_AtmosAttenuation; + +vec3 getSunlitColor() +{ +	return vec3(0,0,0); +} + +vec3 getAmblitColor() +{ +	return vec3(0,0,0); +} + +vec3 getAdditiveColor() +{ +	return vary_AdditiveColor; +} + +vec3 getAtmosAttenuation() +{ +	return vec3(vary_AtmosAttenuation); +} diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl new file mode 100644 index 0000000000..1b854d80b3 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl @@ -0,0 +1,84 @@ +/**  + * @file class2\wl\atmosphericVars.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, 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$ + */ +  + +out vec3 vary_AdditiveColor; +out vec3 vary_AtmosAttenuation; + +vec3 additive_color; +vec3 atmos_attenuation; +vec3 sunlit_color; +vec3 amblit_color; +vec3 position_eye; + +vec3 getSunlitColor() +{ +	return sunlit_color; +} +vec3 getAmblitColor() +{ +	return amblit_color; +} + +vec3 getAdditiveColor() +{ +	return additive_color; +} +vec3 getAtmosAttenuation() +{ +	return atmos_attenuation; +} + +vec3 getPositionEye() +{ +	return position_eye; +} + +void setPositionEye(vec3 v) +{ +	position_eye = v; +} + +void setSunlitColor(vec3 v) +{ +	sunlit_color  = v; +} + +void setAmblitColor(vec3 v) +{ +	amblit_color = v; +} + +void setAdditiveColor(vec3 v) +{ +	additive_color = v; +	vary_AdditiveColor = v; +} + +void setAtmosAttenuation(vec3 v) +{ +	atmos_attenuation = v; +	vary_AtmosAttenuation = v; +} diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl new file mode 100644 index 0000000000..7a6741fe0e --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl @@ -0,0 +1,50 @@ +/**  + * @file class2\wl\atmosphericVarsWaterF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, 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$ + */ +  +in vec3 vary_PositionEye; +in vec3 vary_AdditiveColor; +in vec3 vary_AtmosAttenuation; + +vec3 getSunlitColor() +{ +	return vec3(0,0,0); +} +vec3 getAmblitColor() +{ +	return vec3(0,0,0); +} +vec3 getAdditiveColor() +{ +	return vary_AdditiveColor; +} +vec3 getAtmosAttenuation() +{ +	return vary_AtmosAttenuation; +} +vec3 getPositionEye() +{ +	return vary_PositionEye; +} + diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl new file mode 100644 index 0000000000..23c3aed4d8 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl @@ -0,0 +1,81 @@ +/**  + * @file class2\wl\atmosphericVarsWaterV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, 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$ + */ +  +out vec3 vary_PositionEye; +out vec3 vary_AdditiveColor; +out vec3 vary_AtmosAttenuation; + +vec3 atmos_attenuation; +vec3 sunlit_color; +vec3 amblit_color; + +vec3 getSunlitColor() +{ +	return sunlit_color; +} +vec3 getAmblitColor() +{ +	return amblit_color; +} + +vec3 getAdditiveColor() +{ +	return vary_AdditiveColor; +} +vec3 getAtmosAttenuation() +{ +	return atmos_attenuation; +} + +vec3 getPositionEye() +{ +	return vary_PositionEye; +} + +void setPositionEye(vec3 v) +{ +	vary_PositionEye = v; +} + +void setSunlitColor(vec3 v) +{ +	sunlit_color  = v; +} + +void setAmblitColor(vec3 v) +{ +	amblit_color = v; +} + +void setAdditiveColor(vec3 v) +{ +	vary_AdditiveColor = v; +} + +void setAtmosAttenuation(vec3 v) +{ +	atmos_attenuation = v; +	vary_AtmosAttenuation = v; +} diff --git a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl new file mode 100644 index 0000000000..027bfb866f --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl @@ -0,0 +1,55 @@ +/**  + * @file class2\wl\gammaF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, 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$ + */ + + // DEPRECATED + +//soft clip effect has been moved to postDeferredGammaCorrect legacyGamma, this file is effectively dead +// but these functions need to be removed from all existing shaders before removing this file + +vec3 scaleSoftClipFrag(vec3 light) +{ +    return light; +} + +vec3 scaleSoftClipFragLinear(vec3 light) +{ // identical to non-linear version and that's probably close enough +    return light; +} + +vec3 scaleSoftClip(vec3 light) +{ +    return light; +} + +vec3 fullbrightScaleSoftClipFrag(vec3 light, vec3 add, vec3 atten) +{ +    return light; +} + +vec3 fullbrightScaleSoftClip(vec3 light) +{ +    return light; +} +  | 
