news 2026/7/6 2:59:01

GPU PRO 5 - 4.2 Deferred Rendering Techniques on Mobile Devices 笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GPU PRO 5 - 4.2 Deferred Rendering Techniques on Mobile Devices 笔记

本笔记仅为个人的理解,如果有误欢迎指出。

Deferred Rendering Techniques on Mobile Devices

移动设备上的延迟渲染技术

延迟渲染是一种将场景光照计算延后到第二个渲染阶段进行的技术。。应用程序首先完成场景几何信息的渲染,并在第二个 Pass 中,在所有进行光照计算所需的信息都已经准备好之后,再统一执行光照计算。

这种技术将光照计算和几何计算解耦,因此相比于前向渲染,延迟渲染对于多光源场景更加友好。但延迟渲染不代表没有代价,因为他是在屏幕空间中完成几何体的着色,因此要求每个像素的所有光照相关信息都必须事先存储在G-buffer中。

但G-Buffer的大小随着分辨率改变而改变,1920 x 1080 的分辨率中G-Buffer的大小可能达到数十MB。并且每一帧写入和读取。这增加了内存占用,内存宽带的消耗,这个在PC设备上还好,但是在移动设备上这就成为了延迟渲染主要的瓶颈之一,移动设备的GPU中因为要考虑散热、能耗等问题GPU的带宽比GPU的计算能力更加的宝贵。

本文介绍了三种延迟渲染技术,他们在G-Buffer中存储的数据各有不同,分别为:

1,延迟渲染(Deferred Rendering)(Hargreaves 和 Harris,2004)

2,Light Pre-Pass Rendering(光照预处理渲染 / 光照预通道渲染)(Engel,2008)

3,Light Indexed Rendering(光源索引渲染)(Treblico,2009)

1,延迟渲染:

G-Buffer 是延迟渲染概念中的核心之一,在传统的延迟渲染中G-Buffer主要存储以下数据:

漫反射颜色、法线、深度。

延迟渲染对物体的渲染一般会有两个Pass以上,第一个Pass中会将这些数据写入到G-buffer中,随后在另外一个单独的光照计算的Pass中针对场景中的每一个光源依次读取G-buffer中的数据并混合,最终累积得到最后的光照。

2,Light Pre-Pass Rendering(光照预处理渲染 / 光照预通道渲染)

LPPR和DR 的主要区别在于他的G-Buffer中存储每个像素的光照信息,而不是完整的几何信息。这样带来的好处就是减少G-Buffer的大小进而减少内存带宽的消耗。

LPPR中主要存储以下数据:

( 光源颜色 )点乘((光照方向) 叉乘(法线) )

当然依照光照模型的不同,这公式可以是多样的,最后在光照计算中结合物体自身的漫反射纹理生成最终图像。

3,Light Indexed Rendering(光源索引渲染)

LIR和前两项技术不同,前两项技术在G-Buffer中存储的是光照计算所需要的信息,而LIR中G-Buffer换名为Light Index Texture,存储的是一个影响该像素的光源的索引。再利用这个索引去采样最终保存了光源信息的纹理。

具体过程如下:

第一步:为每个光源分配一个索引值,在屏幕空间上受影响的像素会将该光源的索引记录到RGBA中的其中一个通道上。

因此这个技术每个像素最多只有4个光源能够参与到计算,但因为颜色通道是8位的所以场景中可以存在256个不同的光源,因为一张Light Index Texture最多存储4个光源的索引,在选择要存储哪个光源就要另外做判断了。

但如果不限制Light Index Texture的数量的话,每个像素理论上是可以支持任意数量的光源参与到计算的,只要增加Light Index Texture的数量即可。

第二步:这一阶段对于屏幕上的每一个像素首先会根据Light Index Texture上的光源索引,通过这个光源索引去查询存储了光源信息的纹理,比如光源位置纹理、光源颜色纹理、光源衰减纹理等,最终再结合应用程序传入的漫反射纹理、法线等着色数据信息渲染出最终的颜色。

总结:

技术G-buffer 中保存的数据光照如何计算最大优势最大缺点
Deferred RenderingAlbedo、Normal、Depth 等完整几何信息根据 G-buffer 逐光源计算实现简单,支持大量光源G-buffer 大,带宽占用高
Light Pre-Pass RenderingNormal、Depth + 光照结果第二次几何 Pass 结合材质完成着色G-buffer 更小,节省带宽需要两次几何渲染
Light Indexed Rendering每个像素只保存光源索引根据索引查询光源数据后计算几乎不需要 G-buffer,可支持硬件 MSAA,内存带宽占用最低光源管理复杂,每像素可保存的光源数量有限,需要排序和裁剪

从移动 GPU 的角度来看,这三种方案实际上是在不同资源之间做权衡:

  • Deferred Rendering:用显存和带宽换取较低的几何处理开销。
  • Light Pre-Pass Rendering:减少 G-buffer 带宽,增加一次几何渲染。
  • Light Indexed Rendering:进一步减少 G-buffer 开销,将问题转移到光源索引管理和光源数据查询上,并且能够支持硬件 MSAA,因此更适合带宽受限、但需要较高图像质量的移动平台。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 18:40:58

2026年6月GESP真题及题解(C++一级):去旅行

2026年6月GESP真题及题解(C一级):去旅行 题目描述 快暑假了,小杨同学正在计划出去旅行,前往目的地的方案多种多样,小杨同学想知道如何前往目的地最便宜。 小杨同学住在 AAA 市,旅行目的地是 B…

作者头像 李华
网站建设 2026/7/5 16:11:31

pthread_create通过加锁设置线程启动竞争条件

#include <pthread.h> template<class thd, class DATA> int Manage<thd, DATA>::attachthread(thd &t) {//设置系统级作用域和分离状态//设置系统级作用域 (system scope)含义&#xff1a;告诉操作系统&#xff0c;这个新创建的线程应该在整个系统范围…

作者头像 李华
网站建设 2026/7/4 16:27:14

如何高效使用Diablo Edit2:暗黑破坏神2存档编辑器的完整指南

如何高效使用Diablo Edit2&#xff1a;暗黑破坏神2存档编辑器的完整指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 你是否曾在暗黑破坏神2中花费数百小时刷装备&#xff0c;却因技能点分配失…

作者头像 李华
网站建设 2026/7/5 16:49:11

查新报告分为哪几种?科技查新、查收查引与专利查新区别

我朋友第一次开查新报告&#xff0c;跟我说直接看懵了…… 什么科技查新、查收查引、专利查新&#xff0c;分都分不清…… 特别担心选错了&#xff0c;还怕白花钱哈哈哈&#xff01; 今天这篇文章我就把这三种查新的区别和咋选机构的事一次讲清楚。 1.查新报告分为哪几种&am…

作者头像 李华