Browse Source

shift attenuation to probes in general.

AzaezelX 8 months ago
parent
commit
5a2ec2731f

+ 0 - 16
Engine/source/T3D/lighting/boxEnvironmentProbe.cpp

@@ -94,8 +94,6 @@ void BoxEnvironmentProbe::initPersistFields()
    // SceneObject already handles exposing the transform
    // SceneObject already handles exposing the transform
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 
-   addField("attenuation", TypeF32, Offset(mAtten, BoxEnvironmentProbe), "falloff percent");
-
    removeField("radius");
    removeField("radius");
 }
 }
 
 
@@ -127,12 +125,6 @@ U32 BoxEnvironmentProbe::packUpdate(NetConnection *conn, U32 mask, BitStream *st
 {
 {
    // Allow the Parent to get a crack at writing its info
    // Allow the Parent to get a crack at writing its info
    U32 retMask = Parent::packUpdate(conn, mask, stream);
    U32 retMask = Parent::packUpdate(conn, mask, stream);
-
-   if (stream->writeFlag(mask & StaticDataMask))
-   {
-      stream->write(mAtten);
-   }
-
    return retMask;
    return retMask;
 }
 }
 
 
@@ -141,12 +133,6 @@ void BoxEnvironmentProbe::unpackUpdate(NetConnection *conn, BitStream *stream)
    // Let the Parent read any info it sent
    // Let the Parent read any info it sent
    Parent::unpackUpdate(conn, stream);
    Parent::unpackUpdate(conn, stream);
 
 
-   if (stream->readFlag())  // StaticDataMask
-   {
-      stream->read(&mAtten);
-      mDirty = true;
-   }
-
    if (mDirty)
    if (mDirty)
    {
    {
       updateProbeParams();
       updateProbeParams();
@@ -160,8 +146,6 @@ void BoxEnvironmentProbe::unpackUpdate(NetConnection *conn, BitStream *stream)
 void BoxEnvironmentProbe::updateProbeParams()
 void BoxEnvironmentProbe::updateProbeParams()
 {
 {
    mProbeShapeType = ProbeInfo::Box;
    mProbeShapeType = ProbeInfo::Box;
-   mProbeInfo.mAtten = mAtten;
-
    Parent::updateProbeParams();
    Parent::updateProbeParams();
 }
 }
 
 

+ 0 - 1
Engine/source/T3D/lighting/boxEnvironmentProbe.h

@@ -56,7 +56,6 @@ class BaseMatInstance;
 class BoxEnvironmentProbe : public ReflectionProbe
 class BoxEnvironmentProbe : public ReflectionProbe
 {
 {
    typedef ReflectionProbe Parent;
    typedef ReflectionProbe Parent;
-   F32 mAtten;
 private:
 private:
 
 
     //Debug rendering
     //Debug rendering

+ 5 - 1
Engine/source/T3D/lighting/reflectionProbe.cpp

@@ -152,10 +152,11 @@ ReflectionProbe::~ReflectionProbe()
 void ReflectionProbe::initPersistFields()
 void ReflectionProbe::initPersistFields()
 {
 {
    docsURL;
    docsURL;
-   addField("canDamp", TypeBool, Offset(mCanDamp, ReflectionProbe),"wetness allowed");
    addGroup("Rendering");
    addGroup("Rendering");
       addProtectedField("enabled", TypeBool, Offset(mEnabled, ReflectionProbe),
       addProtectedField("enabled", TypeBool, Offset(mEnabled, ReflectionProbe),
          &_setEnabled, &defaultProtectedGetFn, "Is the probe enabled or not");
          &_setEnabled, &defaultProtectedGetFn, "Is the probe enabled or not");
+      addField("canDamp", TypeBool, Offset(mCanDamp, ReflectionProbe),"wetness allowed");
+      addField("attenuation", TypeF32, Offset(mAtten, ReflectionProbe), "falloff percent");
    endGroup("Rendering");
    endGroup("Rendering");
 
 
    addGroup("Reflection");
    addGroup("Reflection");
@@ -436,6 +437,7 @@ U32 ReflectionProbe::packUpdate(NetConnection *conn, U32 mask, BitStream *stream
       stream->write(mProbeUniqueID);
       stream->write(mProbeUniqueID);
       stream->write((U32)mReflectionModeType);
       stream->write((U32)mReflectionModeType);
       stream->writeString(mCubemapName);
       stream->writeString(mCubemapName);
+      stream->write(mAtten);
    }
    }
 
 
    if (stream->writeFlag(mask & EnabledMask))
    if (stream->writeFlag(mask & EnabledMask))
@@ -490,6 +492,7 @@ void ReflectionProbe::unpackUpdate(NetConnection *conn, BitStream *stream)
       if(oldReflectModeType != mReflectionModeType || oldCubemapName != mCubemapName)
       if(oldReflectModeType != mReflectionModeType || oldCubemapName != mCubemapName)
          mCubemapDirty = true;
          mCubemapDirty = true;
 
 
+      stream->read(&mAtten);
       mDirty = true;
       mDirty = true;
    }
    }
 
 
@@ -565,6 +568,7 @@ void ReflectionProbe::updateProbeParams()
    mProbeInfo.mProbeRefOffset = mProbeRefOffset;
    mProbeInfo.mProbeRefOffset = mProbeRefOffset;
    mProbeInfo.mProbeRefScale = mProbeRefScale;
    mProbeInfo.mProbeRefScale = mProbeRefScale;
    mProbeInfo.mCanDamp = mCanDamp;
    mProbeInfo.mCanDamp = mCanDamp;
+   mProbeInfo.mAtten = mAtten;
    
    
    mProbeInfo.mDirty = true;
    mProbeInfo.mDirty = true;
 
 

+ 1 - 0
Engine/source/T3D/lighting/reflectionProbe.h

@@ -167,6 +167,7 @@ protected:
    /// Whether this probe is enabled or not
    /// Whether this probe is enabled or not
    /// </summary>
    /// </summary>
    bool mEnabled;
    bool mEnabled;
+   F32 mAtten;
    
    
    bool mDirty;
    bool mDirty;
 
 

+ 5 - 4
Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl

@@ -351,8 +351,9 @@ vec4 compute4Lights( Surface surface,
 //Probe IBL stuff
 //Probe IBL stuff
 float defineSphereSpaceInfluence(vec3 wsPosition, vec3 wsProbePosition, float radius)
 float defineSphereSpaceInfluence(vec3 wsPosition, vec3 wsProbePosition, float radius)
 {
 {
-   vec3 L = wsProbePosition.xyz - wsPosition;
-   float contribution = 1.0 - length(L) / radius;
+   float3 L = (wsProbePosition.xyz - wsPosition);
+   float innerRadius = radius-(radius*atten);
+   float contribution = 1.0-saturate(mix(length(L), radius-innerRadius, atten)/radius);
    return saturate(contribution);
    return saturate(contribution);
 }
 }
 
 
@@ -436,7 +437,7 @@ vec4 computeForwardProbes(Surface surface,
       }
       }
       else if (inProbeConfigData[i].r == 1) //sphere
       else if (inProbeConfigData[i].r == 1) //sphere
       {
       {
-         contribution[i] = defineSphereSpaceInfluence(surface.P, inProbePosArray[i].xyz, inProbeConfigData[i].g)*atten;
+         contribution[i] = defineSphereSpaceInfluence(surface.P, inProbePosArray[i].xyz, inProbeConfigData[i].g, inProbeConfigData[i].b*atten);
       }
       }
 
 
       if (contribution[i]>0.0)
       if (contribution[i]>0.0)
@@ -593,7 +594,7 @@ vec4 debugVizForwardProbes(Surface surface,
       }
       }
       else if (inProbeConfigData[i].r == 1) //sphere
       else if (inProbeConfigData[i].r == 1) //sphere
       {
       {
-         contribution[i] = defineSphereSpaceInfluence(surface.P, inProbePosArray[i].xyz, inProbeConfigData[i].g);
+         contribution[i] = defineSphereSpaceInfluence(surface.P, inProbePosArray[i].xyz, inProbeConfigData[i].g, inProbeConfigData[i].b);
          if (contribution[i] > 0.0)
          if (contribution[i] > 0.0)
             probehits++;
             probehits++;
       }
       }

+ 6 - 5
Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl

@@ -352,10 +352,11 @@ float4 compute4Lights( Surface surface,
 }
 }
 
 
 //Probe IBL stuff
 //Probe IBL stuff
-float defineSphereSpaceInfluence(float3 wsPosition, float3 wsProbePosition, float radius)
+float defineSphereSpaceInfluence(float3 wsPosition, float3 wsProbePosition, float radius, float atten)
 {
 {
-   float3 L = wsProbePosition.xyz - wsPosition;
-   float contribution = 1.0 - length(L) / radius;
+   float3 L = (wsProbePosition.xyz - wsPosition);
+   float innerRadius = radius-(radius*atten);
+   float contribution = 1.0-saturate(lerp(length(L), radius-innerRadius, atten)/radius);
    return saturate(contribution);
    return saturate(contribution);
 }
 }
 
 
@@ -441,7 +442,7 @@ float4 computeForwardProbes(Surface surface,
       }
       }
       else if (inProbeConfigData[i].r == 1) //sphere
       else if (inProbeConfigData[i].r == 1) //sphere
       {
       {
-         contribution[i] = defineSphereSpaceInfluence(surface.P, inProbePosArray[i].xyz, inProbeConfigData[i].g)*atten;
+         contribution[i] = defineSphereSpaceInfluence(surface.P, inProbePosArray[i].xyz, inProbeConfigData[i].g, inProbeConfigData[i].b*atten);
       }
       }
 
 
       if (contribution[i]>0.0)
       if (contribution[i]>0.0)
@@ -599,7 +600,7 @@ float4 debugVizForwardProbes(Surface surface,
       }
       }
       else if (inProbeConfigData[i].r == 1) //sphere
       else if (inProbeConfigData[i].r == 1) //sphere
       {
       {
-         contribution[i] = defineSphereSpaceInfluence(surface.P, inProbePosArray[i].xyz, inProbeConfigData[i].g);
+         contribution[i] = defineSphereSpaceInfluence(surface.P, inProbePosArray[i].xyz, inProbeConfigData[i].g, inProbeConfigData[i].b);
          if (contribution[i] > 0.0)
          if (contribution[i] > 0.0)
             probehits++;
             probehits++;
       }
       }

