PR feedback

This commit is contained in:
mnaumov
2021-06-01 15:34:01 -07:00
parent ab45ea7efa
commit 38819c630a
4 changed files with 359 additions and 19 deletions
@@ -30,8 +30,67 @@ namespace AZ
virtual void LoadPreset(OutputDeviceTransformType preset) = 0;
//! Set display mapper type
virtual void SetDisplayMapperOperationType(DisplayMapperOperationType displayMapperOperationType) = 0;
//! Set custom ACES parameters for ACES mapping, display mapper must be set to Aces to see the difference
//! Get display mapper type
virtual DisplayMapperOperationType GetDisplayMapperOperationType() const = 0;
//! Set ACES parameter overrides for ACES mapping, display mapper must be set to Aces to see the difference
virtual void SetAcesParameterOverrides(const AcesParameterOverrides& parameterOverrides) = 0;
//! Get ACES parameter overrides
virtual const AcesParameterOverrides& GetAcesParameterOverrides() const = 0;
// Enable or disable ACES parameter overrides
virtual void SetOverrideAcesParameters(bool value) = 0;
// Check if ACES parameters are overriding default preset values
virtual bool GetOverrideAcesParameters() const = 0;
// Set gamma adjustment to compensate for dim surround
virtual void SetAlterSurround(bool value) = 0;
// Get gamma adjustment to compensate for dim surround
virtual bool GetAlterSurround() const = 0;
// Set desaturation to compensate for luminance difference
virtual void SetApplyDesaturation(bool value) = 0;
// Get desaturation to compensate for luminance difference
virtual bool GetApplyDesaturation() const = 0;
// Set color appearance transform (CAT) from ACES white point to assumed observer adapted white point
virtual void SetApplyCATD60toD65(bool value) = 0;
// Get color appearance transform (CAT) from ACES white point to assumed observer adapted white point
virtual bool GetApplyCATD60toD65() const = 0;
// Set reference black luminance value
virtual void SetCinemaLimitsBlack(float value) = 0;
// Get reference black luminance value
virtual float GetCinemaLimitsBlack() const = 0;
// Set reference white luminance value
virtual void SetCinemaLimitsWhite(float value) = 0;
// Get reference white luminance value
virtual float GetCinemaLimitsWhite() const = 0;
// Set min luminance value
virtual void SetMinPoint(float value) = 0;
// Get min luminance value
virtual float GetMinPoint() const = 0;
// Set mid luminance value
virtual void SetMidPoint(float value) = 0;
// Get mid luminance value
virtual float GetMidPoint() const = 0;
// Set max luminance value
virtual void SetMaxPoint(float value) = 0;
// Get max luminance value
virtual float GetMaxPoint() const = 0;
// Set gamma adjustment value
virtual void SetSurroundGamma(float value) = 0;
// Get gamma adjustment value
virtual float GetSurroundGamma() const = 0;
// Set optional gamma value that is applied as basic gamma curve OETF
virtual void SetGamma(float value) = 0;
// Get optional gamma value that is applied as basic gamma curve OETF
virtual float GetGamma() const = 0;
};
using DisplayMapperComponentRequestBus = EBus<DisplayMapperComponentRequests>;
@@ -40,7 +99,7 @@ namespace AZ
{
public:
//! Notifies that display mapper type changed
virtual void OntDisplayMapperOperationTypeUpdated([[maybe_unused]] const DisplayMapperOperationType& displayMapperOperationType)
virtual void OnDisplayMapperOperationTypeUpdated([[maybe_unused]] const DisplayMapperOperationType& displayMapperOperationType)
{
}
@@ -10,6 +10,8 @@
*
*/
#include "AtomLyIntegration/CommonFeatures/CoreLights/AreaLightBus.h"
#include <AzCore/RTTI/BehaviorContext.h>
#include <Atom/RPI.Public/Scene.h>
@@ -32,6 +34,69 @@ namespace AZ
->Version(0)
->Field("Configuration", &DisplayMapperComponentController::m_configuration);
}
if (AZ::BehaviorContext* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
{
behaviorContext->EBus<DisplayMapperComponentRequestBus>("DisplayMapperComponentRequestBus")
->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
->Attribute(AZ::Script::Attributes::Category, "render")
->Attribute(AZ::Script::Attributes::Module, "render")
// LoadPreset
->Event("LoadPreset", &DisplayMapperComponentRequestBus::Events::LoadPreset)
// DisplayMapperOperationType
->Event("SetDisplayMapperOperationType", &DisplayMapperComponentRequestBus::Events::SetDisplayMapperOperationType)
->Event("GetDisplayMapperOperationType", &DisplayMapperComponentRequestBus::Events::GetDisplayMapperOperationType)
->VirtualProperty("DisplayMapperOperationType", "GetDisplayMapperOperationType", "SetDisplayMapperOperationType")
// AcesParameterOverrides
->Event("SetAcesParameterOverrides", &DisplayMapperComponentRequestBus::Events::SetAcesParameterOverrides)
->Event("GetAcesParameterOverrides", &DisplayMapperComponentRequestBus::Events::GetAcesParameterOverrides)
->VirtualProperty("AcesParameterOverrides", "GetAcesParameterOverrides", "SetAcesParameterOverrides")
// OverrideAcesParameters
->Event("SetOverrideAcesParameters", &DisplayMapperComponentRequestBus::Events::SetOverrideAcesParameters)
->Event("GetOverrideAcesParameters", &DisplayMapperComponentRequestBus::Events::GetOverrideAcesParameters)
->VirtualProperty("OverrideAcesParameters", "GetOverrideAcesParameters", "SetOverrideAcesParameters")
// AlterSurround
->Event("SetAlterSurround", &DisplayMapperComponentRequestBus::Events::SetAlterSurround)
->Event("GetAlterSurround", &DisplayMapperComponentRequestBus::Events::GetAlterSurround)
->VirtualProperty("AlterSurround", "GetAlterSurround", "SetAlterSurround")
// ApplyDesaturation
->Event("SetApplyDesaturation", &DisplayMapperComponentRequestBus::Events::SetApplyDesaturation)
->Event("GetApplyDesaturation", &DisplayMapperComponentRequestBus::Events::GetApplyDesaturation)
->VirtualProperty("ApplyDesaturation", "GetApplyDesaturation", "SetApplyDesaturation")
// ApplyCATD60toD65
->Event("SetApplyCATD60toD65", &DisplayMapperComponentRequestBus::Events::SetApplyCATD60toD65)
->Event("GetApplyCATD60toD65", &DisplayMapperComponentRequestBus::Events::GetApplyCATD60toD65)
->VirtualProperty("ApplyCATD60toD65", "GetApplyCATD60toD65", "SetApplyCATD60toD65")
// CinemaLimitsBlack
->Event("SetCinemaLimitsBlack", &DisplayMapperComponentRequestBus::Events::SetCinemaLimitsBlack)
->Event("GetCinemaLimitsBlack", &DisplayMapperComponentRequestBus::Events::GetCinemaLimitsBlack)
->VirtualProperty("CinemaLimitsBlack", "GetCinemaLimitsBlack", "SetCinemaLimitsBlack")
// CinemaLimitsWhite
->Event("SetCinemaLimitsWhite", &DisplayMapperComponentRequestBus::Events::SetCinemaLimitsWhite)
->Event("GetCinemaLimitsWhite", &DisplayMapperComponentRequestBus::Events::GetCinemaLimitsWhite)
->VirtualProperty("CinemaLimitsWhite", "GetCinemaLimitsWhite", "SetCinemaLimitsWhite")
// MinPoint
->Event("SetMinPoint", &DisplayMapperComponentRequestBus::Events::SetMinPoint)
->Event("GetMinPoint", &DisplayMapperComponentRequestBus::Events::GetMinPoint)
->VirtualProperty("MinPoint", "GetMinPoint", "SetMinPoint")
// MidPoint
->Event("SetMidPoint", &DisplayMapperComponentRequestBus::Events::SetMidPoint)
->Event("GetMidPoint", &DisplayMapperComponentRequestBus::Events::GetMidPoint)
->VirtualProperty("MidPoint", "GetMidPoint", "SetMidPoint")
// MaxPoint
->Event("SetMaxPoint", &DisplayMapperComponentRequestBus::Events::SetMaxPoint)
->Event("GetMaxPoint", &DisplayMapperComponentRequestBus::Events::GetMaxPoint)
->VirtualProperty("MaxPoint", "GetMaxPoint", "SetMaxPoint")
// SurroundGamma
->Event("SetSurroundGamma", &DisplayMapperComponentRequestBus::Events::SetSurroundGamma)
->Event("GetSurroundGamma", &DisplayMapperComponentRequestBus::Events::GetSurroundGamma)
->VirtualProperty("SurroundGamma", "GetSurroundGamma", "SetSurroundGamma")
// Gamma
->Event("SetGamma", &DisplayMapperComponentRequestBus::Events::SetGamma)
->Event("GetGamma", &DisplayMapperComponentRequestBus::Events::GetGamma)
->VirtualProperty("Gamma", "GetGamma", "SetGamma")
;
}
}
void DisplayMapperComponentController::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
@@ -92,11 +157,16 @@ namespace AZ
m_configuration.m_displayMapperOperation = displayMapperOperationType;
OnConfigChanged();
DisplayMapperComponentNotificationBus::Broadcast(
&DisplayMapperComponentNotificationBus::Handler::OntDisplayMapperOperationTypeUpdated,
&DisplayMapperComponentNotificationBus::Handler::OnDisplayMapperOperationTypeUpdated,
m_configuration.m_displayMapperOperation);
}
}
DisplayMapperOperationType DisplayMapperComponentController::GetDisplayMapperOperationType() const
{
return m_configuration.m_displayMapperOperation;
}
void DisplayMapperComponentController::SetAcesParameterOverrides(const AcesParameterOverrides& parameterOverrides)
{
m_configuration.m_acesParameterOverrides = parameterOverrides;
@@ -109,6 +179,165 @@ namespace AZ
m_configuration.m_acesParameterOverrides);
}
const AcesParameterOverrides& DisplayMapperComponentController::GetAcesParameterOverrides() const
{
return m_configuration.m_acesParameterOverrides;
}
void DisplayMapperComponentController::SetOverrideAcesParameters(bool value)
{
m_configuration.m_acesParameterOverrides.m_overrideDefaults = value;
if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
{
OnConfigChanged();
}
}
bool DisplayMapperComponentController::GetOverrideAcesParameters() const
{
return m_configuration.m_acesParameterOverrides.m_overrideDefaults;
}
void DisplayMapperComponentController::SetAlterSurround(bool value)
{
m_configuration.m_acesParameterOverrides.m_alterSurround = value;
if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
{
OnConfigChanged();
}
}
bool DisplayMapperComponentController::GetAlterSurround() const
{
return m_configuration.m_acesParameterOverrides.m_alterSurround;
}
void DisplayMapperComponentController::SetApplyDesaturation(bool value)
{
m_configuration.m_acesParameterOverrides.m_applyDesaturation = value;
if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
{
OnConfigChanged();
}
}
bool DisplayMapperComponentController::GetApplyDesaturation() const
{
return m_configuration.m_acesParameterOverrides.m_applyDesaturation;
}
void DisplayMapperComponentController::SetApplyCATD60toD65(bool value)
{
m_configuration.m_acesParameterOverrides.m_applyCATD60toD65 = value;
if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
{
OnConfigChanged();
}
}
bool DisplayMapperComponentController::GetApplyCATD60toD65() const
{
return m_configuration.m_acesParameterOverrides.m_applyCATD60toD65;
}
void DisplayMapperComponentController::SetCinemaLimitsBlack(float value)
{
m_configuration.m_acesParameterOverrides.m_cinemaLimitsBlack = value;
if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
{
OnConfigChanged();
}
}
float DisplayMapperComponentController::GetCinemaLimitsBlack() const
{
return m_configuration.m_acesParameterOverrides.m_cinemaLimitsBlack;
}
void DisplayMapperComponentController::SetCinemaLimitsWhite(float value)
{
m_configuration.m_acesParameterOverrides.m_cinemaLimitsWhite = value;
if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
{
OnConfigChanged();
}
}
float DisplayMapperComponentController::GetCinemaLimitsWhite() const
{
return m_configuration.m_acesParameterOverrides.m_cinemaLimitsWhite;
}
void DisplayMapperComponentController::SetMinPoint(float value)
{
m_configuration.m_acesParameterOverrides.m_minPoint = value;
if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
{
OnConfigChanged();
}
}
float DisplayMapperComponentController::GetMinPoint() const
{
return m_configuration.m_acesParameterOverrides.m_minPoint;
}
void DisplayMapperComponentController::SetMidPoint(float value)
{
m_configuration.m_acesParameterOverrides.m_midPoint = value;
if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
{
OnConfigChanged();
}
}
float DisplayMapperComponentController::GetMidPoint() const
{
return m_configuration.m_acesParameterOverrides.m_midPoint;
}
void DisplayMapperComponentController::SetMaxPoint(float value)
{
m_configuration.m_acesParameterOverrides.m_maxPoint = value;
if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
{
OnConfigChanged();
}
}
float DisplayMapperComponentController::GetMaxPoint() const
{
return m_configuration.m_acesParameterOverrides.m_maxPoint;
}
void DisplayMapperComponentController::SetSurroundGamma(float value)
{
m_configuration.m_acesParameterOverrides.m_surroundGamma = value;
if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
{
OnConfigChanged();
}
}
float DisplayMapperComponentController::GetSurroundGamma() const
{
return m_configuration.m_acesParameterOverrides.m_surroundGamma;
}
void DisplayMapperComponentController::SetGamma(float value)
{
m_configuration.m_acesParameterOverrides.m_gamma = value;
if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
{
OnConfigChanged();
}
}
float DisplayMapperComponentController::GetGamma() const
{
return m_configuration.m_acesParameterOverrides.m_gamma;
}
void DisplayMapperComponentController::OnConfigChanged()
{
// Register the configuration with the AcesDisplayMapperFeatureProcessor for this scene.
@@ -51,7 +51,31 @@ namespace AZ
//! DisplayMapperComponentRequestBus::Handler overrides...
void LoadPreset(OutputDeviceTransformType preset) override;
void SetDisplayMapperOperationType(DisplayMapperOperationType displayMapperOperationType) override;
DisplayMapperOperationType GetDisplayMapperOperationType() const override;
void SetAcesParameterOverrides(const AcesParameterOverrides& parameterOverrides) override;
const AcesParameterOverrides& GetAcesParameterOverrides() const override;
void SetOverrideAcesParameters(bool value) override;
bool GetOverrideAcesParameters() const override;
void SetAlterSurround(bool value) override;
bool GetAlterSurround() const override;
void SetApplyDesaturation(bool value) override;
bool GetApplyDesaturation() const override;
void SetApplyCATD60toD65(bool value) override;
bool GetApplyCATD60toD65() const override;
void SetCinemaLimitsBlack(float value) override;
float GetCinemaLimitsBlack() const override;
void SetCinemaLimitsWhite(float value) override;
float GetCinemaLimitsWhite() const override;
void SetMinPoint(float value) override;
float GetMinPoint() const override;
void SetMidPoint(float value) override;
float GetMidPoint() const override;
void SetMaxPoint(float value) override;
float GetMaxPoint() const override;
void SetSurroundGamma(float value) override;
float GetSurroundGamma() const override;
void SetGamma(float value) override;
float GetGamma() const override;
private:
AZ_DISABLE_COPY(DisplayMapperComponentController);
@@ -54,63 +54,89 @@ namespace AZ
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
->Attribute(AZ::Edit::Attributes::AutoExpand, true)
// m_overrideDefaults
->DataElement(
AZ::Edit::UIHandlers::CheckBox, &AcesParameterOverrides::m_overrideDefaults, "Override Defaults",
"When enabled allows parameter overrides for ACES configuration")
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::ValuesOnly)
// m_alterSurround
->DataElement(
AZ::Edit::UIHandlers::CheckBox, &AcesParameterOverrides::m_alterSurround, "Alter Surround",
"Apply gamma adjustment to compensate for dim surround")
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::ValuesOnly)
// m_applyDesaturation
->DataElement(
AZ::Edit::UIHandlers::CheckBox, &AcesParameterOverrides::m_applyDesaturation, "Alter Desaturation",
"Apply desaturation to compensate for luminance difference")
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::ValuesOnly)
// m_applyCATD60toD65
->DataElement(
AZ::Edit::UIHandlers::CheckBox, &AcesParameterOverrides::m_applyCATD60toD65, "Alter CAT D60 to D65",
"Apply Color appearance transform (CAT) from ACES white point to assumed observer adapted white point")
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::ValuesOnly)
// m_cinemaLimitsBlack
->DataElement(
Edit::UIHandlers::Default, &AcesParameterOverrides::m_cinemaLimitsBlack,
Edit::UIHandlers::Slider, &AcesParameterOverrides::m_cinemaLimitsBlack,
"Cinema Limit (black)",
"Reference black luminance value")
->Attribute(AZ::Edit::Attributes::Min, 0.02f)
->Attribute(AZ::Edit::Attributes::Max, &AcesParameterOverrides::m_cinemaLimitsWhite)
->Attribute(AZ::Edit::Attributes::Step, 0.005f)
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::ValuesOnly)
// m_cinemaLimitsWhite
->DataElement(
Edit::UIHandlers::Default, &AcesParameterOverrides::m_cinemaLimitsWhite,
Edit::UIHandlers::Slider, &AcesParameterOverrides::m_cinemaLimitsWhite,
"Cinema Limit (white)",
"Reference white luminance value")
->Attribute(AZ::Edit::Attributes::Min, &AcesParameterOverrides::m_cinemaLimitsBlack)
->Attribute(AZ::Edit::Attributes::Max, 4000)
->Attribute(AZ::Edit::Attributes::Max, 4000.f)
->Attribute(AZ::Edit::Attributes::Step, 0.005f)
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::ValuesOnly)
// m_minPoint
->DataElement(
Edit::UIHandlers::Vector2, &AcesParameterOverrides::m_minPoint, "Min Point (luminance)",
Edit::UIHandlers::Slider, &AcesParameterOverrides::m_minPoint, "Min Point (luminance)",
"Linear extension below this")
->Attribute(AZ::Edit::Attributes::Min, 0.002f)
->Attribute(AZ::Edit::Attributes::Max, &AcesParameterOverrides::m_midPoint)
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::ValuesOnly)
->DataElement(
Edit::UIHandlers::Vector2, &AcesParameterOverrides::m_midPoint, "Mid Point (luminance)", "Middle gray")
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::AttributesAndValues)
// m_midPoint
->DataElement(Edit::UIHandlers::Slider, &AcesParameterOverrides::m_midPoint,
"Mid Point (luminance)", "Middle gray")
->Attribute(AZ::Edit::Attributes::Min, &AcesParameterOverrides::m_minPoint)
->Attribute(AZ::Edit::Attributes::Max, &AcesParameterOverrides::m_maxPoint)
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::ValuesOnly)
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::AttributesAndValues)
// m_maxPoint
->DataElement(
Edit::UIHandlers::Vector2, &AcesParameterOverrides::m_maxPoint, "Max Point (luminance)",
Edit::UIHandlers::Slider, &AcesParameterOverrides::m_maxPoint, "Max Point (luminance)",
"Linear extension above this")
->Attribute(AZ::Edit::Attributes::Min, &AcesParameterOverrides::m_midPoint)
->Attribute(AZ::Edit::Attributes::Max, 4000)
->Attribute(AZ::Edit::Attributes::Max, 4000.f)
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::AttributesAndValues)
// m_surroundGamma
->DataElement(
AZ::Edit::UIHandlers::Slider, &AcesParameterOverrides::m_surroundGamma, "Surround Gamma",
"Gamma adjustment to be applied to compensate for the condition of the viewing environment")
->Attribute(AZ::Edit::Attributes::Min, 0.6f)
->Attribute(AZ::Edit::Attributes::Max, 1.2f)
->Attribute(AZ::Edit::Attributes::Step, 0.005f)
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::ValuesOnly)
// m_gamma
->DataElement(
AZ::Edit::UIHandlers::Default, &AcesParameterOverrides::m_surroundGamma, "Surround Gamma",
"Gamma adjustment to be applied to compensate for the condition of the viewing environment")
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::ValuesOnly)
->DataElement(
AZ::Edit::UIHandlers::Default, &AcesParameterOverrides::m_gamma, "Gamma",
AZ::Edit::UIHandlers::Slider, &AcesParameterOverrides::m_gamma, "Gamma",
"Optional gamma value that is applied as basic gamma curve OETF")
->Attribute(AZ::Edit::Attributes::Min, 0.2f)
->Attribute(AZ::Edit::Attributes::Max, 4.0f)
->Attribute(AZ::Edit::Attributes::Step, 0.005f)
->Attribute(Edit::Attributes::ChangeNotify, Edit::PropertyRefreshLevels::ValuesOnly)
// Load preset group
@@ -154,6 +180,8 @@ namespace AZ
if (auto behaviorContext = azrtti_cast<BehaviorContext*>(context))
{
behaviorContext->Class<DisplayMapperComponent>()->RequestBus("DisplayMapperComponentRequestBus");
behaviorContext->ConstantProperty("EditorDisplayMapperComponentTypeId", BehaviorConstant(Uuid(EditorDisplayMapperComponentTypeId)))
->Attribute(AZ::Script::Attributes::Module, "render")
->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation);