Преглед на файлове

Merge pull request #858 from Azaezel/alpha401/ambientFallbackClean

provide a new levelinfo. fallbackAmbient
Brian Roberts преди 3 години
родител
ревизия
674f75dbd0
променени са 3 файла, в които са добавени 22 реда и са изтрити 7 реда
  1. 7 2
      Engine/source/T3D/levelInfo.cpp
  2. 1 1
      Engine/source/T3D/levelInfo.h
  3. 14 4
      Engine/source/lighting/lightManager.cpp

+ 7 - 2
Engine/source/T3D/levelInfo.cpp

@@ -68,7 +68,7 @@ extern ColorI gCanvasClearColor;
 
 
 /// @see DecalManager
 /// @see DecalManager
 extern F32 gDecalBias;
 extern F32 gDecalBias;
-
+extern LinearColorF gFallbackAmbient;
 /// @see AccumulationVolume
 /// @see AccumulationVolume
 extern GFXTexHandle gLevelAccuMap;
 extern GFXTexHandle gLevelAccuMap;
 
 
@@ -86,6 +86,7 @@ LevelInfo::LevelInfo()
       mDecalBias( 0.0015f ),
       mDecalBias( 0.0015f ),
       mCanvasClearColor( 255, 0, 255, 255 ),
       mCanvasClearColor( 255, 0, 255, 255 ),
       mAmbientLightBlendPhase( 1.f ),
       mAmbientLightBlendPhase( 1.f ),
+      mFallbackAmbient(LinearColorF(0.1f, 0.1f, 0.1f, 1.0f)),
       mSoundAmbience( NULL ),
       mSoundAmbience( NULL ),
       mSoundDistanceModel( SFXDistanceModelLinear ),
       mSoundDistanceModel( SFXDistanceModelLinear ),
       mSoundscape( NULL )
       mSoundscape( NULL )
@@ -163,6 +164,8 @@ void LevelInfo::initPersistFields()
       addField( "ambientLightBlendCurve", TypeEaseF, Offset( mAmbientLightBlendCurve, LevelInfo ),
       addField( "ambientLightBlendCurve", TypeEaseF, Offset( mAmbientLightBlendCurve, LevelInfo ),
          "Interpolation curve to use for blending from one ambient light color to a different one." );
          "Interpolation curve to use for blending from one ambient light color to a different one." );
 
 
+      addField("fallbackAmbient", TypeColorF, Offset(mFallbackAmbient, LevelInfo),
+         "Ambient Color to use if no global light source exists.");
       //addField( "advancedLightmapSupport", TypeBool, Offset( mAdvancedLightmapSupport, LevelInfo ),
       //addField( "advancedLightmapSupport", TypeBool, Offset( mAdvancedLightmapSupport, LevelInfo ),
       //   "Enable expanded support for mixing static and dynamic lighting (more costly)" );
       //   "Enable expanded support for mixing static and dynamic lighting (more costly)" );
 
 
@@ -211,6 +214,7 @@ U32 LevelInfo::packUpdate(NetConnection *conn, U32 mask, BitStream *stream)
    stream->writeFlag( mAdvancedLightmapSupport );
    stream->writeFlag( mAdvancedLightmapSupport );
    stream->write( mAmbientLightBlendPhase );
    stream->write( mAmbientLightBlendPhase );
    mathWrite( *stream, mAmbientLightBlendCurve );
    mathWrite( *stream, mAmbientLightBlendCurve );
+   stream->write(mFallbackAmbient);
 
 
    sfxWrite( stream, mSoundAmbience );
    sfxWrite( stream, mSoundAmbience );
    stream->writeInt( mSoundDistanceModel, 1 );
    stream->writeInt( mSoundDistanceModel, 1 );
@@ -241,6 +245,7 @@ void LevelInfo::unpackUpdate(NetConnection *conn, BitStream *stream)
    mAdvancedLightmapSupport = stream->readFlag();
    mAdvancedLightmapSupport = stream->readFlag();
    stream->read( &mAmbientLightBlendPhase );
    stream->read( &mAmbientLightBlendPhase );
    mathRead( *stream, &mAmbientLightBlendCurve );
    mathRead( *stream, &mAmbientLightBlendCurve );
