TSpace setting for MikkT tangent generation (#2386)
* Added TSpace method setting which is only visible for MikkT generation. * Fixed a bug with generating tangents for blend shapes. * Renamed tangent space into generation method. * Some code cleaning Signed-off-by: Benjamin Jillich <jillich@amazon.com>
This commit is contained in:
@@ -10,110 +10,95 @@
|
||||
#include <AzCore/Serialization/SerializeContext.h>
|
||||
#include <AzCore/RTTI/BehaviorContext.h>
|
||||
|
||||
namespace AZ
|
||||
namespace AZ::SceneData::GraphData
|
||||
{
|
||||
namespace SceneData
|
||||
void MeshVertexBitangentData::Reflect(ReflectContext* context)
|
||||
{
|
||||
namespace GraphData
|
||||
SerializeContext* serializeContext = azrtti_cast<SerializeContext*>(context);
|
||||
if (serializeContext)
|
||||
{
|
||||
void MeshVertexBitangentData::Reflect(ReflectContext* context)
|
||||
{
|
||||
SerializeContext* serializeContext = azrtti_cast<SerializeContext*>(context);
|
||||
if (serializeContext)
|
||||
{
|
||||
serializeContext->Class<MeshVertexBitangentData>()->Version(2);
|
||||
}
|
||||
serializeContext->Class<MeshVertexBitangentData>()->Version(2);
|
||||
}
|
||||
|
||||
BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
|
||||
if (behaviorContext)
|
||||
{
|
||||
behaviorContext->Class<MeshVertexBitangentData>()
|
||||
->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
|
||||
->Attribute(AZ::Script::Attributes::Module, "scene")
|
||||
->Method("GetCount", &MeshVertexBitangentData::GetCount)
|
||||
->Method("GetBitangent", &MeshVertexBitangentData::GetBitangent)
|
||||
->Method("GetBitangentSetIndex", &MeshVertexBitangentData::GetBitangentSetIndex)
|
||||
->Method("GetTangentSpace", &MeshVertexBitangentData::GetTangentSpace)
|
||||
->Enum<(int)SceneAPI::DataTypes::TangentSpace::FromSourceScene>("FromSourceScene")
|
||||
->Enum<(int)SceneAPI::DataTypes::TangentSpace::MikkT>("MikkT");
|
||||
}
|
||||
}
|
||||
BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
|
||||
if (behaviorContext)
|
||||
{
|
||||
behaviorContext->Class<MeshVertexBitangentData>()
|
||||
->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
|
||||
->Attribute(AZ::Script::Attributes::Module, "scene")
|
||||
->Method("GetCount", &MeshVertexBitangentData::GetCount)
|
||||
->Method("GetBitangent", &MeshVertexBitangentData::GetBitangent)
|
||||
->Method("GetBitangentSetIndex", &MeshVertexBitangentData::GetBitangentSetIndex)
|
||||
->Method("GetGenerationMethod", &MeshVertexBitangentData::GetGenerationMethod)
|
||||
->Enum<(int)SceneAPI::DataTypes::TangentGenerationMethod::FromSourceScene>("FromSourceScene")
|
||||
->Enum<(int)SceneAPI::DataTypes::TangentGenerationMethod::MikkT>("MikkT");
|
||||
}
|
||||
}
|
||||
|
||||
void MeshVertexBitangentData::CloneAttributesFrom(const IGraphObject* sourceObject)
|
||||
{
|
||||
IMeshVertexBitangentData::CloneAttributesFrom(sourceObject);
|
||||
if (const auto* typedSource = azrtti_cast<const MeshVertexBitangentData*>(sourceObject))
|
||||
{
|
||||
SetTangentSpace(typedSource->GetTangentSpace());
|
||||
SetBitangentSetIndex(typedSource->GetBitangentSetIndex());
|
||||
}
|
||||
}
|
||||
void MeshVertexBitangentData::CloneAttributesFrom(const IGraphObject* sourceObject)
|
||||
{
|
||||
IMeshVertexBitangentData::CloneAttributesFrom(sourceObject);
|
||||
if (const auto* typedSource = azrtti_cast<const MeshVertexBitangentData*>(sourceObject))
|
||||
{
|
||||
SetGenerationMethod(typedSource->GetGenerationMethod());
|
||||
SetBitangentSetIndex(typedSource->GetBitangentSetIndex());
|
||||
}
|
||||
}
|
||||
|
||||
size_t MeshVertexBitangentData::GetCount() const
|
||||
{
|
||||
return m_bitangents.size();
|
||||
}
|
||||
size_t MeshVertexBitangentData::GetCount() const
|
||||
{
|
||||
return m_bitangents.size();
|
||||
}
|
||||
|
||||
const AZ::Vector3& MeshVertexBitangentData::GetBitangent(size_t index) const
|
||||
{
|
||||
AZ_Assert(index < m_bitangents.size(), "Invalid index %i for mesh bitangents.", index);
|
||||
return m_bitangents[index];
|
||||
}
|
||||
|
||||
const AZ::Vector3& MeshVertexBitangentData::GetBitangent(size_t index) const
|
||||
{
|
||||
AZ_Assert(index < m_bitangents.size(), "Invalid index %i for mesh bitangents.", index);
|
||||
return m_bitangents[index];
|
||||
}
|
||||
void MeshVertexBitangentData::ReserveContainerSpace(size_t numVerts)
|
||||
{
|
||||
m_bitangents.reserve(numVerts);
|
||||
}
|
||||
|
||||
void MeshVertexBitangentData::Resize(size_t numVerts)
|
||||
{
|
||||
m_bitangents.resize(numVerts);
|
||||
}
|
||||
|
||||
void MeshVertexBitangentData::ReserveContainerSpace(size_t numVerts)
|
||||
{
|
||||
m_bitangents.reserve(numVerts);
|
||||
}
|
||||
void MeshVertexBitangentData::AppendBitangent(const AZ::Vector3& bitangent)
|
||||
{
|
||||
m_bitangents.push_back(bitangent);
|
||||
}
|
||||
|
||||
void MeshVertexBitangentData::SetBitangent(size_t vertexIndex, const AZ::Vector3& bitangent)
|
||||
{
|
||||
m_bitangents[vertexIndex] = bitangent;
|
||||
}
|
||||
|
||||
void MeshVertexBitangentData::Resize(size_t numVerts)
|
||||
{
|
||||
m_bitangents.resize(numVerts);
|
||||
}
|
||||
void MeshVertexBitangentData::SetBitangentSetIndex(size_t setIndex)
|
||||
{
|
||||
m_setIndex = setIndex;
|
||||
}
|
||||
|
||||
size_t MeshVertexBitangentData::GetBitangentSetIndex() const
|
||||
{
|
||||
return m_setIndex;
|
||||
}
|
||||
|
||||
void MeshVertexBitangentData::AppendBitangent(const AZ::Vector3& bitangent)
|
||||
{
|
||||
m_bitangents.push_back(bitangent);
|
||||
}
|
||||
AZ::SceneAPI::DataTypes::TangentGenerationMethod MeshVertexBitangentData::GetGenerationMethod() const
|
||||
{
|
||||
return m_generationMethod;
|
||||
}
|
||||
|
||||
void MeshVertexBitangentData::SetGenerationMethod(AZ::SceneAPI::DataTypes::TangentGenerationMethod method)
|
||||
{
|
||||
m_generationMethod = method;
|
||||
}
|
||||
|
||||
void MeshVertexBitangentData::SetBitangent(size_t vertexIndex, const AZ::Vector3& bitangent)
|
||||
{
|
||||
m_bitangents[vertexIndex] = bitangent;
|
||||
}
|
||||
|
||||
|
||||
void MeshVertexBitangentData::SetBitangentSetIndex(size_t setIndex)
|
||||
{
|
||||
m_setIndex = setIndex;
|
||||
}
|
||||
|
||||
|
||||
size_t MeshVertexBitangentData::GetBitangentSetIndex() const
|
||||
{
|
||||
return m_setIndex;
|
||||
}
|
||||
|
||||
|
||||
AZ::SceneAPI::DataTypes::TangentSpace MeshVertexBitangentData::GetTangentSpace() const
|
||||
{
|
||||
return m_tangentSpace;
|
||||
}
|
||||
|
||||
|
||||
void MeshVertexBitangentData::SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace space)
|
||||
{
|
||||
m_tangentSpace = space;
|
||||
}
|
||||
|
||||
void MeshVertexBitangentData::GetDebugOutput(AZ::SceneAPI::Utilities::DebugOutput& output) const
|
||||
{
|
||||
output.Write("Bitangents", m_bitangents);
|
||||
output.Write("TangentSpace", aznumeric_cast<int64_t>(m_tangentSpace));
|
||||
}
|
||||
} // GraphData
|
||||
} // SceneData
|
||||
} // AZ
|
||||
void MeshVertexBitangentData::GetDebugOutput(AZ::SceneAPI::Utilities::DebugOutput& output) const
|
||||
{
|
||||
output.Write("Bitangents", m_bitangents);
|
||||
output.Write("GenerationMethod", aznumeric_cast<int64_t>(m_generationMethod));
|
||||
}
|
||||
} // AZ::SceneData::GraphData
|
||||
|
||||
Reference in New Issue
Block a user