ambient scale and LOD quick fix

This commit is contained in:
Duion 2016-09-02 02:17:01 +02:00
parent eaa28844c9
commit 82c616efbe
3 changed files with 17 additions and 4 deletions

View file

@ -104,6 +104,9 @@ class ColorF
(alpha >= 0.0f && alpha <= 1.0f); } (alpha >= 0.0f && alpha <= 1.0f); }
void clamp(); void clamp();
ColorF toLinear() const;
ColorF toGamma() const;
static const ColorF ZERO; static const ColorF ZERO;
static const ColorF ONE; static const ColorF ONE;
static const ColorF WHITE; static const ColorF WHITE;
@ -462,6 +465,16 @@ inline void ColorF::clamp()
alpha = 0.0f; alpha = 0.0f;
} }
inline ColorF ColorF::toLinear() const
{
return ColorF(mPow(red, 2.2f), mPow(green, 2.2f), mPow(blue, 2.2f), alpha);
}
inline ColorF ColorF::toGamma() const
{
return ColorF(mPow(red, 1.0f / 2.2f), mPow(green, 1.0f / 2.2f), mPow(blue, 1.0f / 2.2f), alpha);
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
//-------------------------------------- INLINES (ColorI) //-------------------------------------- INLINES (ColorI)
// //

View file

@ -681,7 +681,7 @@ void AdvancedLightBinManager::LightMaterialInfo::setLightParameters( const Light
F32 lumiance = mDot(*((const Point3F *)&lightInfo->getColor()), colorToLumiance ); F32 lumiance = mDot(*((const Point3F *)&lightInfo->getColor()), colorToLumiance );
col.alpha *= lumiance; col.alpha *= lumiance;
matParams->setSafe( lightColor, col ); matParams->setSafe( lightColor, col.toLinear() );
matParams->setSafe( lightBrightness, lightInfo->getBrightness() ); matParams->setSafe( lightBrightness, lightInfo->getBrightness() );
switch( lightInfo->getType() ) switch( lightInfo->getType() )
@ -697,7 +697,7 @@ void AdvancedLightBinManager::LightMaterialInfo::setLightParameters( const Light
// the vector light. This prevents a divide by zero. // the vector light. This prevents a divide by zero.
ColorF ambientColor = renderState->getAmbientLightColor(); ColorF ambientColor = renderState->getAmbientLightColor();
ambientColor.alpha = 0.00001f; ambientColor.alpha = 0.00001f;
matParams->setSafe( lightAmbient, ambientColor ); matParams->setSafe( lightAmbient, ambientColor.toLinear() );
// If no alt color is specified, set it to the average of // If no alt color is specified, set it to the average of
// the ambient and main color to avoid artifacts. // the ambient and main color to avoid artifacts.
@ -711,7 +711,7 @@ void AdvancedLightBinManager::LightMaterialInfo::setLightParameters( const Light
lightAlt = (lightInfo->getColor() + renderState->getAmbientLightColor()) / 2.0f; lightAlt = (lightInfo->getColor() + renderState->getAmbientLightColor()) / 2.0f;
ColorF trilightColor = lightAlt; ColorF trilightColor = lightAlt;
matParams->setSafe(lightTrilight, trilightColor); matParams->setSafe(lightTrilight, trilightColor.toLinear());
} }
break; break;

View file

@ -593,7 +593,7 @@ S32 TSShapeInstance::setDetailFromDistance( const SceneRenderState *state, F32 s
// 4:3 aspect ratio, we've changed the reference value // 4:3 aspect ratio, we've changed the reference value
// to 300 to be more compatible with legacy shapes. // to 300 to be more compatible with legacy shapes.
// //
const F32 pixelScale = (state->getViewport().extent.x / state->getViewport().extent.y); const F32 pixelScale = (state->getViewport().extent.x / state->getViewport().extent.y)*2;
// This is legacy DTS support for older "multires" based // This is legacy DTS support for older "multires" based
// meshes. The original crossbow weapon uses this. // meshes. The original crossbow weapon uses this.