Merge pull request #1953 from aws-lumberyard-dev/Atom/dmcdiar/ATOM-15951
Suspend ray tracing for DiffuseProbeGrids that are not visible
This commit is contained in:
@@ -245,6 +245,23 @@ namespace AZ
|
||||
m_bakedClassificationImage.get();
|
||||
}
|
||||
|
||||
void DiffuseProbeGrid::ResetCullingVisibility()
|
||||
{
|
||||
m_cullable.m_isVisible = false;
|
||||
}
|
||||
|
||||
bool DiffuseProbeGrid::GetIsVisible() const
|
||||
{
|
||||
// we need to go through the DiffuseProbeGrid passes at least once in order to initialize
|
||||
// the RenderObjectSrg, which means we need to be visible until the RenderObjectSrg is created
|
||||
if (m_renderObjectSrg == nullptr)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return m_cullable.m_isVisible;
|
||||
}
|
||||
|
||||
uint32_t DiffuseProbeGrid::GetTotalProbeCount() const
|
||||
{
|
||||
return m_probeCountX * m_probeCountY * m_probeCountZ;
|
||||
|
||||
@@ -102,6 +102,9 @@ namespace AZ
|
||||
void DecrementRemainingRelocationIterations() { m_remainingRelocationIterations = AZStd::max(0, m_remainingRelocationIterations - 1); }
|
||||
void ResetRemainingRelocationIterations() { m_remainingRelocationIterations = DefaultNumRelocationIterations; }
|
||||
|
||||
void ResetCullingVisibility();
|
||||
bool GetIsVisible() const;
|
||||
|
||||
// compute total number of probes in the grid
|
||||
uint32_t GetTotalProbeCount() const;
|
||||
|
||||
|
||||
+4
-4
@@ -82,7 +82,7 @@ namespace AZ
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids().empty())
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids().empty())
|
||||
{
|
||||
// no diffuse probe grids
|
||||
return;
|
||||
@@ -106,7 +106,7 @@ namespace AZ
|
||||
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// probe raytrace image
|
||||
{
|
||||
@@ -145,7 +145,7 @@ namespace AZ
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// the diffuse probe grid Srg must be updated in the Compile phase in order to successfully bind the ReadWrite shader inputs
|
||||
// (see ValidateSetImageView() in ShaderResourceGroupData.cpp)
|
||||
@@ -162,7 +162,7 @@ namespace AZ
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
// submit the DispatchItem for each DiffuseProbeGrid
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
const RHI::ShaderResourceGroup* shaderResourceGroup = diffuseProbeGrid->GetBlendDistanceSrg()->GetRHIShaderResourceGroup();
|
||||
commandList->SetShaderResourceGroupForDispatch(*shaderResourceGroup);
|
||||
|
||||
+4
-4
@@ -82,7 +82,7 @@ namespace AZ
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids().empty())
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids().empty())
|
||||
{
|
||||
// no diffuse probe grids
|
||||
return;
|
||||
@@ -106,7 +106,7 @@ namespace AZ
|
||||
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// probe raytrace image
|
||||
{
|
||||
@@ -145,7 +145,7 @@ namespace AZ
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// the diffuse probe grid Srg must be updated in the Compile phase in order to successfully bind the ReadWrite shader inputs
|
||||
// (see ValidateSetImageView() in ShaderResourceGroupData.cpp)
|
||||
@@ -162,7 +162,7 @@ namespace AZ
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
// submit the DispatchItem for each DiffuseProbeGrid
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
const RHI::ShaderResourceGroup* shaderResourceGroup = diffuseProbeGrid->GetBlendIrradianceSrg()->GetRHIShaderResourceGroup();
|
||||
commandList->SetShaderResourceGroupForDispatch(*shaderResourceGroup);
|
||||
|
||||
+4
-4
@@ -95,7 +95,7 @@ namespace AZ
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids().empty())
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids().empty())
|
||||
{
|
||||
// no diffuse probe grids
|
||||
return;
|
||||
@@ -119,7 +119,7 @@ namespace AZ
|
||||
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// probe irradiance image
|
||||
{
|
||||
@@ -148,7 +148,7 @@ namespace AZ
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// the diffuse probe grid Srg must be updated in the Compile phase in order to successfully bind the ReadWrite shader inputs
|
||||
// (see line ValidateSetImageView() in ShaderResourceGroupData.cpp)
|
||||
@@ -168,7 +168,7 @@ namespace AZ
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
// submit the DispatchItems for each DiffuseProbeGrid
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
uint32_t probeCountX;
|
||||
uint32_t probeCountY;
|
||||
|
||||
+5
-4
@@ -86,7 +86,7 @@ namespace AZ
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids().empty())
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids().empty())
|
||||
{
|
||||
// no diffuse probe grids
|
||||
return;
|
||||
@@ -110,7 +110,7 @@ namespace AZ
|
||||
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// probe raytrace image
|
||||
{
|
||||
@@ -138,11 +138,12 @@ namespace AZ
|
||||
{
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// the diffuse probe grid Srg must be updated in the Compile phase in order to successfully bind the ReadWrite shader inputs
|
||||
// (see ValidateSetImageView() in ShaderResourceGroupData.cpp)
|
||||
diffuseProbeGrid->UpdateClassificationSrg(m_srgAsset);
|
||||
|
||||
diffuseProbeGrid->GetClassificationSrg()->Compile();
|
||||
}
|
||||
}
|
||||
@@ -154,7 +155,7 @@ namespace AZ
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
// submit the DispatchItems for each DiffuseProbeGrid
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
const RHI::ShaderResourceGroup* shaderResourceGroup = diffuseProbeGrid->GetClassificationSrg()->GetRHIShaderResourceGroup();
|
||||
commandList->SetShaderResourceGroupForDispatch(*shaderResourceGroup);
|
||||
|
||||
+32
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+8
@@ -76,6 +76,9 @@ namespace AZ
|
||||
// retrieve the side list of probe grids that are using real-time (raytraced) mode
|
||||
DiffuseProbeGridVector& GetRealTimeProbeGrids() { return m_realTimeDiffuseProbeGrids; }
|
||||
|
||||
// retrieve the side list of probe grids that are using real-time (raytraced) mode and visible (on screen)
|
||||
DiffuseProbeGridVector& GetVisibleRealTimeProbeGrids() { return m_visibleRealTimeDiffuseProbeGrids; }
|
||||
|
||||
private:
|
||||
AZ_DISABLE_COPY_MOVE(DiffuseProbeGridFeatureProcessor);
|
||||
|
||||
@@ -96,6 +99,8 @@ namespace AZ
|
||||
void HandleAssetNotification(Data::Asset<Data::AssetData> asset, DiffuseProbeGridTextureNotificationType notificationType);
|
||||
|
||||
// RPI::SceneNotificationBus::Handler overrides
|
||||
void OnBeginPrepareRender() override;
|
||||
void OnEndPrepareRender() override;
|
||||
void OnRenderPipelinePassesChanged(RPI::RenderPipeline* renderPipeline) override;
|
||||
void OnRenderPipelineAdded(RPI::RenderPipelinePtr pipeline) override;
|
||||
void OnRenderPipelineRemoved(RPI::RenderPipeline* pipeline) override;
|
||||
@@ -110,6 +115,9 @@ namespace AZ
|
||||
// side list of diffuse probe grids that are in real-time mode (subset of m_diffuseProbeGrids)
|
||||
DiffuseProbeGridVector m_realTimeDiffuseProbeGrids;
|
||||
|
||||
// side list of diffuse probe grids that are in real-time mode and visible (subset of m_realTimeDiffuseProbeGrids)
|
||||
DiffuseProbeGridVector m_visibleRealTimeDiffuseProbeGrids;
|
||||
|
||||
// position structure for the box vertices
|
||||
struct Position
|
||||
{
|
||||
|
||||
+5
-5
@@ -131,7 +131,7 @@ namespace AZ
|
||||
}
|
||||
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids().empty())
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids().empty())
|
||||
{
|
||||
// no diffuse probe grids
|
||||
return;
|
||||
@@ -148,9 +148,9 @@ namespace AZ
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
RayTracingFeatureProcessor* rayTracingFeatureProcessor = scene->GetFeatureProcessor<RayTracingFeatureProcessor>();
|
||||
|
||||
frameGraph.SetEstimatedItemCount(aznumeric_cast<uint32_t>(diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids().size()));
|
||||
frameGraph.SetEstimatedItemCount(aznumeric_cast<uint32_t>(diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids().size()));
|
||||
|
||||
for (const auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (const auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// TLAS
|
||||
{
|
||||
@@ -255,7 +255,7 @@ namespace AZ
|
||||
rayTracingFeatureProcessor->GetMeshInfoBuffer() &&
|
||||
rayTracingFeatureProcessor->GetSubMeshCount())
|
||||
{
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// the diffuse probe grid Srg must be updated in the Compile phase in order to successfully bind the ReadWrite shader
|
||||
// inputs (see line ValidateSetImageView() in ShaderResourceGroupData.cpp)
|
||||
@@ -303,7 +303,7 @@ namespace AZ
|
||||
m_rayTracingShaderTable)
|
||||
{
|
||||
// submit the DispatchRaysItem for each DiffuseProbeGrid
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
const RHI::ShaderResourceGroup* shaderResourceGroups[] = {
|
||||
diffuseProbeGrid->GetRayTraceSrg()->GetRHIShaderResourceGroup(),
|
||||
|
||||
+5
-5
@@ -86,7 +86,7 @@ namespace AZ
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids().empty())
|
||||
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids().empty())
|
||||
{
|
||||
// no diffuse probe grids
|
||||
return;
|
||||
@@ -103,7 +103,7 @@ namespace AZ
|
||||
|
||||
// create the Relocation Srgs for each DiffuseProbeGrid, and check to see if any grids need relocation
|
||||
bool needRelocation = false;
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
uint32_t rayTracingDataRevision = rayTracingFeatureProcessor->GetRevision();
|
||||
if (rayTracingDataRevision != m_rayTracingDataRevision)
|
||||
@@ -134,7 +134,7 @@ namespace AZ
|
||||
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// probe raytrace image
|
||||
{
|
||||
@@ -162,7 +162,7 @@ namespace AZ
|
||||
{
|
||||
RPI::Scene* scene = m_pipeline->GetScene();
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
// the diffuse probe grid Srg must be updated in the Compile phase in order to successfully bind the ReadWrite shader inputs
|
||||
// (see ValidateSetImageView() in ShaderResourceGroupData.cpp)
|
||||
@@ -182,7 +182,7 @@ namespace AZ
|
||||
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
|
||||
|
||||
// submit the DispatchItems for each DiffuseProbeGrid
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetRealTimeProbeGrids())
|
||||
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetVisibleRealTimeProbeGrids())
|
||||
{
|
||||
const RHI::ShaderResourceGroup* shaderResourceGroup = diffuseProbeGrid->GetRelocationSrg()->GetRHIShaderResourceGroup();
|
||||
commandList->SetShaderResourceGroupForDispatch(*shaderResourceGroup);
|
||||
|
||||
+11
-1
@@ -94,7 +94,12 @@ namespace AZ
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (!diffuseProbeGrid->GetIsVisible())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// probe irradiance image
|
||||
{
|
||||
if (diffuseProbeGrid->GetMode() == DiffuseProbeGridMode::Baked)
|
||||
@@ -182,6 +187,11 @@ namespace AZ
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!diffuseProbeGrid->GetIsVisible())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// the diffuse probe grid Srg must be updated in the Compile phase in order to successfully bind the ReadWrite shader inputs
|
||||
// (see ValidateSetImageView() of ShaderResourceGroupData.cpp)
|
||||
diffuseProbeGrid->UpdateRenderObjectSrg();
|
||||
|
||||
@@ -91,6 +91,10 @@ namespace AZ
|
||||
};
|
||||
LodData m_lodData;
|
||||
|
||||
//! Flag indicating if the object is visible in any view, meaning it passed the culling tests in the previous frame.
|
||||
//! This flag must be manually cleared by the Cullable object every frame.
|
||||
bool m_isVisible = false;
|
||||
|
||||
//! Flag indicating if the object is hidden, i.e., was specifically marked as
|
||||
//! something that shouldn't be rendered, regardless of its actual position relative to the camera
|
||||
bool m_isHidden = false;
|
||||
|
||||
@@ -339,6 +339,7 @@ namespace AZ
|
||||
{
|
||||
numDrawPackets += AddLodDataToView(c->m_cullData.m_boundingSphere.GetCenter(), c->m_lodData, *m_jobData->m_view);
|
||||
++numVisibleCullables;
|
||||
c->m_isVisible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -374,6 +375,7 @@ namespace AZ
|
||||
{
|
||||
numDrawPackets += AddLodDataToView(c->m_cullData.m_boundingSphere.GetCenter(), c->m_lodData, *m_jobData->m_view);
|
||||
++numVisibleCullables;
|
||||
c->m_isVisible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user