延迟渲染与传统多Pass渲染的核心区别在于处理几何与光照的方式。传统方法需为每个光源重复绘制全部几何(如1000个物体×10光源=10000次绘制),效率低下。延迟渲染则分两步:
几何Pass:仅一次绘制,将物体颜色、法线等基础信息存入G-buffer(几何缓冲区);
光照Pass:基于G-buffer统一计算所有光源效果,避免重复几何绘制。
优势在于光源增加仅影响光照计算(屏幕空间操作),几何绘制次数不变,尤其适合多光源场景。延迟渲染通过解耦几何与光照,显著提升性能。
延迟渲染的生动比喻:画画和上色
想象你是一个画家,要画一幅复杂的风景画,里面有很多物体(树、房子、人物),还有很多光源(太阳、灯光、火把等)。
传统多Pass渲染(Forward Rendering)就像这样:
你先画好树的轮廓和颜色,然后给它加上太阳光的阴影和高光。
接着你要给树加上灯光的光照效果,你得把树重新画一遍,再加上灯光的光照。
然后再给树加上火把的光照效果,又得重新画一遍树。
对场景中每个物体都这样重复,光源越多,画的次数越多,累不累?
延迟渲染(Deferred Rendering)则是:
第一步:先把所有物体的“基础信息”画在一张“信息图”上,比如:
颜色(漫反射颜色)
法线(表面朝向)
深度(距离摄像机的远近)
材质属性(粗糙度、金属度等)
这一步你只画一次,不管有多少光源。
第二步:根据这张“信息图”,统一计算所有光源对场景的光照,就像你拿着这张信息图,给它涂上不同光源的光影效果。
具体点说:
G-buffer(几何缓冲区):就是那张“信息图”,里面存储了场景中每个像素的基础数据。
光照Pass:用G-buffer里的数据,计算每个光源对每个像素的光照贡献,然后叠加起来。
为什么延迟渲染效率高?
你只画一次几何(物体形状和材质信息),不管光源多少。
光照计算是在屏幕空间(像素级别)进行的,不需要重新绘制物体。
光源越多,增加的是光照计算的次数,而不是重新绘制物体的次数。
举个简单的数字例子
假设场景有1000个物体,10个光源:
传统多Pass:每个光源都要绘制1000个物体,绘制次数 = 1000 × 10 = 10000次。
延迟渲染:绘制物体只做一次(1000次),光照计算做10次,但光照计算是在屏幕像素上,不是重新绘制物体,效率更高。
总结
| 传统多Pass渲染 | 延迟渲染(Deferred Rendering) |
|---|---|
| 每个光源都要重新绘制场景几何 | 场景几何只绘制一次,先存储基础信息 |
| 光照计算和几何绘制耦合 | 光照计算和几何绘制分开,光照在屏幕空间统一计算 |
| 光源多时性能下降明显 | 光源多时性能下降较缓,适合多光源场景 |
版权声明:本文为CSDN博主「你一身傲骨怎能输」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33060405/article/details/145292219





