Define gaussian splat chunk data contract
This commit is contained in:
@@ -163,16 +163,36 @@ SampleArtifactData BuildSampleArtifactData() {
|
||||
sh[1].coefficients[index] = -0.02f * static_cast<float>(index + 1u);
|
||||
}
|
||||
|
||||
const GaussianSplatChunkRecord chunks[1] = {
|
||||
{
|
||||
0x00010002u,
|
||||
0x00030004u,
|
||||
0x00050006u,
|
||||
0x00070008u,
|
||||
Vector2(-1.0f, 2.0f),
|
||||
Vector2(-3.0f, 4.0f),
|
||||
Vector2(-5.0f, 6.0f),
|
||||
0x0009000Au,
|
||||
0x000B000Cu,
|
||||
0x000D000Eu,
|
||||
0x000F0010u,
|
||||
0x00110012u,
|
||||
0x00130014u
|
||||
}
|
||||
};
|
||||
|
||||
SampleArtifactData sample;
|
||||
sample.metadata.contentVersion = 3u;
|
||||
sample.metadata.splatCount = 2u;
|
||||
sample.metadata.chunkCount = 1u;
|
||||
sample.metadata.bounds.SetMinMax(Vector3(-2.0f, -1.0f, -3.0f), Vector3(5.0f, 4.0f, 6.0f));
|
||||
sample.metadata.positionFormat = GaussianSplatSectionFormat::VectorFloat32;
|
||||
sample.metadata.otherFormat = GaussianSplatSectionFormat::OtherFloat32;
|
||||
sample.metadata.colorFormat = GaussianSplatSectionFormat::ColorRGBA32F;
|
||||
sample.metadata.shFormat = GaussianSplatSectionFormat::SHFloat32;
|
||||
sample.metadata.chunkFormat = GaussianSplatSectionFormat::ChunkFloat32;
|
||||
|
||||
sample.sections.Reserve(4u);
|
||||
sample.sections.Reserve(5u);
|
||||
size_t payloadOffset = 0u;
|
||||
auto appendSection = [&](GaussianSplatSectionType type,
|
||||
GaussianSplatSectionFormat format,
|
||||
@@ -223,6 +243,13 @@ SampleArtifactData BuildSampleArtifactData() {
|
||||
sizeof(sh),
|
||||
2u,
|
||||
sizeof(GaussianSplatSHRecord));
|
||||
appendSection(
|
||||
GaussianSplatSectionType::Chunks,
|
||||
GaussianSplatSectionFormat::ChunkFloat32,
|
||||
chunks,
|
||||
sizeof(chunks),
|
||||
1u,
|
||||
sizeof(GaussianSplatChunkRecord));
|
||||
|
||||
return sample;
|
||||
}
|
||||
@@ -317,13 +344,18 @@ TEST(GaussianSplatLoader, WritesAndLoadsArtifact) {
|
||||
ASSERT_NE(gaussianSplat, nullptr);
|
||||
EXPECT_EQ(gaussianSplat->GetContentVersion(), 3u);
|
||||
EXPECT_EQ(gaussianSplat->GetSplatCount(), 2u);
|
||||
EXPECT_EQ(gaussianSplat->GetChunkCount(), 1u);
|
||||
EXPECT_EQ(gaussianSplat->GetBounds().GetMin(), Vector3(-2.0f, -1.0f, -3.0f));
|
||||
EXPECT_EQ(gaussianSplat->GetBounds().GetMax(), Vector3(5.0f, 4.0f, 6.0f));
|
||||
ASSERT_EQ(gaussianSplat->GetSections().Size(), 4u);
|
||||
ASSERT_EQ(gaussianSplat->GetSections().Size(), 5u);
|
||||
const GaussianSplatSection* shSection = gaussianSplat->FindSection(GaussianSplatSectionType::SH);
|
||||
ASSERT_NE(shSection, nullptr);
|
||||
EXPECT_EQ(shSection->elementCount, 2u);
|
||||
EXPECT_EQ(shSection->elementStride, sizeof(GaussianSplatSHRecord));
|
||||
const GaussianSplatSection* chunkSection = gaussianSplat->FindSection(GaussianSplatSectionType::Chunks);
|
||||
ASSERT_NE(chunkSection, nullptr);
|
||||
EXPECT_EQ(chunkSection->elementCount, 1u);
|
||||
EXPECT_EQ(chunkSection->elementStride, sizeof(GaussianSplatChunkRecord));
|
||||
ASSERT_NE(gaussianSplat->GetColorRecords(), nullptr);
|
||||
EXPECT_EQ(gaussianSplat->GetColorRecords()[1].colorOpacity, Vector4(0.0f, 1.0f, 0.0f, 0.75f));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user