Formalize GaussianSplat scene extraction

This commit is contained in:
2026-04-10 21:49:53 +08:00
parent 1119af2e38
commit b187c8970b
14 changed files with 991 additions and 1 deletions

View File

@@ -119,6 +119,12 @@ bool CompareVisibleVolumes(const VisibleVolumeItem& lhs, const VisibleVolumeItem
return CompareVisibleVolumesStable(lhs, rhs);
}
bool CompareVisibleGaussianSplats(
const VisibleGaussianSplatItem& lhs,
const VisibleGaussianSplatItem& rhs) {
return CompareVisibleGaussianSplatsStable(lhs, rhs);
}
} // namespace
RenderSceneData RenderSceneExtractor::Extract(
@@ -143,6 +149,7 @@ RenderSceneData RenderSceneExtractor::Extract(
cameraPosition,
cullingMask,
sceneData.visibleItems,
sceneData.visibleGaussianSplats,
sceneData.visibleVolumes);
}
@@ -150,6 +157,10 @@ RenderSceneData RenderSceneExtractor::Extract(
sceneData.visibleItems.begin(),
sceneData.visibleItems.end(),
CompareVisibleItems);
std::stable_sort(
sceneData.visibleGaussianSplats.begin(),
sceneData.visibleGaussianSplats.end(),
CompareVisibleGaussianSplats);
std::stable_sort(
sceneData.visibleVolumes.begin(),
sceneData.visibleVolumes.end(),
@@ -181,6 +192,7 @@ RenderSceneData RenderSceneExtractor::ExtractForCamera(
cameraPosition,
cullingMask,
sceneData.visibleItems,
sceneData.visibleGaussianSplats,
sceneData.visibleVolumes);
}
@@ -188,6 +200,10 @@ RenderSceneData RenderSceneExtractor::ExtractForCamera(
sceneData.visibleItems.begin(),
sceneData.visibleItems.end(),
CompareVisibleItems);
std::stable_sort(
sceneData.visibleGaussianSplats.begin(),
sceneData.visibleGaussianSplats.end(),
CompareVisibleGaussianSplats);
std::stable_sort(
sceneData.visibleVolumes.begin(),
sceneData.visibleVolumes.end(),
@@ -308,6 +324,7 @@ void RenderSceneExtractor::ExtractVisibleContent(
const Math::Vector3& cameraPosition,
uint32_t cullingMask,
std::vector<VisibleRenderItem>& visibleItems,
std::vector<VisibleGaussianSplatItem>& visibleGaussianSplats,
std::vector<VisibleVolumeItem>& visibleVolumes) const {
if (gameObject == nullptr || !gameObject->IsActiveInHierarchy()) {
return;
@@ -318,11 +335,12 @@ void RenderSceneExtractor::ExtractVisibleContent(
if (isVisibleInCameraMask) {
AppendRenderItemsForGameObject(*gameObject, cameraPosition, visibleItems);
AppendVisibleGaussianSplatsForGameObject(*gameObject, cameraPosition, visibleGaussianSplats);
AppendVisibleVolumesForGameObject(*gameObject, cameraPosition, visibleVolumes);
}
for (Components::GameObject* child : gameObject->GetChildren()) {
ExtractVisibleContent(child, cameraPosition, cullingMask, visibleItems, visibleVolumes);
ExtractVisibleContent(child, cameraPosition, cullingMask, visibleItems, visibleGaussianSplats, visibleVolumes);
}
}