由于本人才疏学浅,翻译难免有误,望各位不吝惜指正。
感谢两位作者,今天为大家分享使用Vulkan的renderpass加速移动端延迟渲染。
内容
- multipass是什么?
- multipass可以做什么?
- 驱动可以做什么
- 开发者可以做什么
- 临时图像和LAZILY内存分配
- 案例
- Baseline
- Sponza
- Lofoten
multipass是什么?
- 一个renderpass可以有多个subpass
- subpass之间可以设定依赖关系
- render pass的关系可以用图表示
- subpass可以只使用附着的一个子集
Vulkan对延迟渲染的提升
- 经典的延迟渲染算法包含两个render pass
- G-Buffer pass,渲染4张纹理
- Lighting pass,读取G-Buffer,进行光照着色
- Lighting pass只读取了gl_FragCoord位置处的G-Buffer数据
- 考虑使用Vulkan的multipass来实现延迟渲染
- 需要两个subpass
- 需要使用的依赖
- COLOR | DEPTH -> INPUT_ATTACHMENT | COLOR | DEPTH_READ
- VK_DEPENDENCY_BY_REGION_BIT
Tile-based GPU
- Tile-based GPU会将一个render pass的所有primitive按tile打包
- 在片段处理阶段,一次渲染一个tile
- 硬件具有覆盖这一tile的所有primitive信息
- framebuffer的数据在更快速,但也更小的SRAM中
- 让framebuffer数据保持在on-chip SRAM好处很大
- 读写这一区域的代价极小,不占用外部带宽
- 当一个tile渲染完后,才会被写入主存
针对Tile-based GPU的subpass融合
- subpass在渲染前已经确定
- VkRenderPass
- 驱动会查找具有下列属性的subp