mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-03-01 11:33:48 +00:00
correct for mip weighting
This commit is contained in:
parent
36c906a72d
commit
958e0d5127
2 changed files with 25 additions and 20 deletions
|
|
@ -29,12 +29,14 @@ uniform int mipCount0;
|
|||
|
||||
float4 main(PFXVertToPix IN) : TORQUE_TARGET0
|
||||
{
|
||||
float4 downSample = float4(0, 0, 0, 0);
|
||||
float x = oneOverTargetSize.x;
|
||||
float y = oneOverTargetSize.y;
|
||||
float4 downSample = float4(0, 0, 0, 0);
|
||||
float4 finalOut = float4(0, 0, 0, 0);
|
||||
|
||||
for (int mipId = 0; mipId<mipCount0; mipId++)
|
||||
{
|
||||
float mipWeight = float(mipId)/float(mipCount0);
|
||||
float x = oneOverTargetSize.x*pow(0.5, mipId);
|
||||
float y = oneOverTargetSize.y*pow(0.5, mipId);
|
||||
float3 a = TORQUE_TEX2DLOD(inputTex, float4(IN.uv0.x - 2 * x, IN.uv0.y + 2*y, 0, mipId)).rgb;
|
||||
float3 b = TORQUE_TEX2DLOD(inputTex, float4(IN.uv0.x , IN.uv0.y + 2*y, 0, mipId)).rgb;
|
||||
float3 c = TORQUE_TEX2DLOD(inputTex, float4(IN.uv0.x + 2 * x, IN.uv0.y + 2*y, 0, mipId)).rgb;
|
||||
|
|
@ -71,13 +73,14 @@ float4 main(PFXVertToPix IN) : TORQUE_TARGET0
|
|||
break;
|
||||
|
||||
default:
|
||||
downSample.rgb = e*0.125;
|
||||
downSample.rgb += (a+c+g+i)*0.03125;
|
||||
downSample.rgb += (b+d+f+h)*0.0625;
|
||||
downSample.rgb += (j+k+l+m)*0.125;
|
||||
downSample.rgb = e*mipWeight;
|
||||
downSample.rgb += (a+c+g+i)*mipWeight*0.125;
|
||||
downSample.rgb += (b+d+f+h)*mipWeight*0.25;
|
||||
downSample.rgb += (j+k+l+m)*mipWeight*0.5;
|
||||
downSample.a = 1.0;
|
||||
break;
|
||||
}
|
||||
finalOut += downSample*(1.0-mipWeight);
|
||||
}
|
||||
return downSample;
|
||||
return float4(finalOut.rgb,1);
|
||||
}
|
||||
|
|
@ -33,20 +33,20 @@ float4 main(PFXVertToPix IN) : TORQUE_TARGET0
|
|||
float4 finalOut = float4(0, 0, 0, 0);
|
||||
for (int mipId = 0; mipId<mipCount0; mipId++)
|
||||
{
|
||||
float x = filterRadius*oneOverTargetSize.x;
|
||||
float y = filterRadius*oneOverTargetSize.y;
|
||||
float x = filterRadius*oneOverTargetSize.x*pow(0.5, mipId);
|
||||
float y = filterRadius*oneOverTargetSize.y*pow(0.5, mipId);
|
||||
|
||||
float3 a = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv1.x - x, IN.uv1.y + y, 0, mipId)).rgb;
|
||||
float3 b = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv1.x, IN.uv1.y + y, 0, mipId)).rgb;
|
||||
float3 c = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv1.x + x, IN.uv1.y + y, 0, mipId)).rgb;
|
||||
float3 a = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv0.x - x, IN.uv0.y + y, 0, mipId)).rgb;
|
||||
float3 b = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv0.x, IN.uv0.y + y, 0, mipId)).rgb;
|
||||
float3 c = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv0.x + x, IN.uv0.y + y, 0, mipId)).rgb;
|
||||
|
||||
float3 d = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv1.x - x, IN.uv1.y, 0, mipId)).rgb;
|
||||
float3 e = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv1.x, IN.uv1.y, 0, mipId)).rgb;
|
||||
float3 f = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv1.x + x, IN.uv1.y, 0, mipId)).rgb;
|
||||
float3 d = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv0.x - x, IN.uv0.y, 0, mipId)).rgb;
|
||||
float3 e = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv0.x, IN.uv0.y, 0, mipId)).rgb;
|
||||
float3 f = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv0.x + x, IN.uv0.y, 0, mipId)).rgb;
|
||||
|
||||
float3 g = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv1.x - x, IN.uv1.y - y, 0, mipId)).rgb;
|
||||
float3 h = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv1.x, IN.uv1.y - y, 0, mipId)).rgb;
|
||||
float3 i = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv1.x + x, IN.uv1.y - y, 0, mipId)).rgb;
|
||||
float3 g = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv0.x - x, IN.uv0.y - y, 0, mipId)).rgb;
|
||||
float3 h = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv0.x, IN.uv0.y - y, 0, mipId)).rgb;
|
||||
float3 i = TORQUE_TEX2DLOD(hdrbloomDown, float4(IN.uv0.x + x, IN.uv0.y - y, 0, mipId)).rgb;
|
||||
|
||||
upSample.rgb = e*4.0;
|
||||
upSample.rgb += (b+d+f+h)*2.0;
|
||||
|
|
@ -55,6 +55,8 @@ float4 main(PFXVertToPix IN) : TORQUE_TARGET0
|
|||
upSample.a = 1.0;
|
||||
finalOut += upSample;
|
||||
}
|
||||
finalOut /= mipCount0;
|
||||
finalOut.a = 1.0;
|
||||
return float4(finalOut.r,0,0,1);
|
||||
|
||||
return float4(finalOut.rgb,1);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue