Skip to content

Commit a90377d

Browse files
authored
#3157 Fix alpha not having ambient lighting on low. (#3162)
* #3157 Fix alpha not having ambient lighting on low.
1 parent 38845a1 commit a90377d

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ out vec4 frag_color;
3636
uniform mat3 env_mat;
3737
uniform vec3 sun_dir;
3838
uniform vec3 moon_dir;
39+
uniform int classic_mode;
3940

4041
#ifdef USE_DIFFUSE_TEX
4142
uniform sampler2D diffuseMap;
@@ -241,10 +242,10 @@ void main()
241242

242243
calcAtmosphericVarsLinear(pos.xyz, norm, light_dir, sunlit, amblit, additive, atten);
243244

244-
vec3 sunlit_linear = srgb_to_linear(sunlit);
245+
vec3 sunlit_linear = sunlit;
245246
vec3 amblit_linear = amblit;
246247

247-
vec3 irradiance;
248+
vec3 irradiance = amblit;
248249
vec3 glossenv;
249250
vec3 legacyenv;
250251
sampleReflectionProbesLegacy(irradiance, glossenv, legacyenv, frag, pos.xyz, norm.xyz, 0.0, 0.0, true, amblit_linear);
@@ -260,11 +261,20 @@ void main()
260261

261262
color.a = final_alpha;
262263

263-
vec3 sun_contrib = min(final_da, shadow) * sunlit_linear;
264-
265264
color.rgb = irradiance;
265+
if (classic_mode > 0)
266+
{
267+
final_da = pow(final_da,1.2);
268+
vec3 sun_contrib = vec3(min(final_da, shadow));
266269

267-
color.rgb += sun_contrib;
270+
color.rgb = srgb_to_linear(color.rgb * 0.9 + linear_to_srgb(sun_contrib) * sunlit_linear * 0.7);
271+
sunlit_linear = srgb_to_linear(sunlit_linear);
272+
}
273+
else
274+
{
275+
vec3 sun_contrib = min(final_da, shadow) * sunlit_linear;
276+
color.rgb += sun_contrib;
277+
}
268278

269279
color.rgb *= diffuse_linear.rgb;
270280

indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ void main()
161161
vec3 atten;
162162
calcAtmosphericVarsLinear(pos.xyz, norm, light_dir, sunlit, amblit, additive, atten);
163163

164-
vec3 sunlit_linear = srgb_to_linear(sunlit);
164+
vec3 sunlit_linear = sunlit;
165165

166166
vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
167167

@@ -182,7 +182,7 @@ void main()
182182

183183
// PBR IBL
184184
float gloss = 1.0 - perceptualRoughness;
185-
vec3 irradiance = vec3(0);
185+
vec3 irradiance = amblit;
186186
vec3 radiance = vec3(0);
187187
sampleReflectionProbes(irradiance, radiance, vary_position.xy*0.5+0.5, pos.xyz, norm.xyz, gloss, true, amblit);
188188

indra/newview/app_settings/shaders/class3/deferred/materialF.glsl

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
uniform float emissive_brightness; // fullbright flag, 1.0 == fullbright, 0.0 otherwise
3838
uniform int sun_up_factor;
39+
uniform int classic_mode;
3940

4041
vec4 applySkyAndWaterFog(vec3 pos, vec3 additive, vec3 atten, vec4 color);
4142
vec3 scaleSoftClipFragLinear(vec3 l);
@@ -329,19 +330,31 @@ void main()
329330
vec3 atten;
330331
calcAtmosphericVarsLinear(pos.xyz, norm.xyz, light_dir, sunlit, amblit, additive, atten);
331332

332-
vec3 sunlit_linear = srgb_to_linear(sunlit);
333+
vec3 sunlit_linear = sunlit;
333334
vec3 amblit_linear = amblit;
334335

335-
vec3 ambenv;
336+
vec3 ambenv = amblit;
336337
vec3 glossenv;
337338
vec3 legacyenv;
338339
sampleReflectionProbesLegacy(ambenv, glossenv, legacyenv, pos.xy*0.5+0.5, pos.xyz, norm.xyz, glossiness, env, true, amblit_linear);
339340

340341
color = ambenv;
341342

342343
float da = clamp(dot(norm.xyz, light_dir.xyz), 0.0, 1.0);
343-
vec3 sun_contrib = min(da, shadow) * sunlit_linear;
344-
color.rgb += sun_contrib;
344+
if (classic_mode > 0)
345+
{
346+
da = pow(da,1.2);
347+
vec3 sun_contrib = vec3(min(da, shadow));
348+
349+
color.rgb = srgb_to_linear(color.rgb * 0.9 + linear_to_srgb(sun_contrib) * sunlit_linear * 0.7);
350+
sunlit_linear = srgb_to_linear(sunlit_linear);
351+
}
352+
else
353+
{
354+
vec3 sun_contrib = min(da, shadow) * sunlit_linear;
355+
color.rgb += sun_contrib;
356+
}
357+
345358
color *= diffcol.rgb;
346359

347360
vec3 refnormpersp = reflect(pos.xyz, norm.xyz);

0 commit comments

Comments
 (0)