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:
Benjamin Jillich
2021-07-27 00:15:26 -07:00
committed by GitHub
parent c9b3ed8bc7
commit a3712b5564
17 changed files with 385 additions and 371 deletions
@@ -17,32 +17,24 @@ namespace AZ
class Vector3;
}
namespace AZ
namespace AZ::SceneAPI::DataTypes
{
namespace SceneAPI
class IMeshVertexBitangentData
: public IGraphObject
{
namespace DataTypes
{
public:
AZ_RTTI(IMeshVertexBitangentData, "{6C8F6109-B0BD-49D1-A998-4A4946557DF9}", IGraphObject);
class IMeshVertexBitangentData
: public IGraphObject
{
public:
AZ_RTTI(IMeshVertexBitangentData, "{6C8F6109-B0BD-49D1-A998-4A4946557DF9}", IGraphObject);
virtual ~IMeshVertexBitangentData() override = default;
virtual ~IMeshVertexBitangentData() override = default;
void CloneAttributesFrom([[maybe_unused]] const IGraphObject* sourceObject) override {}
void CloneAttributesFrom([[maybe_unused]] const IGraphObject* sourceObject) override {}
virtual size_t GetCount() const = 0;
virtual const AZ::Vector3& GetBitangent(size_t index) const = 0;
virtual void SetBitangent(size_t vertexIndex, const AZ::Vector3& bitangent) = 0;
virtual void SetBitangentSetIndex(size_t setIndex) = 0;
virtual size_t GetBitangentSetIndex() const = 0;
virtual TangentSpace GetTangentSpace() const = 0;
virtual void SetTangentSpace(TangentSpace space) = 0;
};
} // DataTypes
} // SceneAPI
} // AZ
virtual size_t GetCount() const = 0;
virtual const AZ::Vector3& GetBitangent(size_t index) const = 0;
virtual void SetBitangent(size_t vertexIndex, const AZ::Vector3& bitangent) = 0;
virtual void SetBitangentSetIndex(size_t setIndex) = 0;
virtual size_t GetBitangentSetIndex() const = 0;
virtual TangentGenerationMethod GetGenerationMethod() const = 0;
virtual void SetGenerationMethod(TangentGenerationMethod method) = 0;
};
} // AZ::SceneAPI::DataTypes
@@ -16,42 +16,36 @@ namespace AZ
class Vector4;
}
namespace AZ
namespace AZ::SceneAPI::DataTypes
{
namespace SceneAPI
enum class TangentGenerationMethod
{
namespace DataTypes
{
enum class TangentSpace
{
FromSourceScene = 0,
MikkT = 1
};
FromSourceScene = 0,
MikkT = 1
};
enum class BitangentMethod
{
UseFromTangentSpace = 0,
Orthogonal = 1
};
enum class MikkTSpaceMethod
{
TSpace = 0,
TSpaceBasic = 1
};
class IMeshVertexTangentData
: public IGraphObject
{
public:
AZ_RTTI(IMeshVertexTangentData, "{B24084FF-09B1-4EE5-BA5B-2D392E92ECC1}", IGraphObject);
class IMeshVertexTangentData
: public IGraphObject
{
public:
AZ_RTTI(IMeshVertexTangentData, "{B24084FF-09B1-4EE5-BA5B-2D392E92ECC1}", IGraphObject);
virtual ~IMeshVertexTangentData() override = default;
virtual ~IMeshVertexTangentData() override = default;
void CloneAttributesFrom([[maybe_unused]] const IGraphObject* sourceObject) override {}
void CloneAttributesFrom([[maybe_unused]] const IGraphObject* sourceObject) override {}
virtual size_t GetCount() const = 0;
virtual const AZ::Vector4& GetTangent(size_t index) const = 0;
virtual void SetTangent(size_t vertexIndex, const AZ::Vector4& tangent) = 0;
virtual void SetTangentSetIndex(size_t setIndex) = 0;
virtual size_t GetTangentSetIndex() const = 0;
virtual TangentSpace GetTangentSpace() const = 0;
virtual void SetTangentSpace(TangentSpace space) = 0;
};
} // DataTypes
} // SceneAPI
} // AZ
virtual size_t GetCount() const = 0;
virtual const AZ::Vector4& GetTangent(size_t index) const = 0;
virtual void SetTangent(size_t vertexIndex, const AZ::Vector4& tangent) = 0;
virtual void SetTangentSetIndex(size_t setIndex) = 0;
virtual size_t GetTangentSetIndex() const = 0;
virtual TangentGenerationMethod GetGenerationMethod() const = 0;
virtual void SetGenerationMethod(TangentGenerationMethod method) = 0;
};
} // AZ::SceneAPI::DataTypes