Added DiffuseProbeGrid Visualization passes, shaders, and editor controls.
Changed the DiffuseGI passes to override IsEnabled() instead of exiting early from FrameBeginInternal. Signed-off-by: dmcdiarmid-ly <63674186+dmcdiarmid-ly@users.noreply.github.com>
This commit is contained in:
+1
@@ -20,5 +20,6 @@ namespace AZ
|
||||
static constexpr float DefaultDiffuseProbeGridViewBias = 0.2f;
|
||||
static constexpr float DefaultDiffuseProbeGridNormalBias = 0.1f;
|
||||
static constexpr DiffuseProbeGridNumRaysPerProbe DefaultDiffuseProbeGridNumRaysPerProbe = DiffuseProbeGridNumRaysPerProbe::NumRaysPerProbe_288;
|
||||
static constexpr float DefaultVisualizationSphereRadius = 0.5f;
|
||||
} // namespace Render
|
||||
} // namespace AZ
|
||||
|
||||
+40
-1
@@ -34,7 +34,7 @@ namespace AZ
|
||||
if (auto* serializeContext = azrtti_cast<SerializeContext*>(context))
|
||||
{
|
||||
serializeContext->Class<DiffuseProbeGridComponentConfig>()
|
||||
->Version(2) // Added NumRaysPerProbe setting
|
||||
->Version(3) // Added probe visualization
|
||||
->Field("ProbeSpacing", &DiffuseProbeGridComponentConfig::m_probeSpacing)
|
||||
->Field("Extents", &DiffuseProbeGridComponentConfig::m_extents)
|
||||
->Field("AmbientMultiplier", &DiffuseProbeGridComponentConfig::m_ambientMultiplier)
|
||||
@@ -49,6 +49,9 @@ namespace AZ
|
||||
->Field("BakedIrradianceTextureAsset", &DiffuseProbeGridComponentConfig::m_bakedIrradianceTextureAsset)
|
||||
->Field("BakedDistanceTextureAsset", &DiffuseProbeGridComponentConfig::m_bakedDistanceTextureAsset)
|
||||
->Field("BakedProbeDataTextureAsset", &DiffuseProbeGridComponentConfig::m_bakedProbeDataTextureAsset)
|
||||
->Field("VisualizationEnabled", &DiffuseProbeGridComponentConfig::m_visualizationEnabled)
|
||||
->Field("VisualizationShowInactiveProbes", &DiffuseProbeGridComponentConfig::m_visualizationShowInactiveProbes)
|
||||
->Field("VisualizationSphereRadius", &DiffuseProbeGridComponentConfig::m_visualizationSphereRadius)
|
||||
;
|
||||
}
|
||||
}
|
||||
@@ -140,6 +143,9 @@ namespace AZ
|
||||
m_featureProcessor->SetViewBias(m_handle, m_configuration.m_viewBias);
|
||||
m_featureProcessor->SetNormalBias(m_handle, m_configuration.m_normalBias);
|
||||
m_featureProcessor->SetNumRaysPerProbe(m_handle, m_configuration.m_numRaysPerProbe);
|
||||
m_featureProcessor->SetVisualizationEnabled(m_handle, m_configuration.m_visualizationEnabled);
|
||||
m_featureProcessor->SetVisualizationShowInactiveProbes(m_handle, m_configuration.m_visualizationShowInactiveProbes);
|
||||
m_featureProcessor->SetVisualizationSphereRadius(m_handle, m_configuration.m_visualizationSphereRadius);
|
||||
|
||||
// load the baked texture assets, but only if they are all valid
|
||||
if (m_configuration.m_bakedIrradianceTextureAsset.GetId().IsValid() &&
|
||||
@@ -356,6 +362,39 @@ namespace AZ
|
||||
m_configuration.m_runtimeMode = runtimeMode;
|
||||
}
|
||||
|
||||
void DiffuseProbeGridComponentController::SetVisualizationEnabled(bool visualizationEnabled)
|
||||
{
|
||||
if (!m_featureProcessor)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_configuration.m_visualizationEnabled = visualizationEnabled;
|
||||
m_featureProcessor->SetVisualizationEnabled(m_handle, m_configuration.m_visualizationEnabled);
|
||||
}
|
||||
|
||||
void DiffuseProbeGridComponentController::SetVisualizationShowInactiveProbes(bool visualizationShowInactiveProbes)
|
||||
{
|
||||
if (!m_featureProcessor)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_configuration.m_visualizationShowInactiveProbes = visualizationShowInactiveProbes;
|
||||
m_featureProcessor->SetVisualizationShowInactiveProbes(m_handle, m_configuration.m_visualizationShowInactiveProbes);
|
||||
}
|
||||
|
||||
void DiffuseProbeGridComponentController::SetVisualizationSphereRadius(float visualizationSphereRadius)
|
||||
{
|
||||
if (!m_featureProcessor)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_configuration.m_visualizationSphereRadius = visualizationSphereRadius;
|
||||
m_featureProcessor->SetVisualizationSphereRadius(m_handle, m_configuration.m_visualizationSphereRadius);
|
||||
}
|
||||
|
||||
void DiffuseProbeGridComponentController::BakeTextures(DiffuseProbeGridBakeTexturesCallback callback)
|
||||
{
|
||||
if (!m_featureProcessor)
|
||||
|
||||
+7
@@ -48,6 +48,10 @@ namespace AZ
|
||||
Data::Asset<RPI::StreamingImageAsset> m_bakedDistanceTextureAsset;
|
||||
Data::Asset<RPI::StreamingImageAsset> m_bakedProbeDataTextureAsset;
|
||||
|
||||
bool m_visualizationEnabled = false;
|
||||
bool m_visualizationShowInactiveProbes = false;
|
||||
float m_visualizationSphereRadius = DefaultVisualizationSphereRadius;
|
||||
|
||||
AZ::u64 m_entityId{ EntityId::InvalidEntityId };
|
||||
};
|
||||
|
||||
@@ -102,6 +106,9 @@ namespace AZ
|
||||
void SetNumRaysPerProbe(const DiffuseProbeGridNumRaysPerProbe& numRaysPerProbe);
|
||||
void SetEditorMode(DiffuseProbeGridMode editorMode);
|
||||
void SetRuntimeMode(DiffuseProbeGridMode runtimeMode);
|
||||
void SetVisualizationEnabled(bool visualizationEnabled);
|
||||
void SetVisualizationShowInactiveProbes(bool visualizationShowInactiveProbes);
|
||||
void SetVisualizationSphereRadius(float visualizationSphereRadius);
|
||||
|
||||
// Bake the diffuse probe grid textures to assets
|
||||
void BakeTextures(DiffuseProbeGridBakeTexturesCallback callback);
|
||||
|
||||
+35
-2
@@ -43,6 +43,9 @@ namespace AZ
|
||||
->Field("numRaysPerProbe", &EditorDiffuseProbeGridComponent::m_numRaysPerProbe)
|
||||
->Field("editorMode", &EditorDiffuseProbeGridComponent::m_editorMode)
|
||||
->Field("runtimeMode", &EditorDiffuseProbeGridComponent::m_runtimeMode)
|
||||
->Field("showVisualization", &EditorDiffuseProbeGridComponent::m_showVisualization)
|
||||
->Field("showInactiveProbes", &EditorDiffuseProbeGridComponent::m_showInactiveProbes)
|
||||
->Field("visualizationSphereRadius", &EditorDiffuseProbeGridComponent::m_visualizationSphereRadius)
|
||||
;
|
||||
|
||||
if (AZ::EditContext* editContext = serializeContext->GetEditContext())
|
||||
@@ -94,10 +97,22 @@ namespace AZ
|
||||
->Attribute(Edit::Attributes::Step, 0.1f)
|
||||
->Attribute(Edit::Attributes::Min, 0.0f)
|
||||
->Attribute(Edit::Attributes::Max, 1.0f)
|
||||
->DataElement(AZ::Edit::UIHandlers::ComboBox, &EditorDiffuseProbeGridComponent::m_numRaysPerProbe, "Number of Rays Per Probe", "Number of rays cast by each probe to detect lighting in its surroundings")
|
||||
->DataElement(AZ::Edit::UIHandlers::ComboBox, &EditorDiffuseProbeGridComponent::m_numRaysPerProbe, "Number of Rays Per Probe", "Number of rays cast by each probe to detect lighting in its surroundings")
|
||||
->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorDiffuseProbeGridComponent::OnNumRaysPerProbeChanged)
|
||||
->Attribute(AZ::Edit::Attributes::EnumValues, &EditorDiffuseProbeGridComponent::GetNumRaysPerProbeEnumList)
|
||||
->ClassElement(AZ::Edit::ClassElements::EditorData, "Grid mode")
|
||||
->ClassElement(AZ::Edit::ClassElements::Group, "Visualization")
|
||||
->Attribute(AZ::Edit::Attributes::AutoExpand, true)
|
||||
->DataElement(AZ::Edit::UIHandlers::CheckBox, &EditorDiffuseProbeGridComponent::m_showVisualization, "Show Visualization", "Show the probe grid visualization")
|
||||
->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorDiffuseProbeGridComponent::OnShowVisualizationChanged)
|
||||
->DataElement(AZ::Edit::UIHandlers::CheckBox, &EditorDiffuseProbeGridComponent::m_showInactiveProbes, "Show Inactive Probes", "Show inactive probes in the probe grid visualization")
|
||||
->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorDiffuseProbeGridComponent::OnShowInactiveProbesChanged)
|
||||
->DataElement(AZ::Edit::UIHandlers::Slider, &EditorDiffuseProbeGridComponent::m_visualizationSphereRadius, "Visualization Sphere Radius", "Radius of the spheres in the probe grid visualization")
|
||||
->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorDiffuseProbeGridComponent::OnVisualizationSphereRadiusChanged)
|
||||
->Attribute(Edit::Attributes::Decimals, 2)
|
||||
->Attribute(Edit::Attributes::Step, 0.25f)
|
||||
->Attribute(Edit::Attributes::Min, 0.25f)
|
||||
->Attribute(Edit::Attributes::Max, 2.0f)
|
||||
->ClassElement(AZ::Edit::ClassElements::Group, "Grid mode")
|
||||
->Attribute(AZ::Edit::Attributes::AutoExpand, true)
|
||||
->DataElement(Edit::UIHandlers::ComboBox, &EditorDiffuseProbeGridComponent::m_editorMode, "Editor Mode", "Controls whether the editor uses RealTime or Baked diffuse GI. RealTime requires a ray-tracing capable GPU. Auto-Select will fallback to Baked if ray-tracing is not available")
|
||||
->Attribute(AZ::Edit::Attributes::ChangeValidate, &EditorDiffuseProbeGridComponent::OnModeChangeValidate)
|
||||
@@ -350,6 +365,24 @@ namespace AZ
|
||||
return AZ::Edit::PropertyRefreshLevels::None;
|
||||
}
|
||||
|
||||
AZ::u32 EditorDiffuseProbeGridComponent::OnShowVisualizationChanged()
|
||||
{
|
||||
m_controller.SetVisualizationEnabled(m_showVisualization);
|
||||
return AZ::Edit::PropertyRefreshLevels::None;
|
||||
}
|
||||
|
||||
AZ::u32 EditorDiffuseProbeGridComponent::OnShowInactiveProbesChanged()
|
||||
{
|
||||
m_controller.SetVisualizationShowInactiveProbes(m_showInactiveProbes);
|
||||
return AZ::Edit::PropertyRefreshLevels::None;
|
||||
}
|
||||
|
||||
AZ::u32 EditorDiffuseProbeGridComponent::OnVisualizationSphereRadiusChanged()
|
||||
{
|
||||
m_controller.SetVisualizationSphereRadius(m_visualizationSphereRadius);
|
||||
return AZ::Edit::PropertyRefreshLevels::None;
|
||||
}
|
||||
|
||||
AZ::Outcome<void, AZStd::string> EditorDiffuseProbeGridComponent::OnModeChangeValidate([[maybe_unused]] void* newValue, [[maybe_unused]] const AZ::Uuid& valueType)
|
||||
{
|
||||
DiffuseProbeGridMode newMode = (*(reinterpret_cast<DiffuseProbeGridMode*>(newValue)));
|
||||
|
||||
+6
@@ -69,6 +69,9 @@ namespace AZ
|
||||
AZ::u32 OnNumRaysPerProbeChanged();
|
||||
AZ::u32 OnEditorModeChanged();
|
||||
AZ::u32 OnRuntimeModeChanged();
|
||||
AZ::u32 OnShowVisualizationChanged();
|
||||
AZ::u32 OnShowInactiveProbesChanged();
|
||||
AZ::u32 OnVisualizationSphereRadiusChanged();
|
||||
AZ::Outcome<void, AZStd::string> OnModeChangeValidate(void* newValue, const AZ::Uuid& valueType);
|
||||
|
||||
// Button handler
|
||||
@@ -85,6 +88,9 @@ namespace AZ
|
||||
DiffuseProbeGridNumRaysPerProbe m_numRaysPerProbe = DefaultDiffuseProbeGridNumRaysPerProbe;
|
||||
DiffuseProbeGridMode m_editorMode = DiffuseProbeGridMode::RealTime;
|
||||
DiffuseProbeGridMode m_runtimeMode = DiffuseProbeGridMode::RealTime;
|
||||
bool m_showVisualization = false;
|
||||
bool m_showInactiveProbes = false;
|
||||
float m_visualizationSphereRadius = DefaultVisualizationSphereRadius;
|
||||
|
||||
// flags
|
||||
bool m_editorModeSet = false;
|
||||
|
||||
Reference in New Issue
Block a user