Material Component: Can set material property overrides on default materials
No longer need to assign material overrides to set/edit properties in UI or script Material component will load and use the default material for a slot if no override is assigned Signed-off-by: Guthrie Adams <guthadam@amazon.com>
This commit is contained in:
@@ -69,9 +69,9 @@ namespace AZ
|
||||
}
|
||||
|
||||
MaterialAssignment::MaterialAssignment(const AZ::Data::AssetId& materialAssetId)
|
||||
: m_materialInstance()
|
||||
: m_materialAsset(materialAssetId, AZ::AzTypeInfo<AZ::RPI::MaterialAsset>::Uuid())
|
||||
, m_materialInstance()
|
||||
{
|
||||
m_materialAsset.Create(materialAssetId);
|
||||
}
|
||||
|
||||
MaterialAssignment::MaterialAssignment(const Data::Asset<RPI::MaterialAsset>& asset)
|
||||
@@ -88,14 +88,50 @@ namespace AZ
|
||||
|
||||
void MaterialAssignment::RebuildInstance()
|
||||
{
|
||||
if (m_materialAsset.IsReady())
|
||||
if (m_materialInstancePreCreated)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_materialAsset.GetId().IsValid())
|
||||
{
|
||||
if (m_materialAsset.IsReady())
|
||||
{
|
||||
m_materialInstance =
|
||||
m_propertyOverrides.empty() ? RPI::Material::FindOrCreate(m_materialAsset) : RPI::Material::Create(m_materialAsset);
|
||||
AZ_Error("MaterialAssignment", m_materialInstance, "Material instance not initialized");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_defaultMaterialAsset.IsReady())
|
||||
{
|
||||
m_materialInstance =
|
||||
m_propertyOverrides.empty() ? RPI::Material::FindOrCreate(m_materialAsset) : RPI::Material::Create(m_materialAsset);
|
||||
m_propertyOverrides.empty() ? RPI::Material::FindOrCreate(m_defaultMaterialAsset) : RPI::Material::Create(m_defaultMaterialAsset);
|
||||
AZ_Error("MaterialAssignment", m_materialInstance, "Material instance not initialized");
|
||||
}
|
||||
}
|
||||
|
||||
void MaterialAssignment::Release()
|
||||
{
|
||||
if (!m_materialInstancePreCreated)
|
||||
{
|
||||
m_materialInstance = nullptr;
|
||||
}
|
||||
m_materialAsset.Release();
|
||||
m_defaultMaterialAsset.Release();
|
||||
}
|
||||
|
||||
bool MaterialAssignment::RequiresLoading() const
|
||||
{
|
||||
return
|
||||
!m_materialInstancePreCreated &&
|
||||
!m_materialAsset.IsReady() &&
|
||||
!m_materialAsset.IsLoading() &&
|
||||
!m_defaultMaterialAsset.IsReady() &&
|
||||
!m_defaultMaterialAsset.IsLoading();
|
||||
}
|
||||
|
||||
AZStd::string MaterialAssignment::ToString() const
|
||||
{
|
||||
AZStd::string assetPathString;
|
||||
|
||||
Reference in New Issue
Block a user