DisplayMapperConfigurationDescriptor.cpp 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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 <AzCore/Preprocessor/Enum.h>
  9. #include <AzCore/Preprocessor/EnumReflectUtils.h>
  10. #include <AzCore/Asset/AssetSerializer.h>
  11. #include <AzCore/Serialization/SerializeContext.h>
  12. #include <Atom/Feature/DisplayMapper/DisplayMapperConfigurationDescriptor.h>
  13. #include <Atom/Feature/ACES/AcesDisplayMapperFeatureProcessor.h>
  14. namespace AZ
  15. {
  16. namespace Render
  17. {
  18. void AcesParameterOverrides::Reflect(ReflectContext* context)
  19. {
  20. if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
  21. {
  22. serializeContext->Enum<OutputDeviceTransformType>()
  23. ->Version(0)
  24. ->Value("48Nits", OutputDeviceTransformType::OutputDeviceTransformType_48Nits)
  25. ->Value("1000Nits", OutputDeviceTransformType::OutputDeviceTransformType_1000Nits)
  26. ->Value("2000Nits", OutputDeviceTransformType::OutputDeviceTransformType_2000Nits)
  27. ->Value("4000Nits", OutputDeviceTransformType::OutputDeviceTransformType_4000Nits)
  28. ->Value("NumOutputDeviceTransformTypes", OutputDeviceTransformType::NumOutputDeviceTransformTypes)
  29. ;
  30. serializeContext->Class<AcesParameterOverrides>()
  31. ->Version(0)
  32. ->Field("OverrideDefaults", &AcesParameterOverrides::m_overrideDefaults)
  33. ->Field("AlterSurround", &AcesParameterOverrides::m_alterSurround)
  34. ->Field("ApplyDesaturation", &AcesParameterOverrides::m_applyDesaturation)
  35. ->Field("ApplyCATD60toD65", &AcesParameterOverrides::m_applyCATD60toD65)
  36. ->Field("PresetODT", &AcesParameterOverrides::m_preset)
  37. ->Field("CinemaLimitsBlack", &AcesParameterOverrides::m_cinemaLimitsBlack)
  38. ->Field("CinemaLimitsWhite", &AcesParameterOverrides::m_cinemaLimitsWhite)
  39. ->Field("MinPoint", &AcesParameterOverrides::m_minPoint)
  40. ->Field("MidPoint", &AcesParameterOverrides::m_midPoint)
  41. ->Field("MaxPoint", &AcesParameterOverrides::m_maxPoint)
  42. ->Field("SurroundGamma", &AcesParameterOverrides::m_surroundGamma)
  43. ->Field("Gamma", &AcesParameterOverrides::m_gamma);
  44. }
  45. if (auto behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
  46. {
  47. behaviorContext->Class<OutputDeviceTransformType>("OutputDeviceTransformType")
  48. ->Enum<OutputDeviceTransformType::OutputDeviceTransformType_48Nits>("OutputDeviceTransformType_48Nits")
  49. ->Attribute(AZ::Script::Attributes::Module, "atom")
  50. ->Enum<OutputDeviceTransformType::OutputDeviceTransformType_1000Nits>("OutputDeviceTransformType_100Nits")
  51. ->Attribute(AZ::Script::Attributes::Module, "atom")
  52. ->Enum<OutputDeviceTransformType::OutputDeviceTransformType_2000Nits>("OutputDeviceTransformType_2000Nits")
  53. ->Attribute(AZ::Script::Attributes::Module, "atom")
  54. ->Enum<OutputDeviceTransformType::OutputDeviceTransformType_4000Nits>("OutputDeviceTransformType_4000Nits")
  55. ->Attribute(AZ::Script::Attributes::Module, "atom")
  56. ->Enum<OutputDeviceTransformType::NumOutputDeviceTransformTypes>("OutputDeviceTransformType_NumOutputDeviceTransformTypes")
  57. ->Attribute(AZ::Script::Attributes::Module, "atom")
  58. ;
  59. behaviorContext->Class<AcesParameterOverrides>("AcesParameterOverrides")
  60. ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
  61. ->Attribute(AZ::Script::Attributes::Category, "render")
  62. ->Attribute(AZ::Script::Attributes::Module, "render")
  63. ->Constructor()
  64. ->Method("LoadPreset", &AcesParameterOverrides::LoadPreset)
  65. ->Property("overrideDefaults", BehaviorValueProperty(&AcesParameterOverrides::m_overrideDefaults))
  66. ->Property("preset", BehaviorValueProperty(&AcesParameterOverrides::m_preset))
  67. ->Enum<aznumeric_cast<int>(OutputDeviceTransformType::NumOutputDeviceTransformTypes)>(
  68. "OutputDeviceTransformType_NumOutputDeviceTransformTypes")
  69. ->Enum<aznumeric_cast<int>(OutputDeviceTransformType::OutputDeviceTransformType_48Nits)>(
  70. "OutputDeviceTransformType_48Nits")
  71. ->Enum<aznumeric_cast<int>(OutputDeviceTransformType::OutputDeviceTransformType_1000Nits)>(
  72. "OutputDeviceTransformType_1000Nits")
  73. ->Enum<aznumeric_cast<int>(OutputDeviceTransformType::OutputDeviceTransformType_2000Nits)>(
  74. "OutputDeviceTransformType_2000Nits")
  75. ->Enum<aznumeric_cast<int>(OutputDeviceTransformType::OutputDeviceTransformType_4000Nits)>(
  76. "OutputDeviceTransformType_4000Nits")
  77. ->Property("alterSurround", BehaviorValueProperty(&AcesParameterOverrides::m_alterSurround))
  78. ->Property("applyDesaturation", BehaviorValueProperty(&AcesParameterOverrides::m_applyDesaturation))
  79. ->Property("applyCATD60toD65", BehaviorValueProperty(&AcesParameterOverrides::m_applyCATD60toD65))
  80. ;
  81. }
  82. }
  83. void AcesParameterOverrides::LoadPreset()
  84. {
  85. DisplayMapperParameters displayMapperParameters;
  86. AcesDisplayMapperFeatureProcessor::GetAcesDisplayMapperParameters(&displayMapperParameters, m_preset);
  87. m_alterSurround = (displayMapperParameters.m_OutputDisplayTransformFlags & AcesDisplayMapperFeatureProcessor::AlterSurround) != 0;
  88. m_applyDesaturation = (displayMapperParameters.m_OutputDisplayTransformFlags & AcesDisplayMapperFeatureProcessor::ApplyDesaturation) != 0;
  89. m_applyCATD60toD65 = (displayMapperParameters.m_OutputDisplayTransformFlags & AcesDisplayMapperFeatureProcessor::ApplyCATD60toD65) != 0;
  90. m_cinemaLimitsBlack = displayMapperParameters.m_cinemaLimits[0];
  91. m_cinemaLimitsWhite = displayMapperParameters.m_cinemaLimits[1];
  92. m_minPoint = displayMapperParameters.m_acesSplineParams.minPoint[0];
  93. m_midPoint = displayMapperParameters.m_acesSplineParams.midPoint[0];
  94. m_maxPoint = displayMapperParameters.m_acesSplineParams.maxPoint[0];
  95. m_surroundGamma = displayMapperParameters.m_surroundGamma;
  96. m_gamma = displayMapperParameters.m_gamma;
  97. }
  98. AZ_ENUM_DEFINE_REFLECT_UTILITIES(DisplayMapperOperationType);
  99. void DisplayMapperConfigurationDescriptor::Reflect(AZ::ReflectContext* context)
  100. {
  101. if (auto* serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
  102. {
  103. DisplayMapperOperationTypeReflect(*serializeContext);
  104. serializeContext->Class<DisplayMapperConfigurationDescriptor>()
  105. ->Version(3)
  106. ->Field("Name", &DisplayMapperConfigurationDescriptor::m_name)
  107. ->Field("OperationType", &DisplayMapperConfigurationDescriptor::m_operationType)
  108. ->Field("LdrGradingLutEnabled", &DisplayMapperConfigurationDescriptor::m_ldrGradingLutEnabled)
  109. ->Field("LdrColorGradingLut", &DisplayMapperConfigurationDescriptor::m_ldrColorGradingLut)
  110. ->Field("AcesParameterOverrides", &DisplayMapperConfigurationDescriptor::m_acesParameterOverrides)
  111. ;
  112. }
  113. if (auto* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
  114. {
  115. DisplayMapperOperationTypeReflect(*behaviorContext);
  116. }
  117. }
  118. void DisplayMapperPassData::Reflect(ReflectContext* context)
  119. {
  120. if (auto* serializeContext = azrtti_cast<SerializeContext*>(context))
  121. {
  122. serializeContext->Class<DisplayMapperPassData, Base>()
  123. ->Version(0)
  124. ->Field("DisplayMapperConfig", &DisplayMapperPassData::m_config)
  125. ->Field("MergeLdrGradingLut", &DisplayMapperPassData::m_mergeLdrGradingLut)
  126. ->Field("OutputTransformShaderOverride", &DisplayMapperPassData::m_outputTransformOverride)
  127. ;
  128. }
  129. }
  130. } // namespace RPI
  131. } // namespace AZ