Files
HelloVulkan/Engine/include/Engine/Renderer/Passes/RenderPass.h
T
atdunbg 1d690067bd feat: IBL 预积分 GPU compute 化 + 环境资产入 Assets 层(动态切换)
CPU 逐像素卷积(venice 4k 阻塞 7.36s)→ 4 个 compute shader 一次性
提交:equirect→cube / irradiance / prefilter×5mip / BRDF LUT。
Cubemap 瘦身为纯资源持有类,生成职责移交 IblGenerator;
环境经 AssetManager 缓存(EnvRef),Renderer::SetEnvironment
动态换绑(RenderPass::OnEnvironmentChanged 广播)。
调试视图 +4:EnvCube / Irradiance / Prefilter / BRDF LUT。

性能前后对比(RTX 5060 Laptop,venice_dawn_1_4k.hdr):
- 改造前 CPU:7.36 s(主线程阻塞)
- 改造后 GPU:HDR decode 127-134ms + 资源 22-35ms + compute 17-19ms
  ≈ 165-190ms(约 40×);Neutral 兜底 ~6ms
- 运行中动态切换环境同量级(ms 级 GPU,decode 占大头)

冒烟:两构建目录 0 警告;运行期 0 validation(含两次环境切换 +
调试视图 9-12 轮播自动化验证)。
2026-09-24 13:23:59 +08:00

43 lines
1.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// Created by atdunbg on 2026/9/23.
//
// RenderPass:渲染 pass 对象基类(Unity ScriptableRenderPass 思路)。
//
// pass 自己负责两件事,框架(Renderer)不再手写"超级函数":
// Register —— 向 RenderGraph 声明资源使用 + 录制 lambda;
// 执行序由 RG 拓扑排序决定(writer 必先于 reader),
// 与注册顺序无关
// OnTargetsRebuilt —— RG 重编译(resize / vsync 切换)后重绑描述符
// (物理镜像按槽位可能全部换新)
//
// pass 之间不互相依赖:数据流只经 RG 资源句柄。新增效果 = 新增一个
// RenderPass 子类 + Renderer::BuildGraph 里注册一行,其它代码不动。
//
#ifndef HELLOVULKAN_RENDERPASS_H
#define HELLOVULKAN_RENDERPASS_H
#include <Engine/RenderGraph/RenderGraph.h>
namespace Engine {
class Cubemap;
}
namespace Engine::Passes {
class RenderPass {
public:
virtual ~RenderPass() = default;
virtual void Register(RG::RenderGraph& rg) = 0;
virtual void OnTargetsRebuilt(RG::RenderGraph& rg) { (void)rg; }
// 环境资产换绑(动态切换):引用环境描述符的 pass 重绑自己的 set。
// 默认无环境影响;env 恒非空(Renderer 有中性兜底)
virtual void OnEnvironmentChanged(const Cubemap* /*env*/) {}
};
} // namespace Engine::Passes
#endif //HELLOVULKAN_RENDERPASS_H