Suspended ray tracing for DiffuseProbeGrids that are not visible, either off-screen or behind an occlusion culling plane

Added a culling flag that indicates if the cullable object is currently visible in any view

Signed-off-by: dmcdiar <dmcdiar@amazon.com>
This commit is contained in:
dmcdiar
2021-07-08 00:24:52 -07:00
parent e8cc6a86ed
commit 762b3ee582
13 changed files with 104 additions and 27 deletions
@@ -175,6 +175,27 @@ namespace AZ
}
}
void DiffuseProbeGridFeatureProcessor::OnBeginPrepareRender()
{
for (auto& diffuseProbeGrid : m_realTimeDiffuseProbeGrids)
{
diffuseProbeGrid->ResetCullingVisibility();
}
}
void DiffuseProbeGridFeatureProcessor::OnEndPrepareRender()
{
// re-build the list of visible real-time diffuse probe grids
m_visibleRealTimeDiffuseProbeGrids.clear();
for (auto& diffuseProbeGrid : m_realTimeDiffuseProbeGrids)
{
if (diffuseProbeGrid->GetIsVisible())
{
m_visibleRealTimeDiffuseProbeGrids.push_back(diffuseProbeGrid);
}
}
}
DiffuseProbeGridHandle DiffuseProbeGridFeatureProcessor::AddProbeGrid(const AZ::Transform& transform, const AZ::Vector3& extents, const AZ::Vector3& probeSpacing)
{
AZStd::shared_ptr<DiffuseProbeGrid> diffuseProbeGrid = AZStd::make_shared<DiffuseProbeGrid>();
@@ -215,6 +236,17 @@ namespace AZ
m_realTimeDiffuseProbeGrids.erase(itEntry);
}
// remove from side list of visible real-time grids
itEntry = AZStd::find_if(m_visibleRealTimeDiffuseProbeGrids.begin(), m_visibleRealTimeDiffuseProbeGrids.end(), [&](AZStd::shared_ptr<DiffuseProbeGrid> const& entry)
{
return (entry == probeGrid);
});
if (itEntry != m_visibleRealTimeDiffuseProbeGrids.end())
{
m_visibleRealTimeDiffuseProbeGrids.erase(itEntry);
}
probeGrid = nullptr;
}