correct for mip weighting

This commit is contained in:
AzaezelX 2025-08-04 18:16:13 -05:00
parent 36c906a72d
commit 958e0d5127
2 changed files with 25 additions and 20 deletions

View file

@ -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);
}

View file

@ -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);
}