Bind gaussian splat chunk metadata in prepare pass

This commit is contained in:
2026-04-11 13:55:39 +08:00
parent ff4e3f639a
commit 88a71a5426
7 changed files with 148 additions and 15 deletions

View File

@@ -20,6 +20,25 @@ Shader "Builtin Gaussian Splat Utilities"
float coefficients[45];
};
struct GaussianSplatChunkData
{
uint colR;
uint colG;
uint colB;
uint colA;
float2 posX;
float2 posY;
float2 posZ;
uint sclX;
uint sclY;
uint sclZ;
uint shR;
uint shG;
uint shB;
};
static const uint GAUSSIAN_SPLAT_CHUNK_SIZE = 256u;
static const float SH_C1 = 0.4886025;
static const float SH_C2[] = { 1.0925484, -1.0925484, 0.3153916, -1.0925484, 0.5462742 };
static const float SH_C3[] = { -0.5900436, 2.8906114, -0.4570458, 0.3731763, -0.4570458, 1.4453057, -0.5900436 };
@@ -211,6 +230,7 @@ Shader "Builtin Gaussian Splat Utilities"
StructuredBuffer<GaussianSplatOtherData> GaussianSplatOther;
StructuredBuffer<float4> GaussianSplatColor;
StructuredBuffer<GaussianSplatSHData> GaussianSplatSH;
StructuredBuffer<GaussianSplatChunkData> GaussianSplatChunks;
RWStructuredBuffer<uint> GaussianSplatSortDistances;
RWStructuredBuffer<uint> GaussianSplatOrderBuffer;
RWStructuredBuffer<GaussianSplatViewData> GaussianSplatViewDataBuffer;
@@ -240,7 +260,16 @@ Shader "Builtin Gaussian Splat Utilities"
const GaussianSplatOtherData otherData = GaussianSplatOther[index];
const float4 colorOpacity = GaussianSplatColor[index];
const GaussianSplatSHData shData = GaussianSplatSH[index];
const GaussianSplatChunkData chunkData = GaussianSplatChunks[index / GAUSSIAN_SPLAT_CHUNK_SIZE];
const uint shOrder = min((uint)gSplatParams.z, 3u);
if (chunkData.posX.x > chunkData.posX.y ||
chunkData.posY.x > chunkData.posY.y ||
chunkData.posZ.x > chunkData.posZ.y)
{
GaussianSplatSortDistances[index] = 0xffffffffu;
GaussianSplatViewDataBuffer[index] = viewData;
return;
}
const float3 worldCenter = mul(gModelMatrix, float4(localCenter, 1.0)).xyz;
const float3 viewCenter = mul(gViewMatrix, float4(worldCenter, 1.0)).xyz;