| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /*
- * 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/Math/Vector2.h>
- #include <AzCore/Math/Vector3.h>
- #include <AzCore/RTTI/ReflectContext.h>
- #include <Atom/RHI.Reflect/ShaderResourceGroupLayoutDescriptor.h>
- #include <Atom/RPI.Public/Shader/Shader.h>
- #include <Atom/RPI.Public/Shader/ShaderResourceGroup.h>
- #include <Atom/RPI.Public/Image/StreamingImage.h>
- #include <Atom/Feature/ParamMacros/ParamMacrosHowTo.inl> // for education purposes
- #include <Atom/Feature/ScreenSpace/DeferredFogSettingsInterface.h>
- #include <PostProcess/PostProcessBase.h>
- namespace AZ
- {
- namespace Render
- {
- class PostProcessSettings;
- // The post process sub-settings class for the exposure control feature over
- // full screen deferred fog.
- // The fog is calculated using the linear depth and turbulence texture with two blended
- // octaves that emulate the fog thickness and motion along the view ray direction.
- //
- // [GFX TODO] most methods in this class can be auto generated using a reflection mechanism
- // based on the PerPass Srg. Currently we don't have such a reflection system in place
- // and so, a temporary approach demonstrating partial reflection through preprocessor
- // macros is used.
- class DeferredFogSettings final :
- public DeferredFogSettingsInterface,
- public PostProcessBase
- {
- friend class DeferredFogPass;
- friend class PostProcessSettings;
- friend class PostProcessFeatureProcessor;
- public:
- AZ_RTTI(DeferredFogSettings, "{FD822CC5-4E7B-4471-AA7D-1FCDF6CAC979}",
- AZ::Render::DeferredFogSettingsInterface, AZ::Render::PostProcessBase);
- AZ_CLASS_ALLOCATOR(AZ::Render::DeferredFogSettings, SystemAllocator);
- DeferredFogSettings(PostProcessFeatureProcessor* featureProcessor);
- DeferredFogSettings();
- ~DeferredFogSettings() = default;
- // DeferredFogSettingsInterface overrides...
- void OnSettingsChanged() override;
- bool GetSettingsNeedUpdate()
- {
- return m_needUpdate;
- }
- void SetSettingsNeedUpdate(bool needUpdate)
- {
- m_needUpdate = needUpdate;
- }
- void SetEnabled(bool value) override;
- bool GetEnabled() const override
- {
- return m_enabled;
- }
- void SetInitialized(bool isInitialized) override
- {
- m_isInitialized = isInitialized;
- }
- bool IsInitialized() override
- {
- return m_isInitialized;
- }
- void SetUseNoiseTextureShaderOption(bool value) override
- {
- m_useNoiseTextureShaderOption = value;
- }
- bool GetUseNoiseTextureShaderOption() override
- {
- return m_useNoiseTextureShaderOption;
- }
- void SetEnableFogLayerShaderOption(bool value) override
- {
- m_enableFogLayerShaderOption = value;
- }
- bool GetEnableFogLayerShaderOption() override
- {
- return m_enableFogLayerShaderOption;
- }
- // Called by the post effects feature processor for doing per frame prep if required
- void Simulate([[maybe_unused]]float deltaTime) {};
- // Applies settings from this onto target using override settings and passed alpha value for blending
- void ApplySettingsTo(DeferredFogSettings* target, float alpha) const;
- Data::Instance<RPI::StreamingImage> LoadStreamingImage(const char* textureFilePath, const char* sampleName);
- //---------------------------------------------------------
- // Generate Get / Set override methods
- #define AZ_GFX_COMMON_PARAM(ValueType, Name, MemberName, DefaultValue) \
- ValueType Get##Name() const override; \
- void Set##Name(ValueType val) override; \
- #include <Atom/Feature/ParamMacros/MapParamCommon.inl>
- #include <Atom/Feature/ScreenSpace/DeferredFogParams.inl>
- #include <Atom/Feature/ParamMacros/EndParams.inl>
- private:
- //---------------------------------------------------------
-
- // SRG constants
- #define AZ_GFX_COMMON_PARAM(ValueType, Name, MemberName, DefaultValue) \
- ValueType MemberName = DefaultValue; \
- #include <Atom/Feature/ParamMacros/MapParamCommon.inl>
- #include <Atom/Feature/ScreenSpace/DeferredFogParams.inl>
- #include <Atom/Feature/ParamMacros/EndParams.inl>
- //---------------------------------------------------------
- // SRG constants binding indices
- #define AZ_GFX_COMMON_PARAM(ValueType, Name, MemberName, DefaultValue) \
- RHI::ShaderInputConstantIndex MemberName##SrgIndex; \
- #include <Atom/Feature/ParamMacros/MapParamCommon.inl>
- // Change the handling for texture handles
- #undef AZ_GFX_TEXTURE2D_PARAM
- #define AZ_GFX_TEXTURE2D_PARAM(Name, MemberName, DefaultValue) \
- RHI::ShaderInputImageIndex MemberName##SrgIndex; \
- #include <Atom/Feature/ScreenSpace/DeferredFogParams.inl>
- #include <Atom/Feature/ParamMacros/EndParams.inl>
- //---------------------------------------------------------
- // Generate all Image members instances
- // Set all macros to be empty, but override the texture for defining image members
- #include <Atom/Feature/ParamMacros/MapParamEmpty.inl>
- // Macro to replace only the image macro for defining only image resources
- #undef AZ_GFX_TEXTURE2D_PARAM
- #define AZ_GFX_TEXTURE2D_PARAM(Name, MemberName, DefaultValue) \
- Data::Instance<AZ::RPI::Image> MemberName##Image; \
- #include <Atom/Feature/ScreenSpace/DeferredFogParams.inl>
- #include <Atom/Feature/ParamMacros/EndParams.inl>
- PostProcessSettings* m_parentSettings = nullptr;
- // 'm_enabled' indicates if the pass should be enabled. By default this is set to true since if the
- // pass is data driven enabled, the default settings should not disable it. If it is driven by
- // an engine component, these settings will be replaced by the component's settings controlled by
- // the user.
- bool m_enabled = true;
- // Indication if the SRG indices were set
- bool m_isInitialized = false;
- // Indicates that the srg indices were set
- bool m_needUpdate = true;
- bool m_useNoiseTextureShaderOption = true;
- bool m_enableFogLayerShaderOption = true;
- };
- }
- }
|