More light culling fixes

This commit is contained in:
Dynamitos
2024-02-02 09:42:47 +01:00
parent 18d22aeb4f
commit 829c4937c0
4 changed files with 18 additions and 10 deletions
+1 -1
View File
@@ -99,7 +99,7 @@ void cullLights(ComputeShaderInput in)
{
PointLight light = pLightEnv.pointLights[i];
//TODO: why doesn't this check go through?
if(light.insideFrustum(groupFrustum, nearClipVS, maxDepthVS))
if(light.insideFrustum(groupFrustum, nearClipVS))
{
tAppendLight(i);
if(!light.insidePlane(minPlane))
+1 -1
View File
@@ -51,7 +51,7 @@ void taskMain(
{
uint m = mesh.meshletOffset + i;
MeshletDescription meshlet = pScene.meshletInfos[m];
//if(meshlet.boundingBox.insideFrustum(localToClip, viewFrustum))
if(meshlet.boundingBox.insideFrustum(localToClip, viewFrustum))
{
uint index;
InterlockedAdd(head, 1, index);
+2 -2
View File
@@ -39,13 +39,13 @@ struct Frustum
Plane basePlane;
bool pointInside(float3 point)
{
if (basePlane.pointInside(point))
if (!basePlane.pointInside(point))
{
return false;
}
for(int p = 0; p < 4; ++p)
{
if(sides[p].pointInside(point))
if(!sides[p].pointInside(point))
{
return false;
}
+14 -6
View File
@@ -33,21 +33,29 @@ struct PointLight : ILightEnv
return illuminance * brdf.evaluate(params.tbn, params.viewDir_TS, normalize(lightDir_TS), colorRange.xyz);
}
bool insidePlane(Plane plane, float3 position_CS)
bool insidePlane(Plane plane, float3 center_CS)
{
float3 position_CS = center_CS + plane.n * colorRange.w;
return plane.pointInside(position_CS);
}
bool insideFrustum(Frustum frustum)
bool insideFrustum(Frustum frustum, float nearClipVS, float maxDepthVS)
{
bool result = true;
float4 clipPos = mul(pViewParams.projectionMatrix, mul(pViewParams.viewMatrix, position_WS));
float3 position_CS = clipPos.xyz / clipPos.w;
float3 center_CS = clipPos.xyz / clipPos.w;
if(insidePlane(frustum.basePlane, center_CS))
{
return true;
}
uint result = 0;
for(int i = 0; i < 4; ++i)
{
if(insidePlane(frustum.sides[i], center_CS))
{
result++;
}
return result;
}
return result > 0;
}
};