MaterialData.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <SceneAPI/SceneData/SceneDataConfiguration.h>
  10. #include <SceneAPI/SceneCore/DataTypes/GraphData/IMaterialData.h>
  11. #include <AzCore/std/containers/unordered_map.h>
  12. #include <AzCore/std/string/fixed_string.h>
  13. namespace AZ
  14. {
  15. class ReflectContext;
  16. namespace SceneData
  17. {
  18. namespace GraphData
  19. {
  20. class SCENE_DATA_CLASS MaterialData
  21. : public AZ::SceneAPI::DataTypes::IMaterialData
  22. {
  23. public:
  24. AZ_RTTI(MaterialData, "{F2EE1768-183B-483E-9778-CB3D3D0DA68A}", AZ::SceneAPI::DataTypes::IMaterialData)
  25. SCENE_DATA_API MaterialData();
  26. SCENE_DATA_API virtual ~MaterialData() = default;
  27. SCENE_DATA_API void SetMaterialName(AZStd::string materialName);
  28. SCENE_DATA_API const AZStd::string& GetMaterialName() const override;
  29. SCENE_DATA_API virtual void SetTexture(TextureMapType mapType, const char* textureFileName);
  30. SCENE_DATA_API virtual void SetTexture(TextureMapType mapType, const AZStd::string& textureFileName);
  31. SCENE_DATA_API virtual void SetTexture(TextureMapType mapType, AZStd::string&& textureFileName);
  32. SCENE_DATA_API virtual void SetNoDraw(bool isNoDraw);
  33. SCENE_DATA_API virtual void SetDiffuseColor(const AZ::Vector3& color);
  34. SCENE_DATA_API virtual void SetSpecularColor(const AZ::Vector3& color);
  35. SCENE_DATA_API virtual void SetEmissiveColor(const AZ::Vector3& color);
  36. SCENE_DATA_API virtual void SetOpacity(float opacity);
  37. SCENE_DATA_API virtual void SetShininess(float shininess);
  38. SCENE_DATA_API virtual void SetUniqueId(uint64_t uid);
  39. SCENE_DATA_API virtual void SetUseColorMap(AZStd::optional<bool> useColorMap);
  40. SCENE_DATA_API virtual void SetBaseColor(const AZStd::optional<AZ::Vector3>& baseColor);
  41. SCENE_DATA_API virtual void SetUseMetallicMap(AZStd::optional<bool> useMetallicMap);
  42. SCENE_DATA_API virtual void SetMetallicFactor(AZStd::optional<float> metallicFactor);
  43. SCENE_DATA_API virtual void SetUseRoughnessMap(AZStd::optional<bool> useRoughnessMap);
  44. SCENE_DATA_API virtual void SetRoughnessFactor(AZStd::optional<float> roughnessFactor);
  45. SCENE_DATA_API virtual void SetUseEmissiveMap(AZStd::optional<bool> useEmissiveMap);
  46. SCENE_DATA_API virtual void SetEmissiveIntensity(AZStd::optional<float> emissiveIntensity);
  47. SCENE_DATA_API virtual void SetUseAOMap(AZStd::optional<bool> useAOMap);
  48. SCENE_DATA_API const AZStd::string& GetTexture(TextureMapType mapType) const override;
  49. SCENE_DATA_API bool IsNoDraw() const override;
  50. SCENE_DATA_API const AZ::Vector3& GetDiffuseColor() const override;
  51. SCENE_DATA_API const AZ::Vector3& GetSpecularColor() const override;
  52. SCENE_DATA_API const AZ::Vector3& GetEmissiveColor() const override;
  53. SCENE_DATA_API float GetOpacity() const override;
  54. SCENE_DATA_API float GetShininess() const override;
  55. SCENE_DATA_API uint64_t GetUniqueId() const override;
  56. SCENE_DATA_API AZStd::optional<bool> GetUseColorMap() const override;
  57. SCENE_DATA_API AZStd::optional<AZ::Vector3> GetBaseColor() const override;
  58. SCENE_DATA_API AZStd::optional<bool> GetUseMetallicMap() const override;
  59. SCENE_DATA_API AZStd::optional<float> GetMetallicFactor() const override;
  60. SCENE_DATA_API AZStd::optional<bool> GetUseRoughnessMap() const override;
  61. SCENE_DATA_API AZStd::optional<float> GetRoughnessFactor() const override;
  62. SCENE_DATA_API AZStd::optional<bool> GetUseEmissiveMap() const override;
  63. SCENE_DATA_API AZStd::optional<float> GetEmissiveIntensity() const override;
  64. SCENE_DATA_API AZStd::optional<bool> GetUseAOMap() const override;
  65. static void Reflect(ReflectContext* context);
  66. protected:
  67. AZStd::unordered_map<TextureMapType, AZStd::string> m_textureMap;
  68. AZ::Vector3 m_diffuseColor;
  69. AZ::Vector3 m_specularColor;
  70. AZ::Vector3 m_emissiveColor;
  71. AZStd::optional<AZ::Vector3> m_baseColor;
  72. float m_opacity;
  73. float m_shininess;
  74. AZStd::optional<float> m_metallicFactor = AZStd::nullopt;
  75. AZStd::optional<float> m_roughnessFactor = AZStd::nullopt;
  76. AZStd::optional<float> m_emissiveIntensity = AZStd::nullopt;
  77. AZStd::optional<bool> m_useColorMap = AZStd::nullopt;
  78. AZStd::optional<bool> m_useMetallicMap = AZStd::nullopt;
  79. AZStd::optional<bool> m_useRoughnessMap = AZStd::nullopt;
  80. AZStd::optional<bool> m_useEmissiveMap = AZStd::nullopt;
  81. AZStd::optional<bool> m_useAOMap = AZStd::nullopt;
  82. bool m_isNoDraw;
  83. const AZStd::string m_emptyString;
  84. // A unique id which is used to identify a material in a fbx.
  85. // This is the same as the ID in the fbx file's FbxNode
  86. uint64_t m_uniqueId;
  87. //! Material name from FbxNode's Object name
  88. AZStd::string m_materialName;
  89. };
  90. } // namespace GraphData
  91. } // namespace SceneData
  92. } // namespace AZ