
针对延迟渲染,官方给出了一个Demo,分别实现了传统的双Pass延迟渲染和利用Metal的特性实现的单一Pass延迟渲染。单Pass延迟渲染主要依靠iOS和tvOS平台的Tile based特性来实现。这篇文章主要根据官方的延迟渲染Demo来分析两种延迟渲染的原理区别,扩展Programmable blending特性实现延迟渲染和ImageBlock实现延迟渲染进行优化的原理,挖掘总结用到的Metal引擎特性和相关知识点。
官方Metal Demo列表地址:https://developer.apple.com/metal/sample-code/
延迟渲染Demo地址:https://developer.apple.com/documentation/metal/deferred_lighting?language=objc
文章目录
一、 关键词
- Xcode抓帧调试;
- TBDR;
- Programmable blending;
- ImageBlock(Implicit,Explicit);
- Tile Memory;
- Multiple Raster Order Groups
二、延迟渲染原理回顾
延迟渲染相比于前向渲染可以更加高效的渲染大量的光源场景。前向渲染中,对于场景中通过深度测试的每个物体,要依次针对每个光源进行光照计算,当场景复杂、光源数量增多,计算量会急剧增加,效率低下;
而在延迟渲染中,光照计算推迟到第二步,对于每个光源场景在屏幕空间只进行一次光照计算,光源的增加对计算量影响线性的。
延迟渲染的实现方式目前依托不同的硬件结构有两种,像macOS等PC平台由于GPU是IMR(immediate mode rendering)架构,延迟渲染的实现至少需要两个Pass。而iOS等移动平台的GPU支持TBDR架构,利用tile memory可以实现在一个Pass中进行延迟渲染,减少CPU和GPU之间的数据带宽,提高了渲染效率。
本文深入探讨Metal2中的延迟渲染技术,包括传统双Pass延迟渲染和单Pass延迟渲染(TBDR)。重点分析了Metal2的新特性如光栅顺序组(ROG)和图像数据块(ImageBlocks)如何优化延迟渲染,特别是如何利用Tile Based渲染架构减少带宽消耗。此外,介绍了Xcode的抓帧调试工具在分析延迟渲染流程中的应用。
订阅专栏 解锁全文
2405

被折叠的 条评论
为什么被折叠?



