12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #pragma once
- #include <SceneAPI/SceneCore/Components/GenerationComponent.h>
- #include <SceneAPI/SceneCore/Containers/Scene.h>
- #include <SceneAPI/SceneData/Rules/TangentsRule.h>
- #include <AzCore/RTTI/RTTI.h>
- namespace AZ::SceneAPI::DataTypes { class IMeshData; }
- namespace AZ::SceneAPI::DataTypes { class IMeshVertexUVData; }
- namespace AZ::SceneAPI::DataTypes { class IMeshVertexTangentData; }
- namespace AZ::SceneAPI::DataTypes { class IMeshVertexBitangentData; }
- namespace AZ::SceneAPI::DataTypes { enum class TangentSpace; }
- namespace AZ::SceneData::GraphData
- {
- class BlendShapeData;
- }
- namespace AZ::SceneGenerationComponents
- {
- struct TangentGenerateContext
- : public AZ::SceneAPI::Events::ICallContext
- {
- AZ_RTTI(TangentGenerateContext, "{E836F8F8-5A66-497C-89CC-2D37D741CCAA}", AZ::SceneAPI::Events::ICallContext)
- TangentGenerateContext(AZ::SceneAPI::Containers::Scene& scene)
- : m_scene(scene) {}
- TangentGenerateContext& operator=(const TangentGenerateContext& other) = delete;
- AZ::SceneAPI::Containers::Scene& GetScene() { return m_scene; }
- const AZ::SceneAPI::Containers::Scene& GetScene() const { return m_scene; }
- private:
- AZ::SceneAPI::Containers::Scene& m_scene;
- };
- class TangentGenerateComponent
- : public AZ::SceneAPI::SceneCore::GenerationComponent
- {
- public:
- AZ_COMPONENT(TangentGenerateComponent, "{57743E6F-8718-491C-8A82-24A6763904F5}", AZ::SceneAPI::SceneCore::GenerationComponent);
- TangentGenerateComponent();
- static void Reflect(AZ::ReflectContext* context);
- AZ::SceneAPI::Events::ProcessingResult GenerateTangentData(TangentGenerateContext& context);
- private:
- void FindBlendShapes(
- AZ::SceneAPI::Containers::SceneGraph& graph, const AZ::SceneAPI::Containers::SceneGraph::NodeIndex& nodeIndex,
- AZStd::vector<AZ::SceneData::GraphData::BlendShapeData*>& outBlendShapes) const;
- bool GenerateTangentsForMesh(
- AZ::SceneAPI::Containers::Scene& scene,
- const AZ::SceneAPI::Containers::SceneGraph::NodeIndex& nodeIndex,
- AZ::SceneAPI::DataTypes::IMeshData* meshData,
- AZ::SceneAPI::DataTypes::TangentGenerationMethod defaultGenerationMethod);
- bool UpdateFbxTangentWValues(
- AZ::SceneAPI::Containers::SceneGraph& graph,
- const AZ::SceneAPI::Containers::SceneGraph::NodeIndex& nodeIndex,
- const AZ::SceneAPI::DataTypes::IMeshData* meshData,
- bool deubgBitangentFlip);
- const AZ::SceneAPI::SceneData::TangentsRule* GetTangentRule(const AZ::SceneAPI::Containers::Scene& scene) const;
- void GetRegistrySettings(
- AZ::SceneAPI::DataTypes::TangentGenerationMethod& defaultTangentGenrationMethod, bool& debugBitangentFlip) const;
- size_t CalcUvSetCount(AZ::SceneAPI::Containers::SceneGraph& graph, const AZ::SceneAPI::Containers::SceneGraph::NodeIndex& nodeIndex) const;
- AZ::SceneAPI::DataTypes::IMeshVertexUVData* FindUvData(AZ::SceneAPI::Containers::SceneGraph& graph, const AZ::SceneAPI::Containers::SceneGraph::NodeIndex& nodeIndex, AZ::u64 uvSet) const;
- AZ::SceneAPI::DataTypes::IMeshVertexTangentData* FindTangentData(AZ::SceneAPI::Containers::SceneGraph& graph, const AZ::SceneAPI::Containers::SceneGraph::NodeIndex& nodeIndex, AZ::u64 setIndex) const;
- bool CreateTangentLayer(AZ::SceneAPI::Containers::SceneManifest& manifest,
- const AZ::SceneAPI::Containers::SceneGraph::NodeIndex& nodeIndex,
- size_t numVerts,
- size_t uvSetIndex,
- AZ::SceneAPI::DataTypes::TangentGenerationMethod generationMethod,
- AZ::SceneAPI::Containers::SceneGraph& graph,
- AZ::SceneAPI::DataTypes::IMeshVertexTangentData** outTangentData);
- AZ::SceneAPI::DataTypes::IMeshVertexBitangentData* FindBitangentData(AZ::SceneAPI::Containers::SceneGraph& graph, const AZ::SceneAPI::Containers::SceneGraph::NodeIndex& nodeIndex, AZ::u64 setIndex) const;
- bool CreateBitangentLayer(AZ::SceneAPI::Containers::SceneManifest& manifest,
- const AZ::SceneAPI::Containers::SceneGraph::NodeIndex& nodeIndex,
- size_t numVerts,
- size_t uvSetIndex,
- AZ::SceneAPI::DataTypes::TangentGenerationMethod generationMethod,
- AZ::SceneAPI::Containers::SceneGraph& graph,
- AZ::SceneAPI::DataTypes::IMeshVertexBitangentData** outBitangentData);
- };
- } // namespace AZ::SceneGenerationComponents
|