+   stream->read(&mFallbackAmbient);
 
 
    String errorStr;
    String errorStr;
    if( !sfxReadAndResolve( stream, &mSoundAmbience, errorStr ) )
    if( !sfxReadAndResolve( stream, &mSoundAmbience, errorStr ) )
@@ -323,8 +328,8 @@ void LevelInfo::_updateSceneGraph()
    scene->setVisibleGhostDistance( mVisibleGhostDistance );
    scene->setVisibleGhostDistance( mVisibleGhostDistance );
 
 
    gDecalBias = mDecalBias;
    gDecalBias = mDecalBias;
-
    // Set ambient lighting properties.
    // Set ambient lighting properties.
+   gFallbackAmbient = mFallbackAmbient;
 
 
    scene->setAmbientLightTransitionTime( mAmbientLightBlendPhase * 1000.f );
    scene->setAmbientLightTransitionTime( mAmbientLightBlendPhase * 1000.f );
    scene->setAmbientLightTransitionCurve( mAmbientLightBlendCurve );
    scene->setAmbientLightTransitionCurve( mAmbientLightBlendCurve );

+ 1 - 1
Engine/source/T3D/levelInfo.h

@@ -78,7 +78,7 @@ class LevelInfo : public NetObject
       /// Interpolation for going from one global ambient color
       /// Interpolation for going from one global ambient color
       /// to a different one.
       /// to a different one.
       EaseF mAmbientLightBlendCurve;
       EaseF mAmbientLightBlendCurve;
-
+      LinearColorF mFallbackAmbient;
       /// @}
       /// @}
       
       
       /// @name Sound Properties
       /// @name Sound Properties

+ 14 - 4
Engine/source/lighting/lightManager.cpp

@@ -42,6 +42,7 @@
 Signal<void(const char*,bool)> LightManager::smActivateSignal;
 Signal<void(const char*,bool)> LightManager::smActivateSignal;
 LightManager *LightManager::smActiveLM = NULL;
 LightManager *LightManager::smActiveLM = NULL;
 
 
+LinearColorF gFallbackAmbient;
 
 
 LightManager::LightManager( const char *name, const char *id )
 LightManager::LightManager( const char *name, const char *id )
    :  mName( name ),
    :  mName( name ),
@@ -162,19 +163,28 @@ LightInfo* LightManager::getDefaultLight()
 {
 {
    // The sun is always our default light when
    // The sun is always our default light when
    // when its registered.
    // when its registered.
-   if ( mSpecialLights[ LightManager::slSunLightType ] )
-      return mSpecialLights[ LightManager::slSunLightType ];
+   if (mSpecialLights[LightManager::slSunLightType])
+   {
+      mSpecialLights[LightManager::slSunLightType]->setAmbient(gFallbackAmbient);
+      return mSpecialLights[LightManager::slSunLightType];
+   }
 
 
    // Else return a dummy special light.
    // Else return a dummy special light.
-   if ( !mDefaultLight )
+   if (!mDefaultLight)
+   {
       mDefaultLight = createLightInfo();
       mDefaultLight = createLightInfo();
+   }
+   mDefaultLight->setAmbient(gFallbackAmbient);
    return mDefaultLight;
    return mDefaultLight;
 }
 }
 
 
 LightInfo* LightManager::getSpecialLight( LightManager::SpecialLightTypesEnum type, bool useDefault )
 LightInfo* LightManager::getSpecialLight( LightManager::SpecialLightTypesEnum type, bool useDefault )
 {
 {
-   if ( mSpecialLights[type] )
+   if (mSpecialLights[type])
+   {
+      mSpecialLights[LightManager::slSunLightType]->setAmbient(gFallbackAmbient);
       return mSpecialLights[type];
       return mSpecialLights[type];
+   }
 
 
    if ( useDefault )
    if ( useDefault )
       return getDefaultLight();
       return getDefaultLight();