无题
Render Graph 是现代渲染引擎的一个中间层,下接RHI层,上接渲染管线.
为什么使用Render Graph
传统渲染管线背景:
Render Graph 优势:
- 高效内存管理,只分配实际使用的资源 -一个pass的资源
- 自动处理同步点 -graph可以处理pass之间依赖
- 可维护性高 -pass高内聚,低耦合
名词
- Render Graph: 渲染图,管理 Pass DAG
- Pass: 一个完成的渲染过程,是Render Graph 的一个节点
主要原则
- Resource Haldles:
你无法直接处理资源,而是通过Handle来间接处理,如RTHandles,ComputeBuffers,RendererLists - 资源访问限制:
你只被允许在 Render Pass 的 Execution 中访问资源 - 显示Pass声明:
你必须明确每个 Pass 读取和写入的资源 - No Persistence
每次Excute之间,资源没有持久性,即上次创建的资源无法在下一次中使用 - 持久性资源解决办法
对于需要持久性的资源,你需要在Render Graph外部创建后导入.注意,Render Graph不负责他们的生命周期管理 - RTHadle的处理
由于使用RTHandle管理纹理资源, 这要求开发者了解如何在shader中正确设置他们
资源管理
Render Graph 只在需要时创建资源,在不需要时销毁资源.
也就是如果你使用 RenderGraph API 创建资源时,Render Graph 并不会立即创建该资源.相反,API 返回一个资源句柄,你可以使用这个句柄与所有 RenderGraph API 进行交互
Execution
Render Graph 的执行分为三个步骤. Render Graph 每帧都会这么做,以让 Render Graph 可以根据用户操作在帧与帧之间动态变化.
Setup
在这一步骤,你需要声明所有需要执行的 pass 和 每个 pass 使用的资源.
Compilation
这一步骤中, Render Graph 做了两件事情:
- 计算资源生命周期,在异步管道上应用合适的同步点
- 剔除无用通道
Execution
按顺序执行所有未被剔除的 Pass
在执行 Pass 前后, Render Graph 会自动创建与释放资源.
使用 Render Graph
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 VanishingBlog!