+ 1 - 1
Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl

@@ -94,7 +94,7 @@ void main()
          }
          }
          else if (probeConfigData[i].r == 1) //sphere
          else if (probeConfigData[i].r == 1) //sphere
          {
          {
-            contribution[i] = defineSphereSpaceInfluence(surface.P, probePosArray[i].xyz, probeConfigData[i].g)*atten;
+            contribution[i] = defineSphereSpaceInfluence(surface.P, probePosArray[i].xyz, probeConfigData[i].g, probeConfigData[i].b*atten); 
          }
          }
 
 
          if (contribution[i]>0.0)
          if (contribution[i]>0.0)

+ 3 - 3
Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl

@@ -83,12 +83,12 @@ float4 main(PFXVertToPix IN) : SV_TARGET
 
 
          float atten =1.0-(length(eyePosWorld-probePosArray[i].xyz)/maxProbeDrawDistance);
          float atten =1.0-(length(eyePosWorld-probePosArray[i].xyz)/maxProbeDrawDistance);
          if (probeConfigData[i].r == 0) //box
          if (probeConfigData[i].r == 0) //box
-         {
+         { 
             contribution[i] = defineBoxSpaceInfluence(surface.P, worldToObjArray[i], probeConfigData[i].b)*atten;
             contribution[i] = defineBoxSpaceInfluence(surface.P, worldToObjArray[i], probeConfigData[i].b)*atten;
          }
          }
-         else if (probeConfigData[i].r == 1) //sphere
+         else if (probeConfigData[i].r == 1) //sphere  
          {
          {
-            contribution[i] = defineSphereSpaceInfluence(surface.P, probePosArray[i].xyz, probeConfigData[i].g)*atten;
+            contribution[i] = defineSphereSpaceInfluence(surface.P, probePosArray[i].xyz, probeConfigData[i].g, probeConfigData[i].b*atten); 
          }
          }
 
 
             if (contribution[i]>0.0)
             if (contribution[i]>0.0)