前向渲染 和 延迟渲染
在计算机图形学中,前向渲染(向前渲染/Forward Rendering)和延迟渲染(Deferred Rendering)是两种主流的渲染管线技术,核心区别在于 “光照计算的时机与方式”—— 前者在 “绘制物体时” 同步计算光照,后者先 “记录物体信息” 再统一计算光照。在Unity里面相机就可以设置不同的渲染方法

一、前向渲染(Forward Rendering)
前向渲染是最传统的渲染方式,遵循“逐物体、逐像素”的光照计算逻辑,流程接近人眼的观察顺序。
工作流程:
几何阶段:将3D物体通过顶点着色器变换到屏幕空间(投影、裁剪等)。
光照计算:对每个物体,遍历所有影响它的光源,逐像素计算光照(漫反射、镜面反射、环境光等),最终将颜色输出到帧缓冲(Frame Buffer)。
覆盖与混合:若物体有重叠(如不透明物体),后渲染的物体会覆盖先渲染的;半透明物体需按深度排序,从后往前渲染并混合颜色。
核心特点:
简单直接:逻辑符合“先画物体,再算光照”的直觉,易于实现。
多光源效率低:每个物体需为每个影响它的光源单独计算光照(例如一个物体被5个光源照射,需5次像素着色计算),光源数量增加时性能显著下降。
适合简单场景:对内存和显存需求低(无需额外缓冲),适合光源较少、物体简单的场景(如早期3D游戏、移动端轻度应用)。
支持复杂特效:半透明、体积光(如光线追踪前的传统光线投射)等需要逐像素处理的特效更容易集成。
二、延迟渲染(Deferred Rendering)
延迟渲染通过“分离几何信息与光照计算”优化多光源场景的性能,核心思想是“先记录物体信息,再集中计算光照”。
工作流程:
几何缓冲阶段(G-Buffer Pass):
首先将物体的几何信息(位置、法线、材质属性如漫反射颜色、高光系数等)渲染到多个纹理(称为G-Buffer,通常包括:位置缓冲、法线缓冲、漫反射缓冲、材质缓冲等)。这一步仅处理“哪些物体存在”和“它们的基础属性”,不涉及光照。
光照计算阶段(Lighting Pass):
遍历屏幕上的每个像素,利用G-Buffer中存储的几何信息(如该像素的世界坐标、法线),结合所有影响该点的光源参数(位置、颜色、强度等),集中计算最终光照颜色,覆盖到最终帧缓冲。
核心特点:
多光源高效:光源只需在光照阶段全局计算一次(每个光源影响的范围通过屏幕空间遍历),光源数量大幅增加时(如数百个动态光源),性能下降远小于前向渲染。
内存/带宽消耗大:需要存储多个G-Buffer纹理(通常4-8个通道,分辨率与屏幕相同),对显存和带宽要求高(4K分辨率下,每个G-Buffer可能需要数GB显存)。
不直接支持半透明:半透明物体无法在G-Buffer中正确记录(因需要混合前后颜色),通常需单独用前向渲染处理。
特效扩展灵活:基于G-Buffer的几何信息,易集成SSAO(屏幕空间环境光遮蔽)、全局光照等需要屏幕空间计算的特效。
三、关键对比与适用场景
适用场景
1. 前向渲染适用场景
轻量级场景 / 移动平台:如 2D 游戏、简单 3D 游戏(如独立游戏、手游),光源数量少(1-3 个主光源),对显存和硬件要求低。
透明物体密集的场景:如大量粒子效果、玻璃 / 水等透明材质(无需额外处理,原生支持混合)。
需要复杂自定义材质的场景:如卡通渲染、非 PBR 材质(向前渲染允许每个物体用不同的光照模型,灵活性更高)。
老硬件兼容需求:如需要支持低配置 PC 或旧手机,向前渲染的低显存、低硬件依赖更有优势。
2. 延迟渲染适用场景
多光源复杂场景:如开放世界游戏(白天 / 夜晚多光源)、室内场景(大量点光 / 聚光)、特效密集场景(如爆炸、火焰的动态光源),光源数量可能达数十甚至上百个。
追求高画质的 PC / 主机游戏:如 3A 大作(PS5、Xbox Series X/S、高性能 PC),有足够显存支撑 G-Buffer,且需要多光源实现真实的全局光照、动态阴影等效果。
PBR 材质标准化场景:若游戏统一使用 PBR(基于物理的渲染),G-Buffer 可固定存储 PBR 所需的属性(位置、法线、粗糙度等),无需灵活材质支持。