SubsurfaceTransmissionParameterFunctorSourceData.cpp 7.0 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. #include "./SubsurfaceTransmissionParameterFunctorSourceData.h"
  9. #include <Atom/RHI.Reflect/ShaderResourceGroupLayout.h>
  10. #include <AzCore/Serialization/SerializeContext.h>
  11. namespace AZ
  12. {
  13. namespace Render
  14. {
  15. void SubsurfaceTransmissionParameterFunctorSourceData::Reflect(AZ::ReflectContext* context)
  16. {
  17. if (auto* serializeContext = azrtti_cast<SerializeContext*>(context))
  18. {
  19. serializeContext->Class<SubsurfaceTransmissionParameterFunctorSourceData, RPI::MaterialFunctorSourceData>()
  20. ->Version(1)
  21. ->Field("mode", &SubsurfaceTransmissionParameterFunctorSourceData::m_mode)
  22. ->Field("scale", &SubsurfaceTransmissionParameterFunctorSourceData::m_scale)
  23. ->Field("power", &SubsurfaceTransmissionParameterFunctorSourceData::m_power)
  24. ->Field("distortion", &SubsurfaceTransmissionParameterFunctorSourceData::m_distortion)
  25. ->Field("attenuation", &SubsurfaceTransmissionParameterFunctorSourceData::m_attenuation)
  26. ->Field("shrinkFactor", &SubsurfaceTransmissionParameterFunctorSourceData::m_shrinkFactor)
  27. ->Field("transmissionNdLBias", &SubsurfaceTransmissionParameterFunctorSourceData::m_transmissionNdLBias)
  28. ->Field("distanceAttenuation", &SubsurfaceTransmissionParameterFunctorSourceData::m_distanceAttenuation)
  29. ->Field("tintColor", &SubsurfaceTransmissionParameterFunctorSourceData::m_tintColor)
  30. ->Field("thickness", &SubsurfaceTransmissionParameterFunctorSourceData::m_thickness)
  31. ->Field("enabled", &SubsurfaceTransmissionParameterFunctorSourceData::m_enabled)
  32. ->Field("scatterDistanceColor", &SubsurfaceTransmissionParameterFunctorSourceData::m_scatterDistanceColor)
  33. ->Field("scatterDistanceIntensity", &SubsurfaceTransmissionParameterFunctorSourceData::m_scatterDistanceIntensity)
  34. ->Field("scatterDistanceShaderInput", &SubsurfaceTransmissionParameterFunctorSourceData::m_scatterDistance)
  35. ->Field("parametersShaderInput", &SubsurfaceTransmissionParameterFunctorSourceData::m_transmissionParams)
  36. ->Field("tintThickenssShaderInput", &SubsurfaceTransmissionParameterFunctorSourceData::m_transmissionTintThickness);
  37. ;
  38. }
  39. }
  40. RPI::MaterialFunctorSourceData::FunctorResult SubsurfaceTransmissionParameterFunctorSourceData::CreateFunctor(const RuntimeContext& context) const
  41. {
  42. using namespace RPI;
  43. RPI::Ptr<SubsurfaceTransmissionParameterFunctor> functor = aznew SubsurfaceTransmissionParameterFunctor;
  44. functor->m_mode = context.FindMaterialPropertyIndex(Name{ m_mode });
  45. functor->m_scale = context.FindMaterialPropertyIndex(Name{ m_scale });
  46. functor->m_power = context.FindMaterialPropertyIndex(Name{ m_power });
  47. functor->m_distortion = context.FindMaterialPropertyIndex(Name{ m_distortion });
  48. functor->m_attenuation = context.FindMaterialPropertyIndex(Name{ m_attenuation });
  49. functor->m_shrinkFactor = context.FindMaterialPropertyIndex(Name{ m_shrinkFactor });
  50. functor->m_transmissionNdLBias = context.FindMaterialPropertyIndex(Name{ m_transmissionNdLBias });
  51. functor->m_distanceAttenuation = context.FindMaterialPropertyIndex(Name{ m_distanceAttenuation });
  52. functor->m_tintColor = context.FindMaterialPropertyIndex(Name{ m_tintColor });
  53. functor->m_thickness = context.FindMaterialPropertyIndex(Name{ m_thickness });
  54. functor->m_enabled = context.FindMaterialPropertyIndex(Name{ m_enabled });
  55. functor->m_scatterDistanceColor = context.FindMaterialPropertyIndex(Name{ m_scatterDistanceColor });
  56. functor->m_scatterDistanceIntensity = context.FindMaterialPropertyIndex(Name{ m_scatterDistanceIntensity });
  57. if (functor->m_mode.IsNull() || functor->m_scale.IsNull() || functor->m_power.IsNull() || functor->m_distortion.IsNull() ||
  58. functor->m_tintColor.IsNull() || functor->m_thickness.IsNull() || functor->m_enabled.IsNull() || functor->m_attenuation.IsNull() || functor->m_scatterDistanceColor.IsNull() ||
  59. functor->m_scatterDistanceIntensity.IsNull() || functor->m_shrinkFactor.IsNull() || functor->m_transmissionNdLBias.IsNull() ||
  60. functor->m_distanceAttenuation.IsNull())
  61. {
  62. return Failure();
  63. }
  64. AddMaterialPropertyDependency(functor, functor->m_mode);
  65. AddMaterialPropertyDependency(functor, functor->m_scale);
  66. AddMaterialPropertyDependency(functor, functor->m_power);
  67. AddMaterialPropertyDependency(functor, functor->m_distortion);
  68. AddMaterialPropertyDependency(functor, functor->m_attenuation);
  69. AddMaterialPropertyDependency(functor, functor->m_shrinkFactor);
  70. AddMaterialPropertyDependency(functor, functor->m_transmissionNdLBias);
  71. AddMaterialPropertyDependency(functor, functor->m_distanceAttenuation);
  72. AddMaterialPropertyDependency(functor, functor->m_tintColor);
  73. AddMaterialPropertyDependency(functor, functor->m_thickness);
  74. AddMaterialPropertyDependency(functor, functor->m_enabled);
  75. AddMaterialPropertyDependency(functor, functor->m_scatterDistanceColor);
  76. AddMaterialPropertyDependency(functor, functor->m_scatterDistanceIntensity);
  77. functor->m_scatterDistance = context.FindShaderInputConstantIndex(Name{ m_scatterDistance });
  78. functor->m_transmissionParams = context.FindShaderInputConstantIndex(Name{ m_transmissionParams });
  79. functor->m_transmissionTintThickness = context.FindShaderInputConstantIndex(Name{ m_transmissionTintThickness });
  80. if (functor->m_scatterDistance.IsNull())
  81. {
  82. AZ_Error("ShaderCollectionFunctorSourceData", false, "Could not find shader input '%s'", m_scatterDistance.c_str());
  83. return Failure();
  84. }
  85. if (functor->m_transmissionParams.IsNull())
  86. {
  87. AZ_Error("ShaderCollectionFunctorSourceData", false, "Could not find shader input '%s'", m_transmissionParams.c_str());
  88. return Failure();
  89. }
  90. if (functor->m_transmissionTintThickness.IsNull())
  91. {
  92. AZ_Error("ShaderCollectionFunctorSourceData", false, "Could not find shader input '%s'", m_transmissionTintThickness.c_str());
  93. return Failure();
  94. }
  95. return Success(RPI::Ptr<MaterialFunctor>(functor));
  96. }
  97. }
  98. }