:延迟渲染的“轻量化革命“)
一、开篇:一个生活化的比喻想象你是一家高级餐厅的主厨,面前有100份点单。传统做法(传统延迟渲染G-Buffer)是:每接到一份点单,你立刻把这道菜的所有配料——番茄、洋葱、酱汁、装饰——全部提前切好摆盘,存放在巨大的冷藏柜里,等最后统一上菜时直接组装。问题是:冷藏柜(显存带宽)空间有限,而且很多菜品的配料摆盘完之后,客人却突然说"不要了"(被遮挡剔除),你白白浪费了大量切配时间和存储空间。可见性缓冲区(Visibility Buffer)的做法完全不同:你先不切配任何东西,只在小纸条上记录"3号桌要9号菜谱的第2份"(记录三角形ID和实例ID)。等到最终确认哪些纸条是真正要出餐的(通过深度测试筛选出最终可见的),你才拿着菜谱现场去后厨查配料、现场炒制(延迟到着色阶段才读取材质属性)。这就是可见性缓冲区的核心哲学:先确定"谁在前面看得见",再决定"看得见的东西具体长什么样"——把"可见性判定"和"材质着色"彻底解耦。二、传统延迟渲染的困境:G-Buffer为什么"太胖"2.1 经典G-Buffer的构成在传统延迟渲染(Deferred Shading)中,几何阶段(Geometry Pass)要把每个像素的完整材质信息写入多张纹理: