diff --git a/Engine/source/T3D/lighting/reflectionProbe.cpp b/Engine/source/T3D/lighting/reflectionProbe.cpp index 787453890..a748f0776 100644 --- a/Engine/source/T3D/lighting/reflectionProbe.cpp +++ b/Engine/source/T3D/lighting/reflectionProbe.cpp @@ -470,7 +470,7 @@ void ReflectionProbe::updateProbeParams() mProbeInfo->mProbeShapeType = mProbeShapeType; - //mProbeInfo->mTransform = getWorldTransform(); + mProbeInfo->mTransform = getWorldTransform(); mProbeInfo->setPosition(getPosition()); //Point3F pos = mProbeInfo->mTransform.getPosition(); diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/reflectionProbeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/reflectionProbeP.glsl index 7ad77ecae..3df23a747 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/reflectionProbeP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/reflectionProbeP.glsl @@ -117,20 +117,22 @@ float defineSphereSpaceInfluence(vec3 centroidPosVS, float rad, vec2 atten, vec3 return saturate( nDotL * attn ); } -float defineBoxSpaceInfluence(vec3 surfPosWS, vec3 probePos, float rad, vec2 atten) //atten currently unused +float defineBoxSpaceInfluence(vec3 surfPosWS, vec3 probePos, float radius, float atten) { vec3 surfPosLS = mul( worldToObj, vec4(surfPosWS,1.0)).xyz; - vec3 lsBoxMin = mul(worldToObj, vec4(boxMin,1)).xyz; - vec3 lsBoxMax = mul(worldToObj, vec4(boxMax,1)).xyz; + vec3 boxMinLS = probePos-(vec3(1,1,1)*radius); + vec3 boxMaxLS = probePos+(vec3(1,1,1)*radius); float boxOuterRange = length(lsBoxMax - lsBoxMin); - float boxInnerRange = boxOuterRange / 3.5; + float boxInnerRange = boxOuterRange / atten; vec3 localDir = vec3(abs(surfPosLS.x), abs(surfPosLS.y), abs(surfPosLS.z)); localDir = (localDir - boxInnerRange) / (boxOuterRange - boxInnerRange); - return max(localDir.x, max(localDir.y, localDir.z)); + float influenceVal = max(localDir.x, max(localDir.y, localDir.z)) * -1; + + return influenceVal; } float defineDepthInfluence(vec3 probePosWS, vec3 surfPosWS, samplerCube radianceCube) @@ -190,18 +192,8 @@ void main() } else { - if(worldPos.x > bbMax.x || worldPos.y > bbMax.y || worldPos.z > bbMax.z || - worldPos.x < bbMin.x || worldPos.y < bbMin.y || worldPos.z < bbMin.z) - { - OUT_col = vec4(0.0); - OUT_col1 = vec4(0.0); - return; - } - - blendVal = defineBoxSpaceInfluence(worldPos, probeWSPos, bbMin, bbMax, attenuation); - - //flip it around - blendVal *= -1; + float tempAttenVal = 3.5; + blendVal = defineBoxSpaceInfluence(worldPos, probeWSPos, radius, tempAttenVal); } if (blendVal<0) { diff --git a/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeP.hlsl index eecc71500..9e4a2e611 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeP.hlsl @@ -125,20 +125,22 @@ float defineSphereSpaceInfluence(float3 centroidPosVS, float rad, float2 atten, return saturate( nDotL * attn ); } -float defineBoxSpaceInfluence(float3 surfPosWS, float3 probePos, float3 boxMin, float3 boxMax, float2 atten) +float defineBoxSpaceInfluence(float3 surfPosWS, float3 probePos, float radius, float atten) { float3 surfPosLS = mul( worldToObj, float4(surfPosWS,1.0)).xyz; - float3 lsBoxMin = mul(worldToObj, float4(boxMin,1)).xyz; - float3 lsBoxMax = mul(worldToObj, float4(boxMax,1)).xyz; + float3 boxMinLS = probePos-(float3(1,1,1)*radius); + float3 boxMaxLS = probePos+(float3(1,1,1)*radius); - float boxOuterRange = length(lsBoxMax - lsBoxMin); - float boxInnerRange = boxOuterRange / 3.5; + float boxOuterRange = length(boxMaxLS - boxMinLS); + float boxInnerRange = boxOuterRange / atten; float3 localDir = float3(abs(surfPosLS.x), abs(surfPosLS.y), abs(surfPosLS.z)); localDir = (localDir - boxInnerRange) / (boxOuterRange - boxInnerRange); - return max(localDir.x, max(localDir.y, localDir.z)); + float influenceVal = max(localDir.x, max(localDir.y, localDir.z)) * -1; + + return influenceVal; } float defineDepthInfluence(float3 probePosWS, float3 surfPosWS, TORQUE_SAMPLERCUBE(radianceCube)) @@ -192,15 +194,8 @@ PS_OUTPUT main( ConvexConnectP IN ) } else { - if(worldPos.x > bbMax.x || worldPos.y > bbMax.y || worldPos.z > bbMax.z || - worldPos.x < bbMin.x || worldPos.y < bbMin.y || worldPos.z < bbMin.z) - clip(-1); - - blendVal = defineBoxSpaceInfluence(worldPos, probeWSPos, bbMin, bbMax, attenuation); - - //flip it around - blendVal *= -1; - //blendVal = defineBoxSpaceInfluence(worldPos, probeWSPos, radius*2, attenuation); + float tempAttenVal = 3.5; + blendVal = defineBoxSpaceInfluence(worldPos, probeWSPos, radius, tempAttenVal); } clip(blendVal);