SL-11238
Fix ambient light inputs to the renderer. Fix 3rd sky shader w/ mistaken density mod conversion. Make ambient clamp apply to all modes. Tune ALM ambient clamp to match non-ALM.master
parent
78e62fe0f1
commit
e9dbee0026
|
|
@ -1246,6 +1246,17 @@ LLColor4 LLSettingsSky::getTotalAmbient() const
|
|||
return mTotalAmbient;
|
||||
}
|
||||
|
||||
LLColor3 LLSettingsSky::getMoonlightColor() const
|
||||
{
|
||||
F32 moon_brightness = getIsMoonUp() ? getMoonBrightness() : 0.001f;
|
||||
|
||||
LLColor3 moonlight_a(0.45, 0.45, 0.66);
|
||||
LLColor3 moonlight_b(0.33, 0.33, 1.0);
|
||||
|
||||
LLColor3 moonlight = lerp(moonlight_b, moonlight_a, moon_brightness);
|
||||
return moonlight;
|
||||
}
|
||||
|
||||
void LLSettingsSky::calculateLightSettings() const
|
||||
{
|
||||
// Initialize temp variables
|
||||
|
|
@ -1278,19 +1289,24 @@ void LLSettingsSky::calculateLightSettings() const
|
|||
//brightness of surface both sunlight and ambient
|
||||
// reduce range to 0 - 1 before gamma correct to prevent clipping
|
||||
// then restore to full 0 - 3 range before storage
|
||||
mSunDiffuse = gammaCorrect(componentMult(sunlight * 0.33333f, light_transmittance)) * 3.0f;
|
||||
mSunAmbient = gammaCorrect(componentMult(tmpAmbient * 0.33333f, light_transmittance)) * 3.0f;
|
||||
//mSunDiffuse = gammaCorrect(componentMult(sunlight, light_transmittance));
|
||||
//mSunAmbient = gammaCorrect(componentMult(tmpAmbient, light_transmittance));
|
||||
|
||||
mSunDiffuse = componentMult(sunlight, light_transmittance);
|
||||
mSunAmbient = componentMult(tmpAmbient, light_transmittance);
|
||||
|
||||
F32 moon_brightness = getIsMoonUp() ? getMoonBrightness() : 0.001f;
|
||||
|
||||
LLColor3 moonlight_a(0.45, 0.45, 0.66);
|
||||
LLColor3 moonlight_b(0.33, 0.33, 1.0);
|
||||
LLColor3 moonlight = getMoonlightColor();
|
||||
LLColor3 moonlight_b(0.33, 0.33, 1.0); // scotopic ambient value
|
||||
|
||||
LLColor3 moonlight = lerp(moonlight_b, moonlight_a, moon_brightness);
|
||||
componentMultBy(moonlight, componentExp((light_atten * -1.f) * lighty));
|
||||
|
||||
mMoonDiffuse = gammaCorrect(componentMult(moonlight, light_transmittance) * moon_brightness);
|
||||
mMoonAmbient = gammaCorrect(componentMult(moonlight_b, light_transmittance) * 0.0125f);
|
||||
//mMoonDiffuse = gammaCorrect(componentMult(moonlight, light_transmittance) * moon_brightness);
|
||||
//mMoonAmbient = gammaCorrect(componentMult(moonlight_b, light_transmittance) * 0.0125f);
|
||||
mMoonDiffuse = componentMult(moonlight, light_transmittance) * moon_brightness;
|
||||
mMoonAmbient = componentMult(moonlight_b, light_transmittance) * 0.0125f;
|
||||
|
||||
mTotalAmbient = mSunAmbient;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -282,6 +282,9 @@ public:
|
|||
LLVector3 getSunDirection() const;
|
||||
LLVector3 getMoonDirection() const;
|
||||
|
||||
// color based on brightness
|
||||
LLColor3 getMoonlightColor() const;
|
||||
|
||||
LLColor4 getMoonAmbient() const;
|
||||
LLColor3 getMoonDiffuse() const;
|
||||
LLColor4 getSunAmbient() const;
|
||||
|
|
|
|||
|
|
@ -1228,6 +1228,7 @@ void LLRender::syncLightState()
|
|||
shader->uniform3fv(LLShaderMgr::LIGHT_DIFFUSE, 8, diffuse[0].mV);
|
||||
shader->uniform4fv(LLShaderMgr::LIGHT_AMBIENT, 1, mAmbientLightColor.mV);
|
||||
shader->uniform1i(LLShaderMgr::SUN_UP_FACTOR, sun_primary[0] ? 1 : 0);
|
||||
shader->uniform4fv(LLShaderMgr::AMBIENT, 1, mAmbientLightColor.mV);
|
||||
shader->uniform4fv(LLShaderMgr::SUNLIGHT_COLOR, 1, diffuse[0].mV);
|
||||
shader->uniform4fv(LLShaderMgr::MOONLIGHT_COLOR, 1, diffuse_b[0].mV);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -223,7 +223,9 @@ void main()
|
|||
float ambient = da;
|
||||
ambient *= 0.5;
|
||||
ambient *= ambient;
|
||||
ambient = min(getAmbientClamp(), 1.0 - ambient);
|
||||
|
||||
float ambient_clamp = getAmbientClamp() + 0.2;
|
||||
ambient = (1.0 - ambient) * ambient_clamp;
|
||||
|
||||
vec3 sun_contrib = min(final_da, shadow) * sunlit;
|
||||
|
||||
|
|
|
|||
|
|
@ -320,7 +320,9 @@ void main()
|
|||
float ambient = da;
|
||||
ambient *= 0.5;
|
||||
ambient *= ambient;
|
||||
ambient = min(getAmbientClamp(), 1.0 - ambient);
|
||||
|
||||
float ambient_clamp = getAmbientClamp() + 0.2;
|
||||
ambient = (1.0 - ambient) * ambient_clamp;
|
||||
|
||||
vec3 sun_contrib = min(final_da, shadow) * sunlit;
|
||||
|
||||
|
|
|
|||
|
|
@ -106,7 +106,10 @@ void main()
|
|||
float ambient = da;
|
||||
ambient *= 0.5;
|
||||
ambient *= ambient;
|
||||
ambient = min(getAmbientClamp(), 1.0 - ambient);
|
||||
|
||||
ambient = (1.0 - ambient);
|
||||
float ambient_clamp = getAmbientClamp() + 0.1;
|
||||
ambient *= ambient_clamp;
|
||||
|
||||
vec3 sun_contrib = final_da * sunlit;
|
||||
|
||||
|
|
@ -179,11 +182,10 @@ vec3 post_atmo = color.rgb;
|
|||
bloom = fogged.a;
|
||||
#endif
|
||||
|
||||
// srgb colorspace debuggables
|
||||
//color.rgb = amblit;
|
||||
//color.rgb = vec3(ambient);
|
||||
//color.rgb = sunlit;
|
||||
//color.rgb = post_ambient;
|
||||
//color.rgb = vec3(final_da);
|
||||
//color.rgb = sun_contrib;
|
||||
//color.rgb = post_sunlight;
|
||||
//color.rgb = diffuse_srgb.rgb;
|
||||
|
|
@ -197,6 +199,11 @@ vec3 post_atmo = color.rgb;
|
|||
color.rgb = srgb_to_linear(color.rgb);
|
||||
}
|
||||
|
||||
// linear debuggables
|
||||
//color.rgb = vec3(final_da);
|
||||
//color.rgb = vec3(ambient);
|
||||
//color.rgb = vec3(scol);
|
||||
|
||||
frag_color.rgb = color.rgb;
|
||||
frag_color.a = bloom;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,11 +28,12 @@
|
|||
// All lights, no specular highlights
|
||||
vec3 atmosAmbient();
|
||||
vec4 sumLights(vec3 pos, vec3 norm, vec4 color);
|
||||
float getAmbientClamp();
|
||||
|
||||
vec4 calcLighting(vec3 pos, vec3 norm, vec4 color)
|
||||
{
|
||||
vec4 c = sumLights(pos, norm, color);
|
||||
c.rgb += atmosAmbient() * color.rgb * 0.5;
|
||||
c.rgb += atmosAmbient() * color.rgb * 0.5 * getAmbientClamp();
|
||||
return c;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ uniform float sun_moon_glow_factor;
|
|||
|
||||
float getAmbientClamp()
|
||||
{
|
||||
return 0.45f;
|
||||
return 0.9;
|
||||
}
|
||||
|
||||
void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten) {
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ vec3 halo22(float d)
|
|||
|
||||
/// Soft clips the light with a gamma correction
|
||||
vec3 scaleSoftClip(vec3 light);
|
||||
vec3 srgb_to_linear(vec3 c);
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
@ -194,10 +195,12 @@ void main()
|
|||
|
||||
color.rgb += halo_22;
|
||||
|
||||
color *= 2.;
|
||||
color.rgb *= 2.;
|
||||
color.rgb = scaleSoftClip(color.rgb);
|
||||
color.rgb = srgb_to_linear(color.rgb);
|
||||
|
||||
/// Gamma correct for WL (soft clip effect).
|
||||
frag_data[0] = vec4(scaleSoftClip(color.rgb), 1.0);
|
||||
frag_data[0] = vec4(color.rgb, 1.0);
|
||||
frag_data[1] = vec4(0.0,0.0,0.0,0.0);
|
||||
frag_data[2] = vec4(0.5,0.5,0.0,1.0); //1.0 in norm.w masks off fog
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
*/
|
||||
|
||||
#extension GL_ARB_texture_rectangle : enable
|
||||
#extension GL_ARB_shader_texture_lod : enable
|
||||
|
||||
/*[EXTRA_CODE_HERE]*/
|
||||
|
||||
|
|
@ -87,14 +88,11 @@ void main()
|
|||
float da = dot(normalize(norm.xyz), light_dir.xyz);
|
||||
da = clamp(da, -1.0, 1.0);
|
||||
|
||||
|
||||
|
||||
float final_da = da;
|
||||
final_da = clamp(final_da, 0.0, 1.0);
|
||||
|
||||
vec4 diffuse_srgb = texture2DRect(diffuseRect, tc);
|
||||
vec4 diffuse_linear = vec4(srgb_to_linear(diffuse_srgb.rgb), diffuse_srgb.a);
|
||||
|
||||
vec4 diffuse_linear = texture2DRect(diffuseRect, tc);
|
||||
vec4 diffuse_srgb = vec4(linear_to_srgb(diffuse_linear.rgb), diffuse_linear.a);
|
||||
|
||||
// clamping to alpha value kills underwater shadows...
|
||||
//scol = max(scol_ambocc.r, diffuse_linear.a);
|
||||
|
|
@ -116,7 +114,10 @@ void main()
|
|||
float ambient = da;
|
||||
ambient *= 0.5;
|
||||
ambient *= ambient;
|
||||
ambient = min(getAmbientClamp(), 1.0 - ambient);
|
||||
|
||||
float ambient_clamp = getAmbientClamp() + 0.1;
|
||||
ambient = (1.0 - ambient);
|
||||
ambient *= ambient_clamp;
|
||||
|
||||
vec3 sun_contrib = min(scol, final_da) * sunlit;
|
||||
|
||||
|
|
@ -129,7 +130,7 @@ vec3 post_ambient = color.rgb;
|
|||
|
||||
vec3 post_sunlight = color.rgb;
|
||||
|
||||
color.rgb *= diffuse_srgb.rgb;
|
||||
color.rgb *= diffuse_linear.rgb;
|
||||
|
||||
vec3 post_diffuse = color.rgb;
|
||||
|
||||
|
|
@ -155,7 +156,7 @@ vec3 post_diffuse = color.rgb;
|
|||
float scontrib = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da);
|
||||
vec3 sp = sun_contrib*scontrib / 16.0;
|
||||
sp = clamp(sp, vec3(0), vec3(1));
|
||||
bloom += dot (sp, sp) / 6.0;
|
||||
bloom += dot(sp, sp) / 6.0;
|
||||
color += sp * spec.rgb;
|
||||
}
|
||||
}
|
||||
|
|
@ -163,7 +164,7 @@ vec3 post_diffuse = color.rgb;
|
|||
vec3 post_spec = color.rgb;
|
||||
|
||||
#ifndef WATER_FOG
|
||||
color.rgb += diffuse_srgb.a * diffuse_srgb.rgb;
|
||||
color.rgb = mix(color.rgb, diffuse_srgb.rgb, diffuse_srgb.a);
|
||||
#endif
|
||||
|
||||
if (envIntensity > 0.0)
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ void main()
|
|||
vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color;
|
||||
vec4 light_atten;
|
||||
|
||||
float dens_mul = density_multiplier * 0.45;
|
||||
float dens_mul = density_multiplier;
|
||||
|
||||
// Sunlight attenuation effect (hue and brightness) due to atmosphere
|
||||
// this is used later for sunlight modulation at various altitudes
|
||||
|
|
|
|||
|
|
@ -28,11 +28,12 @@
|
|||
// All lights, no specular highlights
|
||||
vec3 atmosAmbient();
|
||||
vec4 sumLights(vec3 pos, vec3 norm, vec4 color);
|
||||
float getAmbientClamp();
|
||||
|
||||
vec4 calcLighting(vec3 pos, vec3 norm, vec4 color)
|
||||
{
|
||||
vec4 c = sumLights(pos, norm, color);
|
||||
c.rgb += atmosAmbient() * color.rgb;
|
||||
c.rgb += atmosAmbient() * color.rgb * getAmbientClamp();
|
||||
return c;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -263,6 +263,7 @@ S32 LLMachineID::getUniqueID(unsigned char *unique_id, size_t len)
|
|||
if (has_static_unique_id)
|
||||
{
|
||||
memcpy ( unique_id, &static_unique_id, len);
|
||||
#if LL_LOG_MACHINE_ID
|
||||
LL_INFOS_ONCE("AppInit") << "UniqueID: 0x";
|
||||
// Code between here and LL_ENDL is not executed unless the LL_DEBUGS
|
||||
// actually produces output
|
||||
|
|
@ -276,6 +277,7 @@ S32 LLMachineID::getUniqueID(unsigned char *unique_id, size_t len)
|
|||
}
|
||||
// Reset default output formatting to avoid nasty surprises!
|
||||
LL_CONT << std::dec << std::setw(0) << std::setfill(' ') << LL_ENDL;
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -682,8 +682,8 @@ void LLSettingsVOSky::applySpecial(void *ptarget)
|
|||
|
||||
LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
|
||||
|
||||
LLColor4 sunDiffuse = psky->getSunDiffuse();
|
||||
LLColor4 moonDiffuse = psky->getMoonDiffuse();
|
||||
LLColor4 sunDiffuse = psky->getSunlightColor();
|
||||
LLColor4 moonDiffuse = psky->getMoonlightColor();
|
||||
|
||||
F32 max_color = llmax(sunDiffuse.mV[0], sunDiffuse.mV[1], sunDiffuse.mV[2]);
|
||||
if (max_color > 1.f)
|
||||
|
|
|
|||
|
|
@ -3910,6 +3910,7 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
|
|||
gWLCloudProgram.mFeatures.calculatesAtmospherics = true;
|
||||
gWLCloudProgram.mFeatures.hasTransport = true;
|
||||
gWLCloudProgram.mFeatures.hasGamma = true;
|
||||
gWLCloudProgram.mFeatures.hasSrgb = true;
|
||||
gWLCloudProgram.mShaderFiles.push_back(make_pair("windlight/cloudsV.glsl", GL_VERTEX_SHADER_ARB));
|
||||
gWLCloudProgram.mShaderFiles.push_back(make_pair("windlight/cloudsF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gWLCloudProgram.mShaderLevel = mShaderLevel[SHADER_WINDLIGHT];
|
||||
|
|
|
|||
|
|
@ -6219,18 +6219,8 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
|
|||
mSunDir.setVec(sun_dir);
|
||||
mMoonDir.setVec(moon_dir);
|
||||
|
||||
// calculates diffuse sunlight per-pixel downstream, just provide setting sunlight_color
|
||||
if (canUseWindLightShaders())
|
||||
{
|
||||
mSunDiffuse.setVec(psky->getSunlightColor());
|
||||
}
|
||||
else
|
||||
{
|
||||
// not using atmo shaders, use CPU-generated attenuated sunlight diffuse...
|
||||
mSunDiffuse.setVec(psky->getSunDiffuse());
|
||||
}
|
||||
|
||||
mMoonDiffuse.setVec(psky->getMoonDiffuse());
|
||||
mSunDiffuse.setVec(psky->getSunlightColor());
|
||||
mMoonDiffuse.setVec(psky->getMoonlightColor());
|
||||
|
||||
F32 max_color = llmax(mSunDiffuse.mV[0], mSunDiffuse.mV[1], mSunDiffuse.mV[2]);
|
||||
if (max_color > 1.f)
|
||||
|
|
@ -6257,15 +6247,15 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
|
|||
|
||||
LLVector4 light_dir = sun_up ? mSunDir : mMoonDir;
|
||||
|
||||
mHWLightColors[0] = mSunDiffuse;
|
||||
mHWLightColors[0] = sun_up ? mSunDiffuse : mMoonDiffuse;
|
||||
|
||||
LLLightState* light = gGL.getLight(0);
|
||||
light->setPosition(light_dir);
|
||||
|
||||
light->setSunPrimary(sun_up);
|
||||
light->setDiffuse(mSunDiffuse);
|
||||
light->setDiffuse(mHWLightColors[0]);
|
||||
light->setDiffuseB(mMoonDiffuse);
|
||||
light->setAmbient(LLColor4::black);
|
||||
light->setAmbient(psky->getTotalAmbient());
|
||||
light->setSpecular(LLColor4::black);
|
||||
light->setConstantAttenuation(1.f);
|
||||
light->setLinearAttenuation(0.f);
|
||||
|
|
|
|||
Loading…
Reference in New Issue