mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Corrected box influence logic for probes to accommodate rotations.
Also uncommented line so probe transform is passed along to the render manager.
This commit is contained in:
parent
aad37bc0f5
commit
ef81708e12
|
|
@ -470,7 +470,7 @@ void ReflectionProbe::updateProbeParams()
|
|||
|
||||
mProbeInfo->mProbeShapeType = mProbeShapeType;
|
||||
|
||||
//mProbeInfo->mTransform = getWorldTransform();
|
||||
mProbeInfo->mTransform = getWorldTransform();
|
||||
mProbeInfo->setPosition(getPosition());
|
||||
|
||||
//Point3F pos = mProbeInfo->mTransform.getPosition();
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue