{LYN2076} Add Material data types Behavior for the scene graph (#3605)
* {LYN2076} Add Material data types Behavior for the scene graph
Adding behavior to expose GraphData MaterialData to Python scripts so that scripters can read in the material properties from a scene graph
Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com>
* new warning fixed in code
Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com>
This commit is contained in:
@@ -230,6 +230,19 @@ namespace AZ
|
||||
return m_uniqueId;
|
||||
}
|
||||
|
||||
namespace Helper
|
||||
{
|
||||
template <typename T>
|
||||
T ReturnOptionalValue(AZStd::optional<T> value)
|
||||
{
|
||||
if (!value)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
return value.value();
|
||||
}
|
||||
}
|
||||
|
||||
void MaterialData::Reflect(ReflectContext* context)
|
||||
{
|
||||
SerializeContext* serializeContext = azrtti_cast<SerializeContext*>(context);
|
||||
@@ -285,6 +298,76 @@ namespace AZ
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &MaterialData::m_useAOMap, "Use Ambient Occlusion Map", "True to use an ambient occlusion map, false to ignore it.");
|
||||
}
|
||||
}
|
||||
|
||||
BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
|
||||
if (behaviorContext)
|
||||
{
|
||||
behaviorContext->Class<SceneAPI::DataTypes::IMaterialData>()
|
||||
->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All)
|
||||
->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
|
||||
->Attribute(AZ::Script::Attributes::Module, "scene");
|
||||
|
||||
using namespace Helper;
|
||||
using DataTypes::IMaterialData;
|
||||
|
||||
behaviorContext->Class<MaterialData>()
|
||||
->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
|
||||
->Attribute(AZ::Script::Attributes::Module, "scene")
|
||||
->Constant("AmbientOcclusion", BehaviorConstant(TextureMapType::AmbientOcclusion))
|
||||
->Constant("BaseColor", BehaviorConstant(TextureMapType::BaseColor))
|
||||
->Constant("Bump", BehaviorConstant(TextureMapType::Bump))
|
||||
->Constant("Diffuse", BehaviorConstant(TextureMapType::Diffuse))
|
||||
->Constant("Emissive", BehaviorConstant(TextureMapType::Emissive))
|
||||
->Constant("Metallic", BehaviorConstant(TextureMapType::Metallic))
|
||||
->Constant("Normal", BehaviorConstant(TextureMapType::Normal))
|
||||
->Constant("Roughness", BehaviorConstant(TextureMapType::Roughness))
|
||||
->Constant("Specular", BehaviorConstant(TextureMapType::Specular))
|
||||
->Method("GetTexture", &MaterialData::GetTexture)
|
||||
->Method("GetMaterialName", &MaterialData::GetMaterialName)
|
||||
->Method("IsNoDraw", &MaterialData::IsNoDraw)
|
||||
->Method("GetDiffuseColor", &MaterialData::GetDiffuseColor)
|
||||
->Method("GetSpecularColor", &MaterialData::GetSpecularColor)
|
||||
->Method("GetEmissiveColor", &MaterialData::GetEmissiveColor)
|
||||
->Method("GetOpacity", &MaterialData::GetOpacity)
|
||||
->Method("GetUniqueId", &MaterialData::GetUniqueId)
|
||||
->Method("GetShininess", &MaterialData::GetShininess)
|
||||
->Method("GetUseColorMap", [](const MaterialData& self)
|
||||
{
|
||||
return ReturnOptionalValue(self.GetUseColorMap());
|
||||
})
|
||||
->Method("GetBaseColor", [](const MaterialData& self)
|
||||
{
|
||||
return ReturnOptionalValue(self.GetBaseColor());
|
||||
})
|
||||
->Method("GetUseMetallicMap", [](const MaterialData& self)
|
||||
{
|
||||
return ReturnOptionalValue(self.GetUseMetallicMap());
|
||||
})
|
||||
->Method("GetMetallicFactor", [](const MaterialData& self)
|
||||
{
|
||||
return ReturnOptionalValue(self.GetMetallicFactor());
|
||||
})
|
||||
->Method("GetUseRoughnessMap", [](const MaterialData& self)
|
||||
{
|
||||
return ReturnOptionalValue(self.GetUseRoughnessMap());
|
||||
})
|
||||
->Method("GetRoughnessFactor", [](const MaterialData& self)
|
||||
{
|
||||
return ReturnOptionalValue(self.GetRoughnessFactor());
|
||||
})
|
||||
->Method("GetUseEmissiveMap", [](const MaterialData& self)
|
||||
{
|
||||
return ReturnOptionalValue(self.GetUseEmissiveMap());
|
||||
})
|
||||
->Method("GetEmissiveIntensity", [](const MaterialData& self)
|
||||
{
|
||||
return ReturnOptionalValue(self.GetEmissiveIntensity());
|
||||
})
|
||||
->Method("GetUseAOMap", [](const MaterialData& self)
|
||||
{
|
||||
return ReturnOptionalValue(self.GetUseAOMap());
|
||||
});
|
||||
}
|
||||
}
|
||||
} // namespace GraphData
|
||||
} // namespace SceneData
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <AzCore/Serialization/Json/RegistrationContext.h>
|
||||
#include <AzCore/std/smart_ptr/make_shared.h>
|
||||
#include <AzCore/std/smart_ptr/shared_ptr.h>
|
||||
#include <AzCore/std/optional.h>
|
||||
#include <AzCore/UnitTest/TestTypes.h>
|
||||
#include <AzTest/AzTest.h>
|
||||
|
||||
@@ -27,6 +28,7 @@
|
||||
#include <SceneAPI/SceneData/GraphData/MeshVertexUVData.h>
|
||||
#include <SceneAPI/SceneData/GraphData/AnimationData.h>
|
||||
#include <SceneAPI/SceneData/GraphData/BlendShapeData.h>
|
||||
#include <SceneAPI/SceneData/GraphData/MaterialData.h>
|
||||
|
||||
namespace AZ
|
||||
{
|
||||
@@ -145,6 +147,38 @@ namespace AZ
|
||||
blendShapeData->SetVertexIndexToControlPointIndexMap(2, 0);
|
||||
return true;
|
||||
}
|
||||
else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MaterialData>())
|
||||
{
|
||||
auto* materialDataData = AZStd::any_cast<AZ::SceneData::GraphData::MaterialData>(&data);
|
||||
materialDataData->SetBaseColor(AZStd::make_optional(AZ::Vector3(0.1, 0.2, 0.3)));
|
||||
materialDataData->SetDiffuseColor({ 0.3, 0.4, 0.5 });
|
||||
materialDataData->SetEmissiveColor({ 0.4, 0.5, 0.6 });
|
||||
materialDataData->SetEmissiveIntensity(AZStd::make_optional(0.789f));
|
||||
materialDataData->SetMaterialName("TestMaterialName");
|
||||
materialDataData->SetMetallicFactor(AZStd::make_optional(0.123f));
|
||||
materialDataData->SetNoDraw(true);
|
||||
materialDataData->SetOpacity(0.7);
|
||||
materialDataData->SetRoughnessFactor(AZStd::make_optional(0.456f));
|
||||
materialDataData->SetShininess(1.23);
|
||||
materialDataData->SetSpecularColor({ 0.8, 0.9, 1.0 });
|
||||
materialDataData->SetUseAOMap(AZStd::make_optional(true));
|
||||
materialDataData->SetUseColorMap(AZStd::make_optional(true));
|
||||
materialDataData->SetUseMetallicMap(AZStd::make_optional(true));
|
||||
materialDataData->SetUseRoughnessMap(AZStd::make_optional(true));
|
||||
materialDataData->SetUseEmissiveMap(AZStd::make_optional(true));
|
||||
materialDataData->SetUniqueId(102938);
|
||||
materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::AmbientOcclusion, "ambientocclusion");
|
||||
materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::BaseColor, "basecolor");
|
||||
materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Bump, "bump");
|
||||
materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Diffuse, "diffuse");
|
||||
materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Emissive, "emissive");
|
||||
materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Metallic, "metallic");
|
||||
materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Normal, "normal");
|
||||
materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Roughness, "roughness");
|
||||
materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Specular, "specular");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -337,7 +371,7 @@ namespace AZ
|
||||
ExpectExecute("TestExpectFloatEquals(tangentData.z, 0.19)");
|
||||
ExpectExecute("TestExpectFloatEquals(tangentData.w, 0.29)");
|
||||
ExpectExecute("TestExpectIntegerEquals(meshVertexTangentData:GetTangentSetIndex(), 2)");
|
||||
ExpectExecute("TestExpectTrue(meshVertexTangentData:GetGenerationMethod(), MeshVertexTangentData.EMotionFX)");
|
||||
ExpectExecute("TestExpectTrue(meshVertexTangentData:GetGenerationMethod(), MeshVertexTangentData.MikkT)");
|
||||
}
|
||||
|
||||
TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_AnimationData_AccessWorks)
|
||||
@@ -449,6 +483,49 @@ namespace AZ
|
||||
ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(2).y, 0.3)");
|
||||
ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(2).z, 0.4)");
|
||||
}
|
||||
|
||||
TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_MaterialData_AccessWorks)
|
||||
{
|
||||
ExpectExecute("materialData = MaterialData()");
|
||||
ExpectExecute("TestExpectTrue(materialData ~= nil)");
|
||||
ExpectExecute("TestExpectTrue(materialData:IsNoDraw() == false)");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetUseColorMap() == false)");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetUseMetallicMap() == false)");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetUseRoughnessMap() == false)");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetUseEmissiveMap() == false)");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetUseAOMap() == false)");
|
||||
ExpectExecute("MockGraphData.FillData(materialData)");
|
||||
ExpectExecute("TestExpectTrue(materialData:IsNoDraw())");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetUseColorMap())");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetUseMetallicMap())");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetUseRoughnessMap())");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetUseEmissiveMap())");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetUseAOMap())");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetMetallicFactor(), 0.123)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetRoughnessFactor(), 0.456)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetEmissiveIntensity(), 0.789)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetOpacity(), 0.7)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetShininess(), 1.23)");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetMaterialName() == 'TestMaterialName')");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetBaseColor().x, 0.1)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetBaseColor().y, 0.2)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetBaseColor().z, 0.3)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetDiffuseColor().x, 0.3)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetDiffuseColor().y, 0.4)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetDiffuseColor().z, 0.5)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetEmissiveColor().x, 0.4)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetEmissiveColor().y, 0.5)");
|
||||
ExpectExecute("TestExpectFloatEquals(materialData:GetEmissiveColor().z, 0.6)");
|
||||
ExpectExecute("TestExpectIntegerEquals(materialData:GetUniqueId(), 102938)");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.AmbientOcclusion) == 'ambientocclusion')");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Bump) == 'bump')");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Diffuse) == 'diffuse')");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Emissive) == 'emissive')");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Metallic) == 'metallic')");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Normal) == 'normal')");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Roughness) == 'roughness')");
|
||||
ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Specular) == 'specular')");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user