Adding AABB to meshlets

This commit is contained in:
Dynamitos
2023-12-11 14:45:37 +01:00
parent eceb0f6bcc
commit 3feb331927
17 changed files with 63 additions and 51 deletions
+9 -9
View File
@@ -29,16 +29,16 @@ void taskMain(
localToClip = mul(pViewParams.projectionMatrix, mul(pViewParams.viewMatrix, instance.transformMatrix));
// Left
viewFrustum.sides[0].n = float3(1, 0, 0);
viewFrustum.sides[0].d = -1;
viewFrustum.sides[0].d = -0.8;
// Right
viewFrustum.sides[1].n = float3(-1, 0, 0);
viewFrustum.sides[1].d = 1;
viewFrustum.sides[1].d = 0.8;
// Top
viewFrustum.sides[2].n = float3(0, -1, 0);
viewFrustum.sides[2].d = 1;
viewFrustum.sides[2].d = 0.8;
// Bottom
viewFrustum.sides[1].n = float3(0, 1, 0);
viewFrustum.sides[1].d = -1;
viewFrustum.sides[1].d = -0.8;
// Base
viewFrustum.basePlane.n = float3(0, 0, 1);
viewFrustum.basePlane.d = 0;
@@ -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);
@@ -75,13 +75,13 @@ struct PrimitiveAttributes
void meshMain(
in uint threadID: SV_GroupIndex,
in uint groupID: SV_GroupID,
//in payload MeshPayload meshPayload,
in payload MeshPayload meshPayload,
out Vertices<FragmentParameter, MAX_VERTICES> vertices,
out Indices<uint3, MAX_PRIMITIVES> indices
){
InstanceData inst = pScene.instances[0];//meshPayload.instanceId[groupID]];
MeshData md = pScene.meshData[0];//meshPayload.instanceId[groupID]];
MeshletDescription m = pScene.meshletInfos[0];//meshPayload.meshletId[groupID]];
InstanceData inst = pScene.instances[meshPayload.instanceId[groupID]];
MeshData md = pScene.meshData[meshPayload.instanceId[groupID]];
MeshletDescription m = pScene.meshletInfos[meshPayload.meshletId[groupID]];
SetMeshOutputCounts(m.vertexCount, m.primitiveCount);
uint p = min(threadID, m.primitiveCount - 1);
+2
View File
@@ -3,7 +3,9 @@ import Common;
struct AABB
{
float3 min;
float pad0;
float3 max;
float3 pad1;
bool insideFrustum(float4x4 transform, Frustum frustum)
{
float3 corners[8];
+1 -1
View File
@@ -30,7 +30,7 @@ struct PointLight : ILightEnv
float3 lightDir_TS = mul(params.tbn, lightDir_WS);
float d = length(lightDir_TS);
float illuminance = max(1 - d / colorRange.w, 0);
return brdf.evaluate(params.tbn, params.viewDir_TS, normalize(lightDir_TS), colorRange.xyz);
return illuminance * brdf.evaluate(params.tbn, params.viewDir_TS, normalize(lightDir_TS), colorRange.xyz);
}
bool insidePlane(Plane plane)
+1
View File
@@ -11,6 +11,7 @@ struct MeshletDescription
struct MeshData
{
AABB boundingBox;
uint numMeshlets;
uint meshletOffset;
uint firstIndex;