|
@@ -169,6 +169,7 @@ ScatterSky::ScatterSky()
|
|
mNightColor.set( 0.0196078f, 0.0117647f, 0.109804f, 1.0f );
|
|
mNightColor.set( 0.0196078f, 0.0117647f, 0.109804f, 1.0f );
|
|
mNightFogColor = mNightColor;
|
|
mNightFogColor = mNightColor;
|
|
mUseNightCubemap = false;
|
|
mUseNightCubemap = false;
|
|
|
|
+ mSunSize = 1.0f;
|
|
|
|
|
|
mMoonMatInst = NULL;
|
|
mMoonMatInst = NULL;
|
|
|
|
|
|
@@ -179,6 +180,9 @@ ScatterSky::ScatterSky()
|
|
|
|
|
|
mMatrixSet = reinterpret_cast<MatrixSet *>(dMalloc_aligned(sizeof(MatrixSet), 16));
|
|
mMatrixSet = reinterpret_cast<MatrixSet *>(dMalloc_aligned(sizeof(MatrixSet), 16));
|
|
constructInPlace(mMatrixSet);
|
|
constructInPlace(mMatrixSet);
|
|
|
|
+
|
|
|
|
+ mColorizeAmt = 0;
|
|
|
|
+ mColorize.set(0,0,0);
|
|
}
|
|
}
|
|
|
|
|
|
ScatterSky::~ScatterSky()
|
|
ScatterSky::~ScatterSky()
|
|
@@ -318,10 +322,16 @@ void ScatterSky::initPersistFields()
|
|
|
|
|
|
addField( "skyBrightness", TypeF32, Offset( mSkyBrightness, ScatterSky ),
|
|
addField( "skyBrightness", TypeF32, Offset( mSkyBrightness, ScatterSky ),
|
|
"Global brightness and intensity applied to the sky and objects in the level." );
|
|
"Global brightness and intensity applied to the sky and objects in the level." );
|
|
-
|
|
|
|
- addField( "mieScattering", TypeF32, Offset( mMieScattering, ScatterSky ),
|
|
|
|
- "Affects the size and intensity of light scattering around the sun." );
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ addField( "sunSize", TypeF32, Offset( mSunSize, ScatterSky ),
|
|
|
|
+ "Affects the size of the sun's disk." );
|
|
|
|
+
|
|
|
|
+ addField( "colorizeAmount", TypeF32, Offset( mColorizeAmt, ScatterSky ),
|
|
|
|
+ "Controls how much the the alpha component of colorize brigthens the sky. Setting to 0 returns default behavior." );
|
|
|
|
+
|
|
|
|
+ addField( "colorize", TypeColorF, Offset( mColorize, ScatterSky ),
|
|
|
|
+ "Tints the sky the color specified, the alpha controls the brigthness. The brightness is multipled by the value of colorizeAmt." );
|
|
|
|
+
|
|
addField( "rayleighScattering", TypeF32, Offset( mRayleighScattering, ScatterSky ),
|
|
addField( "rayleighScattering", TypeF32, Offset( mRayleighScattering, ScatterSky ),
|
|
"Controls how blue the atmosphere is during the day." );
|
|
"Controls how blue the atmosphere is during the day." );
|
|
|
|
|
|
@@ -436,7 +446,9 @@ U32 ScatterSky::packUpdate(NetConnection *con, U32 mask, BitStream *stream)
|
|
mMieScattering4PI = mMieScattering * 4.0f * M_PI_F;
|
|
mMieScattering4PI = mMieScattering * 4.0f * M_PI_F;
|
|
|
|
|
|
stream->write( mMieScattering4PI );
|
|
stream->write( mMieScattering4PI );
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ stream->write( mSunSize );
|
|
|
|
+
|
|
stream->write( mSkyBrightness );
|
|
stream->write( mSkyBrightness );
|
|
|
|
|
|
stream->write( mMiePhaseAssymetry );
|
|
stream->write( mMiePhaseAssymetry );
|
|
@@ -460,6 +472,8 @@ U32 ScatterSky::packUpdate(NetConnection *con, U32 mask, BitStream *stream)
|
|
stream->write( mAmbientScale );
|
|
stream->write( mAmbientScale );
|
|
stream->write( mSunScale );
|
|
stream->write( mSunScale );
|
|
stream->write( mFogScale );
|
|
stream->write( mFogScale );
|
|
|
|
+ stream->write( mColorizeAmt );
|
|
|
|
+ stream->write( mColorize );
|
|
|
|
|
|
stream->write( mExposure );
|
|
stream->write( mExposure );
|
|
|
|
|
|
@@ -513,7 +527,9 @@ void ScatterSky::unpackUpdate(NetConnection *con, BitStream *stream)
|
|
|
|
|
|
stream->read( &mMieScattering );
|
|
stream->read( &mMieScattering );
|
|
stream->read( &mMieScattering4PI );
|
|
stream->read( &mMieScattering4PI );
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ stream->read( &mSunSize );
|
|
|
|
+
|
|
stream->read( &mSkyBrightness );
|
|
stream->read( &mSkyBrightness );
|
|
|
|
|
|
stream->read( &mMiePhaseAssymetry );
|
|
stream->read( &mMiePhaseAssymetry );
|
|
@@ -539,6 +555,16 @@ void ScatterSky::unpackUpdate(NetConnection *con, BitStream *stream)
|
|
stream->read( &mAmbientScale );
|
|
stream->read( &mAmbientScale );
|
|
stream->read( &mSunScale );
|
|
stream->read( &mSunScale );
|
|
stream->read( &mFogScale );
|
|
stream->read( &mFogScale );
|
|
|
|
+ F32 colorizeAmt;
|
|
|
|
+ stream->read( &colorizeAmt );
|
|
|
|
+
|
|
|
|
+ if(mColorizeAmt != colorizeAmt) {
|
|
|
|
+ mColorizeAmt = colorizeAmt;
|
|
|
|
+ mShader = NULL; //forces shader refresh
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ stream->read( &mColorize );
|
|
|
|
+
|
|
|
|
|
|
if ( tmpColor != mWavelength )
|
|
if ( tmpColor != mWavelength )
|
|
{
|
|
{
|
|
@@ -663,8 +689,12 @@ bool ScatterSky::_initShader()
|
|
Con::warnf( "ScatterSky::_initShader - failed to locate shader ScatterSkyShaderData!" );
|
|
Con::warnf( "ScatterSky::_initShader - failed to locate shader ScatterSkyShaderData!" );
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
+ Vector<GFXShaderMacro> macros;
|
|
|
|
+ if ( mColorizeAmt )
|
|
|
|
+ macros.push_back( GFXShaderMacro( "USE_COLORIZE" ) );
|
|
|
|
+
|
|
|
|
+ mShader = shaderData->getShader( macros );
|
|
|
|
|
|
- mShader = shaderData->getShader();
|
|
|
|
if ( !mShader )
|
|
if ( !mShader )
|
|
return false;
|
|
return false;
|
|
|
|
|
|
@@ -698,6 +728,7 @@ bool ScatterSky::_initShader()
|
|
mInverseWavelengthSC = mShader->getShaderConstHandle( "$invWaveLength" );
|
|
mInverseWavelengthSC = mShader->getShaderConstHandle( "$invWaveLength" );
|
|
mNightInterpolantAndExposureSC = mShader->getShaderConstHandle( "$nightInterpAndExposure" );
|
|
mNightInterpolantAndExposureSC = mShader->getShaderConstHandle( "$nightInterpAndExposure" );
|
|
mUseCubemapSC = mShader->getShaderConstHandle( "$useCubemap" );
|
|
mUseCubemapSC = mShader->getShaderConstHandle( "$useCubemap" );
|
|
|
|
+ mColorizeSC = mShader->getShaderConstHandle( "$colorize" );
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -792,68 +823,78 @@ void ScatterSky::_initCurves()
|
|
|
|
|
|
// Takes time of day (0-2) and returns
|
|
// Takes time of day (0-2) and returns
|
|
// the night interpolant (0-1) day/night factor.
|
|
// the night interpolant (0-1) day/night factor.
|
|
|
|
+ // moonlight = 0, sunlight > 0
|
|
mCurves[0].clear();
|
|
mCurves[0].clear();
|
|
- mCurves[0].addPoint( 0.0f, 0.5f );
|
|
|
|
- mCurves[0].addPoint( 0.1f, 1.0f );
|
|
|
|
- mCurves[0].addPoint( 0.9f, 1.0f );
|
|
|
|
- mCurves[0].addPoint( 1.0f, 0.5f );
|
|
|
|
- mCurves[0].addPoint( 1.1f, 0.0f );
|
|
|
|
- mCurves[0].addPoint( 1.9f, 0.0f );
|
|
|
|
- mCurves[0].addPoint( 2.0f, 0.5f );
|
|
|
|
- //mCurves[0].addPoint( 0.0f, 0.25f );
|
|
|
|
- //mCurves[0].addPoint( 0.05f, 0.5f );
|
|
|
|
- //mCurves[0].addPoint( 0.1f, 1.0f );
|
|
|
|
- //mCurves[0].addPoint( 0.6f, 1.0f );
|
|
|
|
- //mCurves[0].addPoint( 0.98f, 0.895f );
|
|
|
|
- //mCurves[0].addPoint( 1.0f, 0.15f );
|
|
|
|
- //mCurves[0].addPoint( 1.15f, 0.0f );
|
|
|
|
- //mCurves[0].addPoint( 1.9f, 0.0f );
|
|
|
|
- //mCurves[0].addPoint( 2.0f, 0.15f );
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- // Takes time of day (0-2) and returns
|
|
|
|
- // the moon light brightness.
|
|
|
|
|
|
+ mCurves[0].addPoint( 0.0f, 0.5f );// Sunrise
|
|
|
|
+ mCurves[0].addPoint( 0.025f, 1.0f );//
|
|
|
|
+ mCurves[0].addPoint( 0.975f, 1.0f );//
|
|
|
|
+ mCurves[0].addPoint( 1.0f, 0.5f );//Sunset
|
|
|
|
+ mCurves[0].addPoint( 1.02f, 0.0f );//Sunlight ends
|
|
|
|
+ mCurves[0].addPoint( 1.98f, 0.0f );//Sunlight begins
|
|
|
|
+ mCurves[0].addPoint( 2.0f, 0.5f );// Sunrise
|
|
|
|
+
|
|
|
|
+ // Takes time of day (0-2) and returns mieScattering factor
|
|
|
|
+ // Regulates the size of the sun's disk
|
|
mCurves[1].clear();
|
|
mCurves[1].clear();
|
|
- mCurves[1].addPoint( 0.0f, 0.0f );
|
|
|
|
- mCurves[1].addPoint( 1.0f, 0.0f );
|
|
|
|
- mCurves[1].addPoint( 1.1f, 0.0f );
|
|
|
|
- mCurves[1].addPoint( 1.2f, 0.5f );
|
|
|
|
- mCurves[1].addPoint( 1.3f, 1.0f );
|
|
|
|
- mCurves[1].addPoint( 1.8f, 0.5f );
|
|
|
|
- mCurves[1].addPoint( 1.9f, 0.0f );
|
|
|
|
- mCurves[1].addPoint( 2.0f, 0.0f );
|
|
|
|
|
|
+ mCurves[1].addPoint( 0.0f, 0.0006f );
|
|
|
|
+ mCurves[1].addPoint( 0.01f, 0.00035f );
|
|
|
|
+ mCurves[1].addPoint( 0.03f, 0.00023f );
|
|
|
|
+ mCurves[1].addPoint( 0.1f, 0.00022f );
|
|
|
|
+ mCurves[1].addPoint( 0.2f, 0.00043f );
|
|
|
|
+ mCurves[1].addPoint( 0.3f, 0.00062f );
|
|
|
|
+ mCurves[1].addPoint( 0.4f, 0.0008f );
|
|
|
|
+ mCurves[1].addPoint( 0.5f, 0.00086f );// High noon
|
|
|
|
+ mCurves[1].addPoint( 0.6f, 0.0008f );
|
|
|
|
+ mCurves[1].addPoint( 0.7f, 0.00062f );
|
|
|
|
+ mCurves[1].addPoint( 0.8f, 0.00043f );
|
|
|
|
+ mCurves[1].addPoint( 0.9f, 0.00022f );
|
|
|
|
+ mCurves[1].addPoint( 0.97f, 0.00023f );
|
|
|
|
+ mCurves[1].addPoint( 0.99f, 0.00035f );
|
|
|
|
+ mCurves[1].addPoint( 1.0f, 0.0006f );
|
|
|
|
+ mCurves[1].addPoint( 2.0f, 0.0006f );
|
|
|
|
|
|
// Takes time of day and returns brightness
|
|
// Takes time of day and returns brightness
|
|
|
|
+ // Controls sunlight and moonlight brightness
|
|
mCurves[2].clear();
|
|
mCurves[2].clear();
|
|
- mCurves[2].addPoint( 0.0f, 0.4f );
|
|
|
|
- mCurves[2].addPoint( 0.25f, 1.0f );
|
|
|
|
- mCurves[2].addPoint( 0.5f, 1.0f );
|
|
|
|
- mCurves[2].addPoint( 0.75f, 0.9f );
|
|
|
|
- mCurves[2].addPoint( 1.0f, 0.3f );
|
|
|
|
- mCurves[2].addPoint( 1.02877f, 0.0f );
|
|
|
|
- mCurves[2].addPoint( 1.05f, 0.0f );
|
|
|
|
- mCurves[2].addPoint( 1.15f, 0.0f );
|
|
|
|
- mCurves[2].addPoint( 1.2f, 0.0f );
|
|
|
|
- mCurves[2].addPoint( 1.3f, 0.3f );
|
|
|
|
- mCurves[2].addPoint( 1.85f, 0.4f );
|
|
|
|
- mCurves[2].addPoint( 1.9f, 0.0f );
|
|
|
|
- mCurves[2].addPoint( 2.0f, 0.0f );
|
|
|
|
-
|
|
|
|
|
|
+ mCurves[2].addPoint( 0.0f, 0.2f );// Sunrise
|
|
|
|
+ mCurves[2].addPoint( 0.1f, 1.0f );
|
|
|
|
+ mCurves[2].addPoint( 0.9f, 1.0f );// Sunset
|
|
|
|
+ mCurves[2].addPoint( 1.008f, 0.0f );//Adjust end of sun's reflection
|
|
|
|
+ mCurves[2].addPoint( 1.02001f, 0.0f );
|
|
|
|
+ mCurves[2].addPoint( 1.05f, 0.5f );// Turn brightness up for moonlight
|
|
|
|
+ mCurves[2].addPoint( 1.93f, 0.5f );
|
|
|
|
+ mCurves[2].addPoint( 1.97999f, 0.0f );// No brightness when sunlight starts
|
|
|
|
+ mCurves[2].addPoint( 1.992f, 0.0f );//Adjust start of sun's reflection
|
|
|
|
+ mCurves[2].addPoint( 2.0f, 0.2f ); // Sunrise
|
|
|
|
+
|
|
|
|
+ // Interpolation of day/night color sets
|
|
|
|
+ // 0/1 ambient/nightcolor
|
|
|
|
+ // 0 = day colors only anytime
|
|
|
|
+ // 1 = night colors only anytime
|
|
|
|
+ // between 0 and 1 renders both color sets anytime
|
|
|
|
|
|
mCurves[3].clear();
|
|
mCurves[3].clear();
|
|
- mCurves[3].addPoint( 0.0f, 0.01f );
|
|
|
|
- mCurves[3].addPoint( 0.05f, 0.0f );
|
|
|
|
|
|
+ mCurves[3].addPoint( 0.0f, 0.8f );//Sunrise
|
|
mCurves[3].addPoint( 0.1f, 0.0f );
|
|
mCurves[3].addPoint( 0.1f, 0.0f );
|
|
- mCurves[3].addPoint( 0.6f, 0.0f );
|
|
|
|
- mCurves[3].addPoint( 0.98f, 0.75f );
|
|
|
|
- mCurves[3].addPoint( 1.0f, 1.0f );
|
|
|
|
- mCurves[3].addPoint( 1.02877f, 1.0f );
|
|
|
|
- mCurves[3].addPoint( 1.05f, 1.0f );
|
|
|
|
- mCurves[3].addPoint( 1.2f, 1.0f );
|
|
|
|
- mCurves[3].addPoint( 1.3f, 1.0f );
|
|
|
|
- mCurves[3].addPoint( 1.85f, 1.0f );
|
|
|
|
- mCurves[3].addPoint( 1.9f, 1.0f );
|
|
|
|
- mCurves[3].addPoint( 2.0f, 1.0f );
|
|
|
|
|
|
+ mCurves[3].addPoint( 0.99f, 0.0f );
|
|
|
|
+ mCurves[3].addPoint( 1.0f, 0.8f );// Sunset
|
|
|
|
+ mCurves[3].addPoint( 1.01999f, 1.0f );//
|
|
|
|
+ mCurves[3].addPoint( 1.98001f, 1.0f );// Sunlight begins with full night colors
|
|
|
|
+ mCurves[3].addPoint( 2.0f, 0.8f ); //Sunrise
|
|
|
|
+
|
|
|
|
+ // Takes time of day (0-2) and returns smoothing factor
|
|
|
|
+ // Interpolates between mMoonTint color and mNightColor
|
|
|
|
+
|
|
|
|
+ mCurves[4].clear();
|
|
|
|
+ mCurves[4].addPoint( 0.0f, 1.0f );
|
|
|
|
+ mCurves[4].addPoint( 0.96f, 1.0f );
|
|
|
|
+ mCurves[4].addPoint( 1.01999f, 0.5f );
|
|
|
|
+ mCurves[4].addPoint( 1.02001f, 0.5f );
|
|
|
|
+ mCurves[4].addPoint( 1.08f, 1.0f );
|
|
|
|
+ mCurves[4].addPoint( 1.92f, 1.0f );
|
|
|
|
+ mCurves[4].addPoint( 1.97999f, 0.5f );
|
|
|
|
+ mCurves[4].addPoint( 1.98001f, 0.5f );
|
|
|
|
+ mCurves[4].addPoint( 2.0f, 1.0f );
|
|
}
|
|
}
|
|
|
|
|
|
void ScatterSky::_updateTimeOfDay( TimeOfDay *timeOfDay, F32 time )
|
|
void ScatterSky::_updateTimeOfDay( TimeOfDay *timeOfDay, F32 time )
|
|
@@ -869,9 +910,6 @@ void ScatterSky::_render( ObjectRenderInst *ri, SceneRenderState *state, BaseMat
|
|
|
|
|
|
GFXTransformSaver saver;
|
|
GFXTransformSaver saver;
|
|
|
|
|
|
- //mLightDir = -mLight->getDirection();
|
|
|
|
- //mLightDir.normalize();
|
|
|
|
-
|
|
|
|
if ( mVB.isNull() || mPrimBuffer.isNull() )
|
|
if ( mVB.isNull() || mPrimBuffer.isNull() )
|
|
_initVBIB();
|
|
_initVBIB();
|
|
|
|
|
|
@@ -896,14 +934,6 @@ void ScatterSky::_render( ObjectRenderInst *ri, SceneRenderState *state, BaseMat
|
|
MatrixF proj( true );
|
|
MatrixF proj( true );
|
|
frust.getProjectionMatrix( &proj );
|
|
frust.getProjectionMatrix( &proj );
|
|
|
|
|
|
- //MatrixF camMat = state->getCameraTransform();
|
|
|
|
- //camMat.inverse();
|
|
|
|
- //MatrixF tmp( true );
|
|
|
|
- //tmp = camMat;
|
|
|
|
- //tmp.setPosition( Point3F( 0, 0, 0 ) );
|
|
|
|
-
|
|
|
|
- //proj.mul( tmp );
|
|
|
|
-
|
|
|
|
Point3F camPos2 = state->getCameraPosition();
|
|
Point3F camPos2 = state->getCameraPosition();
|
|
MatrixF xfm(true);
|
|
MatrixF xfm(true);
|
|
xfm.setPosition(camPos2);//-Point3F( 0, 0, 200000.0f));
|
|
xfm.setPosition(camPos2);//-Point3F( 0, 0, 200000.0f));
|
|
@@ -922,6 +952,7 @@ void ScatterSky::_render( ObjectRenderInst *ri, SceneRenderState *state, BaseMat
|
|
mShaderConsts->setSafe( mNightColorSC, mNightColor );
|
|
mShaderConsts->setSafe( mNightColorSC, mNightColor );
|
|
mShaderConsts->setSafe( mInverseWavelengthSC, invWavelength );
|
|
mShaderConsts->setSafe( mInverseWavelengthSC, invWavelength );
|
|
mShaderConsts->setSafe( mNightInterpolantAndExposureSC, Point2F( mExposure, mNightInterpolant ) );
|
|
mShaderConsts->setSafe( mNightInterpolantAndExposureSC, Point2F( mExposure, mNightInterpolant ) );
|
|
|
|
+ mShaderConsts->setSafe( mColorizeSC, mColorize*mColorizeAmt );
|
|
|
|
|
|
if ( GFXDevice::getWireframe() )
|
|
if ( GFXDevice::getWireframe() )
|
|
{
|
|
{
|
|
@@ -1120,7 +1151,15 @@ void ScatterSky::_interpolateColors()
|
|
mSunColor *= mSunScale;
|
|
mSunColor *= mSunScale;
|
|
mFogColor *= mFogScale;
|
|
mFogColor *= mFogScale;
|
|
|
|
|
|
- mFogColor.interpolate( mFogColor, mNightFogColor, mCurves[3].getVal( mTimeOfDay ) );//mNightInterpolant );
|
|
|
|
|
|
+ mMieScattering = (mCurves[1].getVal( mTimeOfDay) * mSunSize ); //Scale the size of the sun's disk
|
|
|
|
+
|
|
|
|
+ ColorF moonTemp = mMoonTint;
|
|
|
|
+ ColorF nightTemp = mNightColor;
|
|
|
|
+
|
|
|
|
+ moonTemp.interpolate( mNightColor, mMoonTint, mCurves[4].getVal( mTimeOfDay ) );
|
|
|
|
+ nightTemp.interpolate( mMoonTint, mNightColor, mCurves[4].getVal( mTimeOfDay ) );
|
|
|
|
+
|
|
|
|
+ mFogColor.interpolate( mFogColor, mNightFogColor, mCurves[3].getVal( mTimeOfDay ) );//mNightInterpolant );
|
|
mFogColor.alpha = 1.0f;
|
|
mFogColor.alpha = 1.0f;
|
|
|
|
|
|
mAmbientColor.interpolate( mAmbientColor, mNightColor, mCurves[3].getVal( mTimeOfDay ) );//mNightInterpolant );
|
|
mAmbientColor.interpolate( mAmbientColor, mNightColor, mCurves[3].getVal( mTimeOfDay ) );//mNightInterpolant );
|
|
@@ -1175,11 +1214,6 @@ void ScatterSky::_getAmbientColor( ColorF *outColor )
|
|
|
|
|
|
if ( count > 0 )
|
|
if ( count > 0 )
|
|
(*outColor) /= count;
|
|
(*outColor) /= count;
|
|
- //Point3F pColor( outColor->red, outColor->green, outColor->blue );
|
|
|
|
- //F32 len = pColor.len();
|
|
|
|
- //if ( len > 0 )
|
|
|
|
- // (*outColor) /= len;
|
|
|
|
-
|
|
|
|
mMieScattering = oldMieScattering;
|
|
mMieScattering = oldMieScattering;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1232,14 +1266,6 @@ void ScatterSky::_getFogColor( ColorF *outColor )
|
|
|
|
|
|
F32 ScatterSky::_vernierScale( F32 fCos )
|
|
F32 ScatterSky::_vernierScale( F32 fCos )
|
|
{
|
|
{
|
|
- /*
|
|
|
|
- F32 x5 = x * 5.25;
|
|
|
|
- F32 x5p6 = (-6.80 + x5);
|
|
|
|
- F32 xnew = (3.83 + x * x5p6);
|
|
|
|
- F32 xfinal = (0.459 + x * xnew);
|
|
|
|
- F32 xfinal2 = -0.00287 + x * xfinal;
|
|
|
|
- F32 outx = mExp( xfinal2 );
|
|
|
|
- return 0.25 * outx;*/
|
|
|
|
F32 x = 1.0 - fCos;
|
|
F32 x = 1.0 - fCos;
|
|
return 0.25f * exp( -0.00287f + x * (0.459f + x * (3.83f + x * ((-6.80f + (x * 5.25f))))) );
|
|
return 0.25f * exp( -0.00287f + x * (0.459f + x * (3.83f + x * ((-6.80f + (x * 5.25f))))) );
|
|
}
|
|
}
|
|
@@ -1322,18 +1348,10 @@ void ScatterSky::_getColor( const Point3F &pos, ColorF *outColor )
|
|
F32 g = -0.991f;
|
|
F32 g = -0.991f;
|
|
F32 g2 = g * g;
|
|
F32 g2 = g * g;
|
|
F32 miePhase = _getMiePhase( fCos, fCos2, g, g2 );
|
|
F32 miePhase = _getMiePhase( fCos, fCos2, g, g2 );
|
|
- //F32 rayleighPhase = _getRayleighPhase( fCos2 );
|
|
|
|
|
|
|
|
Point3F color = rayleighColor + (miePhase * mieColor);
|
|
Point3F color = rayleighColor + (miePhase * mieColor);
|
|
ColorF tmp( color.x, color.y, color.z, color.y );
|
|
ColorF tmp( color.x, color.y, color.z, color.y );
|
|
|
|
|
|
- //if ( !tmp.isValidColor() )
|
|
|
|
- //{
|
|
|
|
- // F32 len = color.len();
|
|
|
|
- // if ( len > 0 )
|
|
|
|
- // color /= len;
|
|
|
|
- //}
|
|
|
|
-
|
|
|
|
Point3F expColor( 0, 0, 0 );
|
|
Point3F expColor( 0, 0, 0 );
|
|
expColor.x = 1.0f - exp(-mExposure * color.x);
|
|
expColor.x = 1.0f - exp(-mExposure * color.x);
|
|
expColor.y = 1.0f - exp(-mExposure * color.y);
|
|
expColor.y = 1.0f - exp(-mExposure * color.y);
|