90845313fb
* Fixed log2 shaper equations. Added bspline sampling for lut. Added options for custom log2 or linear lut with custom exposure ranges. Signed-off-by: Ken Pruiksma <pruiksma@amazon.com> * Added support for PQ shaper. Added shader option & cvar for lut sampling quality. Fixed issues in the blend lut shader that were causing considerable quality loss. No longer always changing to the log2 1000 nit shaper when blending luts - if the source luts all use the same shaper, keep using that shaper in the blended lut. Signed-off-by: Ken Pruiksma <pruiksma@amazon.com> * Fixed an integer -> float Signed-off-by: Ken Pruiksma <pruiksma@amazon.com> * Minor PR reveiw updates Signed-off-by: Ken Pruiksma <pruiksma@amazon.com>
105 lines
3.9 KiB
C++
105 lines
3.9 KiB
C++
/*
|
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
*
|
|
*/
|
|
#pragma once
|
|
|
|
#include <AzCore/Memory/SystemAllocator.h>
|
|
#include <AzCore/std/containers/unordered_map.h>
|
|
|
|
#include <AzFramework/Windowing/WindowBus.h>
|
|
|
|
#include <Atom/RHI/CommandList.h>
|
|
#include <Atom/RHI/DrawItem.h>
|
|
#include <Atom/RHI/ScopeProducer.h>
|
|
|
|
#include <Atom/RPI.Reflect/Shader/ShaderVariantKey.h>
|
|
#include <Atom/RPI.Public/Pass/FullscreenTrianglePass.h>
|
|
#include <Atom/RPI.Public/Shader/Shader.h>
|
|
#include <Atom/RPI.Public/Shader/ShaderResourceGroup.h>
|
|
|
|
#include <Atom/Feature/ACES/AcesDisplayMapperFeatureProcessor.h>
|
|
|
|
#include <PostProcessing/PostProcessingShaderOptionBase.h>
|
|
|
|
namespace AZ
|
|
{
|
|
namespace Render
|
|
{
|
|
static const char* const LookModificationTransformPassTemplateName{ "LookModificationTransformTemplate" };
|
|
|
|
/**
|
|
* The look modification composite pass. If color grading LUTs are enabled, this pass will apply the blended LUT.
|
|
*/
|
|
class LookModificationCompositePass
|
|
: public AZ::RPI::FullscreenTrianglePass
|
|
, public PostProcessingShaderOptionBase
|
|
{
|
|
public:
|
|
AZ_RTTI(LookModificationCompositePass, "{D7DF3E8A-B642-4D51-ABC2-ADB2B60FCE1D}", AZ::RPI::FullscreenTrianglePass);
|
|
AZ_CLASS_ALLOCATOR(LookModificationCompositePass, SystemAllocator, 0);
|
|
|
|
enum class SampleQuality : uint8_t
|
|
{
|
|
Linear = 0,
|
|
BSpline7Tap = 1,
|
|
BSpline19Tap = 2,
|
|
};
|
|
|
|
virtual ~LookModificationCompositePass() = default;
|
|
|
|
//! Creates a LookModificationPass
|
|
static RPI::Ptr<LookModificationCompositePass> Create(const RPI::PassDescriptor& descriptor);
|
|
|
|
//! Set whether exposure control is enabled
|
|
void SetExposureControlEnabled(bool enabled);
|
|
|
|
//! Set shaper parameters
|
|
void SetShaperParameters(const ShaperParams& shaperParams);
|
|
|
|
void SetSampleQuality(SampleQuality sampleQuality);
|
|
|
|
protected:
|
|
LookModificationCompositePass(const RPI::PassDescriptor& descriptor);
|
|
|
|
//! Pass behavior overrides
|
|
void InitializeInternal() override;
|
|
void FrameBeginInternal(FramePrepareParams params) final;
|
|
|
|
private:
|
|
void InitializeShaderVariant();
|
|
void UpdateCurrentShaderVariant();
|
|
|
|
// Scope producer functions...
|
|
void CompileResources(const RHI::FrameGraphCompileContext& context) override;
|
|
void BuildCommandListInternal(const RHI::FrameGraphExecuteContext& context) override;
|
|
|
|
void UpdateExposureFeatureState();
|
|
void UpdateLookModificationFeatureState();
|
|
|
|
void SetColorGradingLutEnabled(bool enabled);
|
|
|
|
bool m_exposureControlEnabled = false;
|
|
bool m_colorGradingLutEnabled = false;
|
|
SampleQuality m_sampleQuality = SampleQuality::Linear;
|
|
|
|
Render::DisplayMapperLut m_blendedColorGradingLut;
|
|
Render::ShaperParams m_colorGradingShaperParams;
|
|
|
|
const AZ::Name m_exposureShaderVariantOptionName{ "o_enableExposureControlFeature" };
|
|
const AZ::Name m_colorGradingShaderVariantOptionName{ "o_enableColorGradingLut" };
|
|
const AZ::Name m_lutSampleQualityShaderVariantOptionName{ "o_lutSampleQuality" };
|
|
|
|
bool m_needToUpdateShaderVariant = true;
|
|
|
|
RHI::ShaderInputNameIndex m_shaderColorGradingLutImageIndex = "m_gradingLut";
|
|
RHI::ShaderInputNameIndex m_shaderColorGradingShaperTypeIndex = "m_shaperType";
|
|
RHI::ShaderInputNameIndex m_shaderColorGradingShaperBiasIndex = "m_shaperBias";
|
|
RHI::ShaderInputNameIndex m_shaderColorGradingShaperScaleIndex = "m_shaperScale";
|
|
};
|
|
} // namespace Render
|
|
} // namespace AZ
|