3
0

DisplayMapperComponentController.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  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 "AtomLyIntegration/CommonFeatures/CoreLights/AreaLightBus.h"
  9. #include <AzCore/RTTI/BehaviorContext.h>
  10. #include <Atom/RPI.Public/Scene.h>
  11. #include <PostProcess/DisplayMapper/DisplayMapperComponentController.h>
  12. #include <Atom/Feature/ACES/AcesDisplayMapperFeatureProcessor.h>
  13. #include <Atom/Feature/DisplayMapper/DisplayMapperConfigurationDescriptor.h>
  14. namespace AZ
  15. {
  16. namespace Render
  17. {
  18. void DisplayMapperComponentController::Reflect(ReflectContext* context)
  19. {
  20. DisplayMapperComponentConfig::Reflect(context);
  21. if (auto* serializeContext = azrtti_cast<SerializeContext*>(context))
  22. {
  23. serializeContext->Class<DisplayMapperComponentController>()
  24. ->Version(0)
  25. ->Field("Configuration", &DisplayMapperComponentController::m_configuration);
  26. }
  27. if (AZ::BehaviorContext* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
  28. {
  29. behaviorContext->EBus<DisplayMapperComponentRequestBus>("DisplayMapperComponentRequestBus")
  30. ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
  31. ->Attribute(AZ::Script::Attributes::Category, "render")
  32. ->Attribute(AZ::Script::Attributes::Module, "render")
  33. // LoadPreset
  34. ->Event("LoadPreset", &DisplayMapperComponentRequestBus::Events::LoadPreset)
  35. // DisplayMapperOperationType
  36. ->Event("SetDisplayMapperOperationType", &DisplayMapperComponentRequestBus::Events::SetDisplayMapperOperationType)
  37. ->Event("GetDisplayMapperOperationType", &DisplayMapperComponentRequestBus::Events::GetDisplayMapperOperationType)
  38. ->VirtualProperty("DisplayMapperOperationType", "GetDisplayMapperOperationType", "SetDisplayMapperOperationType")
  39. // AcesParameterOverrides
  40. ->Event("SetAcesParameterOverrides", &DisplayMapperComponentRequestBus::Events::SetAcesParameterOverrides)
  41. ->Event("GetAcesParameterOverrides", &DisplayMapperComponentRequestBus::Events::GetAcesParameterOverrides)
  42. ->VirtualProperty("AcesParameterOverrides", "GetAcesParameterOverrides", "SetAcesParameterOverrides")
  43. // OverrideAcesParameters
  44. ->Event("SetOverrideAcesParameters", &DisplayMapperComponentRequestBus::Events::SetOverrideAcesParameters)
  45. ->Event("GetOverrideAcesParameters", &DisplayMapperComponentRequestBus::Events::GetOverrideAcesParameters)
  46. ->VirtualProperty("OverrideAcesParameters", "GetOverrideAcesParameters", "SetOverrideAcesParameters")
  47. // AlterSurround
  48. ->Event("SetAlterSurround", &DisplayMapperComponentRequestBus::Events::SetAlterSurround)
  49. ->Event("GetAlterSurround", &DisplayMapperComponentRequestBus::Events::GetAlterSurround)
  50. ->VirtualProperty("AlterSurround", "GetAlterSurround", "SetAlterSurround")
  51. // ApplyDesaturation
  52. ->Event("SetApplyDesaturation", &DisplayMapperComponentRequestBus::Events::SetApplyDesaturation)
  53. ->Event("GetApplyDesaturation", &DisplayMapperComponentRequestBus::Events::GetApplyDesaturation)
  54. ->VirtualProperty("ApplyDesaturation", "GetApplyDesaturation", "SetApplyDesaturation")
  55. // ApplyCATD60toD65
  56. ->Event("SetApplyCATD60toD65", &DisplayMapperComponentRequestBus::Events::SetApplyCATD60toD65)
  57. ->Event("GetApplyCATD60toD65", &DisplayMapperComponentRequestBus::Events::GetApplyCATD60toD65)
  58. ->VirtualProperty("ApplyCATD60toD65", "GetApplyCATD60toD65", "SetApplyCATD60toD65")
  59. // CinemaLimitsBlack
  60. ->Event("SetCinemaLimitsBlack", &DisplayMapperComponentRequestBus::Events::SetCinemaLimitsBlack)
  61. ->Event("GetCinemaLimitsBlack", &DisplayMapperComponentRequestBus::Events::GetCinemaLimitsBlack)
  62. ->VirtualProperty("CinemaLimitsBlack", "GetCinemaLimitsBlack", "SetCinemaLimitsBlack")
  63. // CinemaLimitsWhite
  64. ->Event("SetCinemaLimitsWhite", &DisplayMapperComponentRequestBus::Events::SetCinemaLimitsWhite)
  65. ->Event("GetCinemaLimitsWhite", &DisplayMapperComponentRequestBus::Events::GetCinemaLimitsWhite)
  66. ->VirtualProperty("CinemaLimitsWhite", "GetCinemaLimitsWhite", "SetCinemaLimitsWhite")
  67. // MinPoint
  68. ->Event("SetMinPoint", &DisplayMapperComponentRequestBus::Events::SetMinPoint)
  69. ->Event("GetMinPoint", &DisplayMapperComponentRequestBus::Events::GetMinPoint)
  70. ->VirtualProperty("MinPoint", "GetMinPoint", "SetMinPoint")
  71. // MidPoint
  72. ->Event("SetMidPoint", &DisplayMapperComponentRequestBus::Events::SetMidPoint)
  73. ->Event("GetMidPoint", &DisplayMapperComponentRequestBus::Events::GetMidPoint)
  74. ->VirtualProperty("MidPoint", "GetMidPoint", "SetMidPoint")
  75. // MaxPoint
  76. ->Event("SetMaxPoint", &DisplayMapperComponentRequestBus::Events::SetMaxPoint)
  77. ->Event("GetMaxPoint", &DisplayMapperComponentRequestBus::Events::GetMaxPoint)
  78. ->VirtualProperty("MaxPoint", "GetMaxPoint", "SetMaxPoint")
  79. // SurroundGamma
  80. ->Event("SetSurroundGamma", &DisplayMapperComponentRequestBus::Events::SetSurroundGamma)
  81. ->Event("GetSurroundGamma", &DisplayMapperComponentRequestBus::Events::GetSurroundGamma)
  82. ->VirtualProperty("SurroundGamma", "GetSurroundGamma", "SetSurroundGamma")
  83. // Gamma
  84. ->Event("SetGamma", &DisplayMapperComponentRequestBus::Events::SetGamma)
  85. ->Event("GetGamma", &DisplayMapperComponentRequestBus::Events::GetGamma)
  86. ->VirtualProperty("Gamma", "GetGamma", "SetGamma")
  87. ;
  88. }
  89. }
  90. void DisplayMapperComponentController::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
  91. {
  92. provided.push_back(AZ_CRC("ToneMapperService", 0xb8f814e8));
  93. }
  94. void DisplayMapperComponentController::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
  95. {
  96. incompatible.push_back(AZ_CRC("ToneMapperService", 0xb8f814e8));
  97. }
  98. void DisplayMapperComponentController::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
  99. {
  100. AZ_UNUSED(required);
  101. }
  102. DisplayMapperComponentController::DisplayMapperComponentController(const DisplayMapperComponentConfig& config)
  103. : m_configuration(config)
  104. {
  105. }
  106. void DisplayMapperComponentController::Activate(EntityId entityId)
  107. {
  108. m_entityId = entityId;
  109. DisplayMapperComponentRequestBus::Handler::BusConnect(m_entityId);
  110. }
  111. void DisplayMapperComponentController::Deactivate()
  112. {
  113. DisplayMapperComponentRequestBus::Handler::BusDisconnect(m_entityId);
  114. m_postProcessInterface = nullptr;
  115. m_entityId.SetInvalid();
  116. }
  117. void DisplayMapperComponentController::SetConfiguration(const DisplayMapperComponentConfig& config)
  118. {
  119. m_configuration = config;
  120. OnConfigChanged();
  121. }
  122. const DisplayMapperComponentConfig& DisplayMapperComponentController::GetConfiguration() const
  123. {
  124. return m_configuration;
  125. }
  126. void DisplayMapperComponentController::LoadPreset(OutputDeviceTransformType preset)
  127. {
  128. AcesParameterOverrides propertyOverrides;
  129. propertyOverrides.m_preset = preset;
  130. propertyOverrides.m_overrideDefaults = true;
  131. propertyOverrides.LoadPreset();
  132. SetAcesParameterOverrides(propertyOverrides);
  133. }
  134. void DisplayMapperComponentController::SetDisplayMapperOperationType(DisplayMapperOperationType displayMapperOperationType)
  135. {
  136. if (m_configuration.m_displayMapperOperation != displayMapperOperationType)
  137. {
  138. m_configuration.m_displayMapperOperation = displayMapperOperationType;
  139. OnConfigChanged();
  140. DisplayMapperComponentNotificationBus::Broadcast(
  141. &DisplayMapperComponentNotificationBus::Handler::OnDisplayMapperOperationTypeUpdated,
  142. m_configuration.m_displayMapperOperation);
  143. }
  144. }
  145. DisplayMapperOperationType DisplayMapperComponentController::GetDisplayMapperOperationType() const
  146. {
  147. return m_configuration.m_displayMapperOperation;
  148. }
  149. void DisplayMapperComponentController::SetAcesParameterOverrides(const AcesParameterOverrides& parameterOverrides)
  150. {
  151. m_configuration.m_acesParameterOverrides = parameterOverrides;
  152. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  153. {
  154. OnConfigChanged();
  155. }
  156. DisplayMapperComponentNotificationBus::Broadcast(
  157. &DisplayMapperComponentNotificationBus::Handler::OnAcesParameterOverridesUpdated,
  158. m_configuration.m_acesParameterOverrides);
  159. }
  160. const AcesParameterOverrides& DisplayMapperComponentController::GetAcesParameterOverrides() const
  161. {
  162. return m_configuration.m_acesParameterOverrides;
  163. }
  164. void DisplayMapperComponentController::SetOverrideAcesParameters(bool value)
  165. {
  166. if (m_configuration.m_acesParameterOverrides.m_overrideDefaults == value)
  167. {
  168. return; // prevents flickering when set via TrackView
  169. }
  170. m_configuration.m_acesParameterOverrides.m_overrideDefaults = value;
  171. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  172. {
  173. OnConfigChanged();
  174. }
  175. }
  176. bool DisplayMapperComponentController::GetOverrideAcesParameters() const
  177. {
  178. return m_configuration.m_acesParameterOverrides.m_overrideDefaults;
  179. }
  180. void DisplayMapperComponentController::SetAlterSurround(bool value)
  181. {
  182. if (m_configuration.m_acesParameterOverrides.m_alterSurround != value)
  183. {
  184. return; // prevents flickering when set via TrackView
  185. }
  186. m_configuration.m_acesParameterOverrides.m_alterSurround = value;
  187. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  188. {
  189. OnConfigChanged();
  190. }
  191. }
  192. bool DisplayMapperComponentController::GetAlterSurround() const
  193. {
  194. return m_configuration.m_acesParameterOverrides.m_alterSurround;
  195. }
  196. void DisplayMapperComponentController::SetApplyDesaturation(bool value)
  197. {
  198. if (m_configuration.m_acesParameterOverrides.m_applyDesaturation != value)
  199. {
  200. return; // prevents flickering when set via TrackView
  201. }
  202. m_configuration.m_acesParameterOverrides.m_applyDesaturation = value;
  203. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  204. {
  205. OnConfigChanged();
  206. }
  207. }
  208. bool DisplayMapperComponentController::GetApplyDesaturation() const
  209. {
  210. return m_configuration.m_acesParameterOverrides.m_applyDesaturation;
  211. }
  212. void DisplayMapperComponentController::SetApplyCATD60toD65(bool value)
  213. {
  214. if (m_configuration.m_acesParameterOverrides.m_applyCATD60toD65 != value)
  215. {
  216. return; // prevents flickering when set via TrackView
  217. }
  218. m_configuration.m_acesParameterOverrides.m_applyCATD60toD65 = value;
  219. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  220. {
  221. OnConfigChanged();
  222. }
  223. }
  224. bool DisplayMapperComponentController::GetApplyCATD60toD65() const
  225. {
  226. return m_configuration.m_acesParameterOverrides.m_applyCATD60toD65;
  227. }
  228. void DisplayMapperComponentController::SetCinemaLimitsBlack(float value)
  229. {
  230. m_configuration.m_acesParameterOverrides.m_cinemaLimitsBlack = value;
  231. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  232. {
  233. OnConfigChanged();
  234. }
  235. }
  236. float DisplayMapperComponentController::GetCinemaLimitsBlack() const
  237. {
  238. return m_configuration.m_acesParameterOverrides.m_cinemaLimitsBlack;
  239. }
  240. void DisplayMapperComponentController::SetCinemaLimitsWhite(float value)
  241. {
  242. m_configuration.m_acesParameterOverrides.m_cinemaLimitsWhite = value;
  243. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  244. {
  245. OnConfigChanged();
  246. }
  247. }
  248. float DisplayMapperComponentController::GetCinemaLimitsWhite() const
  249. {
  250. return m_configuration.m_acesParameterOverrides.m_cinemaLimitsWhite;
  251. }
  252. void DisplayMapperComponentController::SetMinPoint(float value)
  253. {
  254. m_configuration.m_acesParameterOverrides.m_minPoint = value;
  255. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  256. {
  257. OnConfigChanged();
  258. }
  259. }
  260. float DisplayMapperComponentController::GetMinPoint() const
  261. {
  262. return m_configuration.m_acesParameterOverrides.m_minPoint;
  263. }
  264. void DisplayMapperComponentController::SetMidPoint(float value)
  265. {
  266. m_configuration.m_acesParameterOverrides.m_midPoint = value;
  267. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  268. {
  269. OnConfigChanged();
  270. }
  271. }
  272. float DisplayMapperComponentController::GetMidPoint() const
  273. {
  274. return m_configuration.m_acesParameterOverrides.m_midPoint;
  275. }
  276. void DisplayMapperComponentController::SetMaxPoint(float value)
  277. {
  278. m_configuration.m_acesParameterOverrides.m_maxPoint = value;
  279. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  280. {
  281. OnConfigChanged();
  282. }
  283. }
  284. float DisplayMapperComponentController::GetMaxPoint() const
  285. {
  286. return m_configuration.m_acesParameterOverrides.m_maxPoint;
  287. }
  288. void DisplayMapperComponentController::SetSurroundGamma(float value)
  289. {
  290. m_configuration.m_acesParameterOverrides.m_surroundGamma = value;
  291. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  292. {
  293. OnConfigChanged();
  294. }
  295. }
  296. float DisplayMapperComponentController::GetSurroundGamma() const
  297. {
  298. return m_configuration.m_acesParameterOverrides.m_surroundGamma;
  299. }
  300. void DisplayMapperComponentController::SetGamma(float value)
  301. {
  302. m_configuration.m_acesParameterOverrides.m_gamma = value;
  303. if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
  304. {
  305. OnConfigChanged();
  306. }
  307. }
  308. float DisplayMapperComponentController::GetGamma() const
  309. {
  310. return m_configuration.m_acesParameterOverrides.m_gamma;
  311. }
  312. void DisplayMapperComponentController::OnConfigChanged()
  313. {
  314. // Register the configuration with the AcesDisplayMapperFeatureProcessor for this scene.
  315. DisplayMapperFeatureProcessorInterface* fp = AZ::RPI::Scene::GetFeatureProcessorForEntity<DisplayMapperFeatureProcessorInterface>(m_entityId);
  316. DisplayMapperConfigurationDescriptor desc;
  317. desc.m_operationType = m_configuration.m_displayMapperOperation;
  318. desc.m_ldrGradingLutEnabled = m_configuration.m_ldrColorGradingLutEnabled;
  319. desc.m_ldrColorGradingLut = m_configuration.m_ldrColorGradingLut;
  320. desc.m_acesParameterOverrides = m_configuration.m_acesParameterOverrides;
  321. fp->RegisterDisplayMapperConfiguration(desc);
  322. }
  323. } // namespace Render
  324. } // namespace AZ