diff --git a/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerators/MikkTGenerator.cpp b/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerators/MikkTGenerator.cpp index a6191e3b36..3f736815e5 100644 --- a/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerators/MikkTGenerator.cpp +++ b/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerators/MikkTGenerator.cpp @@ -32,7 +32,6 @@ namespace AZ::TangentGeneration::Mesh::MikkT return customData->m_meshData->GetFaceCount(); } - int GetNumVerticesOfFace(const SMikkTSpaceContext* context, const int face) { AZ_UNUSED(context); @@ -40,7 +39,6 @@ namespace AZ::TangentGeneration::Mesh::MikkT return 3; } - void GetPosition(const SMikkTSpaceContext* context, float posOut[], const int face, const int vert) { MikktCustomData* customData = static_cast(context->m_pUserData); @@ -51,7 +49,6 @@ namespace AZ::TangentGeneration::Mesh::MikkT posOut[2] = pos.GetZ(); } - void GetNormal(const SMikkTSpaceContext* context, float normOut[], const int face, const int vert) { MikktCustomData* customData = static_cast(context->m_pUserData); @@ -62,7 +59,6 @@ namespace AZ::TangentGeneration::Mesh::MikkT normOut[2] = normal.GetZ(); } - void GetTexCoord(const SMikkTSpaceContext* context, float texOut[], const int face, const int vert) { MikktCustomData* customData = static_cast(context->m_pUserData); @@ -72,7 +68,6 @@ namespace AZ::TangentGeneration::Mesh::MikkT texOut[1] = uv.GetY(); } - // This function is used to return the tangent and signValue to the application. // tangent is a unit length vector. // For normal maps it is sufficient to use the following simplified version of the bitangent which is generated at pixel/vertex level. @@ -91,7 +86,6 @@ namespace AZ::TangentGeneration::Mesh::MikkT customData->m_bitangentData->SetBitangent(vertexIndex, bitangent); } - // This function is used to return tangent space results to the application. // tangent and bitangent are unit length vectors and magS and magT are their // true magnitudes which can be used for relief mapping effects. @@ -111,27 +105,11 @@ namespace AZ::TangentGeneration::Mesh::MikkT customData->m_bitangentData->SetBitangent(vertexIndex, bitangentVec); } - - bool GenerateTangents(AZ::SceneAPI::Containers::SceneManifest& manifest, AZ::SceneAPI::Containers::SceneGraph& graph, const AZ::SceneAPI::Containers::SceneGraph::NodeIndex& nodeIndex, AZ::SceneAPI::DataTypes::IMeshData* meshData, size_t uvSet) + bool GenerateTangents(const AZ::SceneAPI::DataTypes::IMeshData* meshData, + const AZ::SceneAPI::DataTypes::IMeshVertexUVData* uvData, + AZ::SceneAPI::DataTypes::IMeshVertexTangentData* outTangentData, + AZ::SceneAPI::DataTypes::IMeshVertexBitangentData* outBitangentData) { - // Create tangent and bitangent data sets and relate them to the given UV set. - AZ::SceneAPI::DataTypes::IMeshVertexUVData* uvData = AZ::SceneAPI::SceneData::TangentsRule::FindUVData(graph, nodeIndex, uvSet); - AZ::SceneAPI::DataTypes::IMeshVertexTangentData* tangentData = nullptr; - AZ::SceneAPI::DataTypes::IMeshVertexBitangentData* bitangentData = nullptr; - if (!uvData) - { - AZ_TracePrintf(AZ::SceneAPI::Utilities::ErrorWindow, "Cannot find UV data (set index=%d) to generate tangents and bitangents from in MikkT generator!\n", uvSet); - return false; - } - - if (!AZ::SceneGenerationComponents::TangentGenerateComponent::CreateTangentBitangentLayers(manifest, nodeIndex, meshData->GetVertexCount(), uvSet, AZ::SceneAPI::DataTypes::TangentSpace::MikkT, "MikkT", graph, &tangentData, &bitangentData)) - { - AZ_TracePrintf(AZ::SceneAPI::Utilities::ErrorWindow, "Failed to create tangents and bitangents data sets inside MikkT generator!\n"); - return false; - } - - //---------------------------------- - // Provide the MikkT interface. SMikkTSpaceInterface mikkInterface; mikkInterface.m_getNumFaces = GetNumFaces; @@ -146,8 +124,8 @@ namespace AZ::TangentGeneration::Mesh::MikkT MikktCustomData customData; customData.m_meshData = meshData; customData.m_uvData = uvData; - customData.m_tangentData = tangentData; - customData.m_bitangentData = bitangentData; + customData.m_tangentData = outTangentData; + customData.m_bitangentData = outBitangentData; // Generate the tangents. SMikkTSpaceContext mikkContext; @@ -155,7 +133,7 @@ namespace AZ::TangentGeneration::Mesh::MikkT mikkContext.m_pUserData = &customData; if (genTangSpaceDefault(&mikkContext) == 0) { - AZ_TracePrintf(AZ::SceneAPI::Utilities::ErrorWindow, "Failed to generate tangents and bitangents using MikkT, because MikkT reported failure!\n"); + AZ_TracePrintf(AZ::SceneAPI::Utilities::ErrorWindow, "Failed to generate tangents and bitangents using MikkT.\n"); return false; } diff --git a/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerators/MikkTGenerator.h b/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerators/MikkTGenerator.h index 98451d3c46..4b1d8ebd72 100644 --- a/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerators/MikkTGenerator.h +++ b/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerators/MikkTGenerator.h @@ -19,12 +19,14 @@ namespace AZ::TangentGeneration::Mesh::MikkT { struct MikktCustomData { - AZ::SceneAPI::DataTypes::IMeshData* m_meshData; - AZ::SceneAPI::DataTypes::IMeshVertexUVData* m_uvData; - AZ::SceneAPI::DataTypes::IMeshVertexTangentData* m_tangentData; - AZ::SceneAPI::DataTypes::IMeshVertexBitangentData* m_bitangentData; + const AZ::SceneAPI::DataTypes::IMeshData* m_meshData; + const AZ::SceneAPI::DataTypes::IMeshVertexUVData* m_uvData; + AZ::SceneAPI::DataTypes::IMeshVertexTangentData* m_tangentData; + AZ::SceneAPI::DataTypes::IMeshVertexBitangentData* m_bitangentData; }; - // The main generation method. - bool GenerateTangents(AZ::SceneAPI::Containers::SceneManifest& manifest, AZ::SceneAPI::Containers::SceneGraph& graph, const AZ::SceneAPI::Containers::SceneGraph::NodeIndex& nodeIndex, AZ::SceneAPI::DataTypes::IMeshData* meshData, size_t uvSet); + bool GenerateTangents(const AZ::SceneAPI::DataTypes::IMeshData* meshData, + const AZ::SceneAPI::DataTypes::IMeshVertexUVData* uvData, + AZ::SceneAPI::DataTypes::IMeshVertexTangentData* outTangentData, + AZ::SceneAPI::DataTypes::IMeshVertexBitangentData* outBitangentData); } // namespace AZ::TangentGeneration::MikkT