Switched to a single merged ProbeData texture instead of separate textures for Relocation and Classification.
Switched to HDR irradiance. SDK Update. Fixed a Vulkan validation error on RayTracingSceneSrg::MeshInfo. Improvements to DiffuseProbeGrid blending. Signed-off-by: dmcdiarmid-ly <63674186+dmcdiarmid-ly@users.noreply.github.com>
This commit is contained in:
+15
-30
@@ -34,7 +34,7 @@ namespace AZ
|
||||
if (auto* serializeContext = azrtti_cast<SerializeContext*>(context))
|
||||
{
|
||||
serializeContext->Class<DiffuseProbeGridComponentConfig>()
|
||||
->Version(0)
|
||||
->Version(1)
|
||||
->Field("ProbeSpacing", &DiffuseProbeGridComponentConfig::m_probeSpacing)
|
||||
->Field("Extents", &DiffuseProbeGridComponentConfig::m_extents)
|
||||
->Field("AmbientMultiplier", &DiffuseProbeGridComponentConfig::m_ambientMultiplier)
|
||||
@@ -44,12 +44,10 @@ namespace AZ
|
||||
->Field("RuntimeMode", &DiffuseProbeGridComponentConfig::m_runtimeMode)
|
||||
->Field("BakedIrradianceTextureRelativePath", &DiffuseProbeGridComponentConfig::m_bakedIrradianceTextureRelativePath)
|
||||
->Field("BakedDistanceTextureRelativePath", &DiffuseProbeGridComponentConfig::m_bakedDistanceTextureRelativePath)
|
||||
->Field("BakedRelocationTextureRelativePath", &DiffuseProbeGridComponentConfig::m_bakedRelocationTextureRelativePath)
|
||||
->Field("BakedClassificationTextureRelativePath", &DiffuseProbeGridComponentConfig::m_bakedClassificationTextureRelativePath)
|
||||
->Field("BakedProbeDataTextureRelativePath", &DiffuseProbeGridComponentConfig::m_bakedProbeDataTextureRelativePath)
|
||||
->Field("BakedIrradianceTextureAsset", &DiffuseProbeGridComponentConfig::m_bakedIrradianceTextureAsset)
|
||||
->Field("BakedDistanceTextureAsset", &DiffuseProbeGridComponentConfig::m_bakedDistanceTextureAsset)
|
||||
->Field("BakedRelocationTextureAsset", &DiffuseProbeGridComponentConfig::m_bakedRelocationTextureAsset)
|
||||
->Field("BakedClassificationTextureAsset", &DiffuseProbeGridComponentConfig::m_bakedClassificationTextureAsset)
|
||||
->Field("BakedProbeDataTextureAsset", &DiffuseProbeGridComponentConfig::m_bakedProbeDataTextureAsset)
|
||||
;
|
||||
}
|
||||
}
|
||||
@@ -121,19 +119,16 @@ namespace AZ
|
||||
if (m_featureProcessor->AreBakedTexturesReferenced(
|
||||
m_configuration.m_bakedIrradianceTextureRelativePath,
|
||||
m_configuration.m_bakedDistanceTextureRelativePath,
|
||||
m_configuration.m_bakedRelocationTextureRelativePath,
|
||||
m_configuration.m_bakedClassificationTextureRelativePath))
|
||||
m_configuration.m_bakedProbeDataTextureRelativePath))
|
||||
{
|
||||
// clear the baked texture paths and assets, since they belong to the original entity (not the clone)
|
||||
m_configuration.m_bakedIrradianceTextureRelativePath.clear();
|
||||
m_configuration.m_bakedDistanceTextureRelativePath.clear();
|
||||
m_configuration.m_bakedRelocationTextureRelativePath.clear();
|
||||
m_configuration.m_bakedClassificationTextureRelativePath.clear();
|
||||
m_configuration.m_bakedProbeDataTextureRelativePath.clear();
|
||||
|
||||
m_configuration.m_bakedIrradianceTextureAsset.Reset();
|
||||
m_configuration.m_bakedDistanceTextureAsset.Reset();
|
||||
m_configuration.m_bakedRelocationTextureAsset.Reset();
|
||||
m_configuration.m_bakedClassificationTextureAsset.Reset();
|
||||
m_configuration.m_bakedProbeDataTextureAsset.Reset();
|
||||
}
|
||||
|
||||
// add this diffuse probe grid to the feature processor
|
||||
@@ -147,25 +142,22 @@ namespace AZ
|
||||
// load the baked texture assets, but only if they are all valid
|
||||
if (m_configuration.m_bakedIrradianceTextureAsset.GetId().IsValid() &&
|
||||
m_configuration.m_bakedDistanceTextureAsset.GetId().IsValid() &&
|
||||
m_configuration.m_bakedRelocationTextureAsset.GetId().IsValid() &&
|
||||
m_configuration.m_bakedClassificationTextureAsset.GetId().IsValid())
|
||||
m_configuration.m_bakedProbeDataTextureAsset.GetId().IsValid())
|
||||
{
|
||||
Data::AssetBus::MultiHandler::BusConnect(m_configuration.m_bakedIrradianceTextureAsset.GetId());
|
||||
Data::AssetBus::MultiHandler::BusConnect(m_configuration.m_bakedDistanceTextureAsset.GetId());
|
||||
Data::AssetBus::MultiHandler::BusConnect(m_configuration.m_bakedRelocationTextureAsset.GetId());
|
||||
Data::AssetBus::MultiHandler::BusConnect(m_configuration.m_bakedClassificationTextureAsset.GetId());
|
||||
Data::AssetBus::MultiHandler::BusConnect(m_configuration.m_bakedProbeDataTextureAsset.GetId());
|
||||
|
||||
m_configuration.m_bakedIrradianceTextureAsset.QueueLoad();
|
||||
m_configuration.m_bakedDistanceTextureAsset.QueueLoad();
|
||||
m_configuration.m_bakedRelocationTextureAsset.QueueLoad();
|
||||
m_configuration.m_bakedClassificationTextureAsset.QueueLoad();
|
||||
m_configuration.m_bakedProbeDataTextureAsset.QueueLoad();
|
||||
}
|
||||
else if (m_configuration.m_runtimeMode == DiffuseProbeGridMode::Baked ||
|
||||
m_configuration.m_runtimeMode == DiffuseProbeGridMode::AutoSelect ||
|
||||
m_configuration.m_editorMode == DiffuseProbeGridMode::Baked ||
|
||||
m_configuration.m_editorMode == DiffuseProbeGridMode::AutoSelect)
|
||||
{
|
||||
AZ_Error("DiffuseProbeGrid", false, "DiffuseProbeGrid mdoe is set to Baked or Auto-Select, but it does not have baked texture assets. Please re-bake this DiffuseProbeGrid.");
|
||||
AZ_Error("DiffuseProbeGrid", false, "DiffuseProbeGrid mode is set to Baked or Auto-Select, but it does not have baked texture assets. Please re-bake this DiffuseProbeGrid.");
|
||||
}
|
||||
|
||||
m_featureProcessor->SetMode(m_handle, m_configuration.m_runtimeMode);
|
||||
@@ -191,13 +183,11 @@ namespace AZ
|
||||
// if all assets are ready we can set the baked texture images
|
||||
if (m_configuration.m_bakedIrradianceTextureAsset.IsReady() &&
|
||||
m_configuration.m_bakedDistanceTextureAsset.IsReady() &&
|
||||
m_configuration.m_bakedRelocationTextureAsset.IsReady() &&
|
||||
m_configuration.m_bakedClassificationTextureAsset.IsReady())
|
||||
m_configuration.m_bakedProbeDataTextureAsset.IsReady())
|
||||
{
|
||||
Data::AssetBus::MultiHandler::BusDisconnect(m_configuration.m_bakedIrradianceTextureAsset.GetId());
|
||||
Data::AssetBus::MultiHandler::BusDisconnect(m_configuration.m_bakedDistanceTextureAsset.GetId());
|
||||
Data::AssetBus::MultiHandler::BusDisconnect(m_configuration.m_bakedRelocationTextureAsset.GetId());
|
||||
Data::AssetBus::MultiHandler::BusDisconnect(m_configuration.m_bakedClassificationTextureAsset.GetId());
|
||||
Data::AssetBus::MultiHandler::BusDisconnect(m_configuration.m_bakedProbeDataTextureAsset.GetId());
|
||||
|
||||
UpdateBakedTextures();
|
||||
}
|
||||
@@ -365,8 +355,7 @@ namespace AZ
|
||||
callback,
|
||||
m_configuration.m_bakedIrradianceTextureRelativePath,
|
||||
m_configuration.m_bakedDistanceTextureRelativePath,
|
||||
m_configuration.m_bakedRelocationTextureRelativePath,
|
||||
m_configuration.m_bakedClassificationTextureRelativePath);
|
||||
m_configuration.m_bakedProbeDataTextureRelativePath);
|
||||
}
|
||||
|
||||
void DiffuseProbeGridComponentController::UpdateBakedTextures()
|
||||
@@ -381,12 +370,8 @@ namespace AZ
|
||||
bakedTextures.m_irradianceImageRelativePath = m_configuration.m_bakedIrradianceTextureRelativePath;
|
||||
bakedTextures.m_distanceImage = RPI::StreamingImage::FindOrCreate(m_configuration.m_bakedDistanceTextureAsset);
|
||||
bakedTextures.m_distanceImageRelativePath = m_configuration.m_bakedDistanceTextureRelativePath;
|
||||
bakedTextures.m_relocationImageDescriptor = m_configuration.m_bakedRelocationTextureAsset->GetImageDescriptor();
|
||||
bakedTextures.m_relocationImageData = m_configuration.m_bakedRelocationTextureAsset->GetSubImageData(0, 0);
|
||||
bakedTextures.m_relocationImageRelativePath = m_configuration.m_bakedRelocationTextureRelativePath;
|
||||
bakedTextures.m_classificationImageDescriptor = m_configuration.m_bakedClassificationTextureAsset->GetImageDescriptor();
|
||||
bakedTextures.m_classificationImageData = m_configuration.m_bakedClassificationTextureAsset->GetSubImageData(0, 0);
|
||||
bakedTextures.m_classificationImageRelativePath = m_configuration.m_bakedClassificationTextureRelativePath;
|
||||
bakedTextures.m_probeDataImage = RPI::StreamingImage::FindOrCreate(m_configuration.m_bakedProbeDataTextureAsset);
|
||||
bakedTextures.m_probeDataImageRelativePath = m_configuration.m_bakedProbeDataTextureRelativePath;
|
||||
|
||||
m_featureProcessor->SetBakedTextures(m_handle, bakedTextures);
|
||||
}
|
||||
|
||||
+2
-4
@@ -41,13 +41,11 @@ namespace AZ
|
||||
|
||||
AZStd::string m_bakedIrradianceTextureRelativePath;
|
||||
AZStd::string m_bakedDistanceTextureRelativePath;
|
||||
AZStd::string m_bakedRelocationTextureRelativePath;
|
||||
AZStd::string m_bakedClassificationTextureRelativePath;
|
||||
AZStd::string m_bakedProbeDataTextureRelativePath;
|
||||
|
||||
Data::Asset<RPI::StreamingImageAsset> m_bakedIrradianceTextureAsset;
|
||||
Data::Asset<RPI::StreamingImageAsset> m_bakedDistanceTextureAsset;
|
||||
Data::Asset<RPI::StreamingImageAsset> m_bakedRelocationTextureAsset;
|
||||
Data::Asset<RPI::StreamingImageAsset> m_bakedClassificationTextureAsset;
|
||||
Data::Asset<RPI::StreamingImageAsset> m_bakedProbeDataTextureAsset;
|
||||
|
||||
AZ::u64 m_entityId{ EntityId::InvalidEntityId };
|
||||
};
|
||||
|
||||
+13
-29
@@ -182,8 +182,7 @@ namespace AZ
|
||||
|
||||
CheckTextureAssetNotification(configuration.m_bakedIrradianceTextureRelativePath, configuration.m_bakedIrradianceTextureAsset);
|
||||
CheckTextureAssetNotification(configuration.m_bakedDistanceTextureRelativePath, configuration.m_bakedDistanceTextureAsset);
|
||||
CheckTextureAssetNotification(configuration.m_bakedRelocationTextureRelativePath, configuration.m_bakedRelocationTextureAsset);
|
||||
CheckTextureAssetNotification(configuration.m_bakedClassificationTextureRelativePath, configuration.m_bakedClassificationTextureAsset);
|
||||
CheckTextureAssetNotification(configuration.m_bakedProbeDataTextureRelativePath, configuration.m_bakedProbeDataTextureAsset);
|
||||
}
|
||||
|
||||
void EditorDiffuseProbeGridComponent::CheckTextureAssetNotification(const AZStd::string& relativePath, Data::Asset<RPI::StreamingImageAsset>& configurationAsset)
|
||||
@@ -201,8 +200,7 @@ namespace AZ
|
||||
|
||||
if (m_controller.m_configuration.m_bakedIrradianceTextureAsset.IsReady() &&
|
||||
m_controller.m_configuration.m_bakedDistanceTextureAsset.IsReady() &&
|
||||
m_controller.m_configuration.m_bakedClassificationTextureAsset.IsReady() &&
|
||||
m_controller.m_configuration.m_bakedRelocationTextureAsset.IsReady())
|
||||
m_controller.m_configuration.m_bakedProbeDataTextureAsset.IsReady())
|
||||
{
|
||||
m_controller.UpdateBakedTextures();
|
||||
}
|
||||
@@ -337,8 +335,7 @@ namespace AZ
|
||||
{
|
||||
if (!m_controller.m_configuration.m_bakedIrradianceTextureAsset.GetId().IsValid() ||
|
||||
!m_controller.m_configuration.m_bakedDistanceTextureAsset.GetId().IsValid() ||
|
||||
!m_controller.m_configuration.m_bakedRelocationTextureAsset.GetId().IsValid() ||
|
||||
!m_controller.m_configuration.m_bakedClassificationTextureAsset.GetId().IsValid())
|
||||
!m_controller.m_configuration.m_bakedProbeDataTextureAsset.GetId().IsValid())
|
||||
{
|
||||
return AZ::Failure(AZStd::string("Please bake textures before changing the Diffuse Probe Grid to Baked or Auto-Select mode."));
|
||||
}
|
||||
@@ -385,8 +382,7 @@ namespace AZ
|
||||
// Note: we need to make sure to use the same source image for each bake
|
||||
AZStd::string irradianceTextureRelativePath = ValidateOrCreateNewTexturePath(configuration.m_bakedIrradianceTextureRelativePath, DiffuseProbeGridIrradianceFileName);
|
||||
AZStd::string distanceTextureRelativePath = ValidateOrCreateNewTexturePath(configuration.m_bakedDistanceTextureRelativePath, DiffuseProbeGridDistanceFileName);
|
||||
AZStd::string relocationTextureRelativePath = ValidateOrCreateNewTexturePath(configuration.m_bakedRelocationTextureRelativePath, DiffuseProbeGridRelocationFileName);
|
||||
AZStd::string classificationTextureRelativePath = ValidateOrCreateNewTexturePath(configuration.m_bakedClassificationTextureRelativePath, DiffuseProbeGridClassificationFileName);
|
||||
AZStd::string probeDataTextureRelativePath = ValidateOrCreateNewTexturePath(configuration.m_bakedProbeDataTextureRelativePath, DiffuseProbeGridProbeDataFileName);
|
||||
|
||||
// create the full paths
|
||||
char projectPath[AZ_MAX_PATH_LEN];
|
||||
@@ -396,10 +392,8 @@ namespace AZ
|
||||
AzFramework::StringFunc::Path::Join(projectPath, irradianceTextureRelativePath.c_str(), irradianceTextureFullPath, true, true);
|
||||
AZStd::string distanceTextureFullPath;
|
||||
AzFramework::StringFunc::Path::Join(projectPath, distanceTextureRelativePath.c_str(), distanceTextureFullPath, true, true);
|
||||
AZStd::string relocationTextureFullPath;
|
||||
AzFramework::StringFunc::Path::Join(projectPath, relocationTextureRelativePath.c_str(), relocationTextureFullPath, true, true);
|
||||
AZStd::string classificationTextureFullPath;
|
||||
AzFramework::StringFunc::Path::Join(projectPath, classificationTextureRelativePath.c_str(), classificationTextureFullPath, true, true);
|
||||
AZStd::string probeDataTextureFullPath;
|
||||
AzFramework::StringFunc::Path::Join(projectPath, probeDataTextureRelativePath.c_str(), probeDataTextureFullPath, true, true);
|
||||
|
||||
// make sure the folder is created
|
||||
AZStd::string diffuseProbeGridFolder;
|
||||
@@ -409,23 +403,20 @@ namespace AZ
|
||||
// check out the files in source control
|
||||
CheckoutSourceTextureFile(irradianceTextureFullPath);
|
||||
CheckoutSourceTextureFile(distanceTextureFullPath);
|
||||
CheckoutSourceTextureFile(relocationTextureFullPath);
|
||||
CheckoutSourceTextureFile(classificationTextureFullPath);
|
||||
CheckoutSourceTextureFile(probeDataTextureFullPath);
|
||||
|
||||
// update the configuration
|
||||
AzToolsFramework::ScopedUndoBatch undoBatch("DiffuseProbeGrid bake");
|
||||
configuration.m_bakedIrradianceTextureRelativePath = irradianceTextureRelativePath;
|
||||
configuration.m_bakedDistanceTextureRelativePath = distanceTextureRelativePath;
|
||||
configuration.m_bakedRelocationTextureRelativePath = relocationTextureRelativePath;
|
||||
configuration.m_bakedClassificationTextureRelativePath = classificationTextureRelativePath;
|
||||
configuration.m_bakedProbeDataTextureRelativePath = probeDataTextureRelativePath;
|
||||
SetDirty();
|
||||
|
||||
// callback for the texture readback
|
||||
DiffuseProbeGridBakeTexturesCallback bakeTexturesCallback = [=](
|
||||
DiffuseProbeGridTexture irradianceTexture,
|
||||
DiffuseProbeGridTexture distanceTexture,
|
||||
DiffuseProbeGridTexture relocationTexture,
|
||||
DiffuseProbeGridTexture classificationTexture)
|
||||
DiffuseProbeGridTexture probeDataTexture)
|
||||
{
|
||||
// irradiance
|
||||
{
|
||||
@@ -441,18 +432,11 @@ namespace AZ
|
||||
AZ_Assert(outcome.IsSuccess(), "Failed to write Distance texture .dds file [%s]", distanceTextureFullPath.c_str());
|
||||
}
|
||||
|
||||
// relocation
|
||||
// probe data
|
||||
{
|
||||
AZ::DdsFile::DdsFileData fileData = { relocationTexture.m_size, relocationTexture.m_format, relocationTexture.m_data.get() };
|
||||
[[maybe_unused]] const auto outcome = AZ::DdsFile::WriteFile(relocationTextureFullPath, fileData);
|
||||
AZ_Assert(outcome.IsSuccess(), "Failed to write Relocation texture .dds file [%s]", relocationTextureFullPath.c_str());
|
||||
}
|
||||
|
||||
// classification
|
||||
{
|
||||
AZ::DdsFile::DdsFileData fileData = { classificationTexture.m_size, classificationTexture.m_format, classificationTexture.m_data.get() };
|
||||
[[maybe_unused]] const auto outcome = AZ::DdsFile::WriteFile(classificationTextureFullPath, fileData);
|
||||
AZ_Assert(outcome.IsSuccess(), "Failed to write Classification texture .dds file [%s]", classificationTextureFullPath.c_str());
|
||||
AZ::DdsFile::DdsFileData fileData = { probeDataTexture.m_size, probeDataTexture.m_format, probeDataTexture.m_data.get() };
|
||||
[[maybe_unused]] const auto outcome = AZ::DdsFile::WriteFile(probeDataTextureFullPath, fileData);
|
||||
AZ_Assert(outcome.IsSuccess(), "Failed to write ProbeData texture .dds file [%s]", probeDataTextureFullPath.c_str());
|
||||
}
|
||||
|
||||
m_bakeInProgress = false;
|
||||
|
||||
Reference in New Issue
Block a user