SL-10904, SL-10998, SL-11018
Fix handling of 1/light_y when y was tiny but getting even tinier. Add similar adjustment to shader version of same calc.master
parent
48ed3f9318
commit
5766325290
|
|
@ -1275,12 +1275,14 @@ void LLSettingsSky::calculateLightSettings() const
|
|||
LLColor3 light_transmittance = getLightTransmittance();
|
||||
|
||||
// and vary_sunlight will work properly with moon light
|
||||
F32 lighty = lightnorm[2];
|
||||
if(fabs(lighty) > 0.001f)
|
||||
const F32 LIMIT = FLT_EPSILON * 8.0f;
|
||||
|
||||
F32 lighty = fabs(lightnorm[2]);
|
||||
if(lighty >= LIMIT)
|
||||
{
|
||||
lighty = 1.f / fabs(lighty);
|
||||
lighty = 1.f / lighty;
|
||||
}
|
||||
lighty = llmax(0.001f, lighty);
|
||||
lighty = llmax(LIMIT, lighty);
|
||||
componentMultBy(sunlight, componentExp((light_atten * -1.f) * lighty));
|
||||
|
||||
//increase ambient when there are more clouds
|
||||
|
|
|
|||
|
|
@ -229,13 +229,11 @@ vec3 post_diffuse = color.rgb;
|
|||
|
||||
//color.rgb = mix(diff.rgb, color.rgb, final_alpha);
|
||||
|
||||
color.rgb = atmosFragLighting(color.rgb, additive, atten);
|
||||
color.rgb = atmosFragLighting(color.rgb, additive, atten) * 2.0;
|
||||
color.rgb = scaleSoftClipFrag(color.rgb);
|
||||
|
||||
vec4 light = vec4(0,0,0,0);
|
||||
|
||||
vec3 prelight_linearish_maybe = srgb_to_linear(color.rgb);
|
||||
|
||||
#define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, diff.rgb, pos.xyz, norm, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, light_attenuation[i].w * 0.5);
|
||||
|
||||
LIGHT_LOOP(1)
|
||||
|
|
|
|||
|
|
@ -81,12 +81,12 @@ void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, o
|
|||
haze_weight = vec4(haze_density) / temp1;
|
||||
|
||||
//(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)
|
||||
temp2.y = max(0.0, tmpLightnorm.z);
|
||||
if (temp2.y > 0.001f)
|
||||
temp2.y = max(0.0, tmpLightnorm.y);
|
||||
if (abs(temp2.y) > 0.000001f)
|
||||
{
|
||||
temp2.y = 1. / temp2.y;
|
||||
temp2.y = 1. / abs(temp2.y);
|
||||
}
|
||||
temp2.y = max(0.001f, temp2.y);
|
||||
temp2.y = max(0.0000001f, temp2.y);
|
||||
sunlight *= exp(-light_atten * temp2.y);
|
||||
|
||||
// main atmospheric scattering line integral
|
||||
|
|
|
|||
Loading…
Reference in New Issue