三个运行时开关(Shadows/TAA/Bloom)与 9 种调试视图(Final/ TemporalDiff/HDR/TAAColor/Bloom/Velocity/ShadowMap0-2)。 统一设计:开关状态收敛 FrameSceneData 契约,SceneRenderer 唯一 写入、各 pass 只读(零虚接口路由);调试视图经 tonemap push int 路由已绑定的中间目标(声明超集、运行时零重绑);HDR 域 资源过同一 tonemap 保证观感可比。 - Shadows:ShadowPass lambda 空转 + frag cascadeSplits.w 短路 - TAA:alpha=0 直通 + SceneRenderer 停投影抖动(同一持有者同步) - Bloom:3 子 pass 空转 + tonemap 强度归零 - Renderer 门面 Get/Set 转发,App ImGui 3 Checkbox + Combo - PostProcessParams 瘦身为纯数值参数,showTemporalDiff 被取缔
48 lines
1.5 KiB
C++
48 lines
1.5 KiB
C++
//
|
||
// Created by atdunbg on 2026/9/23.
|
||
//
|
||
// BloomPass:Extract(HDR 软阈值)→ BlurH → BlurV,全部半分辨率。
|
||
// 一个"效果"对应多个 RG pass 的例子(Unity 的一个 ScriptableRenderPass
|
||
// 常含多个 PassEvent 阶段,同构)。
|
||
//
|
||
|
||
#ifndef HELLOVULKAN_BLOOMPASS_H
|
||
#define HELLOVULKAN_BLOOMPASS_H
|
||
|
||
#include <Engine/Renderer/Passes/RenderPass.h>
|
||
#include <Engine/Renderer/Passes/FullscreenGpu.h>
|
||
#include <Engine/Renderer/SceneTypes.h>
|
||
#include <vulkan/vulkan.hpp>
|
||
#include <vector>
|
||
|
||
namespace Engine::Passes {
|
||
|
||
class BloomPass final : public RenderPass {
|
||
public:
|
||
BloomPass(FullscreenGpu& gpu, PostProcessParams& params,
|
||
FrameSceneData& frame,
|
||
RG::TextureHandle hdrColor,
|
||
RG::TextureHandle bloomA, RG::TextureHandle bloomB);
|
||
~BloomPass() override = default;
|
||
|
||
void Register(RG::RenderGraph& rg) override;
|
||
void OnTargetsRebuilt(RG::RenderGraph& rg) override;
|
||
|
||
private:
|
||
FullscreenGpu& m_Gpu;
|
||
PostProcessParams& m_Params;
|
||
FrameSceneData& m_Frame; // bloomEnabled 开关(帧契约)
|
||
RG::TextureHandle m_HDR;
|
||
RG::TextureHandle m_A; // 提取 + 垂直模糊结果
|
||
RG::TextureHandle m_B; // 水平模糊中间结果
|
||
|
||
// per-slot 输入描述符
|
||
std::vector<vk::DescriptorSet> m_ExtractSets;
|
||
std::vector<vk::DescriptorSet> m_BlurHSets;
|
||
std::vector<vk::DescriptorSet> m_BlurVSets;
|
||
};
|
||
|
||
} // namespace Engine::Passes
|
||
|
||
#endif //HELLOVULKAN_BLOOMPASS_H
|