“先备料,后统一烹饪“的精明大厨:深入理解延迟渲染(Deferred)
引子:小明的"乘法诅咒能破吗"之问小明刚认识了"前向渲染"这位"边画边算"的老实工匠。他一方面佩服它的简单直接,另一方面,却始终对它那个"致命软肋"耿耿于怀:"我记得,前向渲染最大的痛点,是那个’乘法诅咒’——开销 ≈ 物体数(N)× 光源数(M)。光源一多,N × M 就爆炸,GPU 直接被压垮。这让我特别不甘心!你想啊,现在的游戏,动不动就是霓虹闪烁的赛博朋克都市、灯火通明的科幻基地——场景里成百上千盏灯,是刚需啊!难道就因为前向渲染搞不定’多光源’,我们就只能眼睁睁看着,做不出那种’万家灯火’的震撼画面吗?这个’物体数 × 光源数’的乘法诅咒,难道就真的,没有办法破解吗?我听说还有一种叫’延迟渲染’的路径,据说就是专门来对付’多光源’的——它,到底是怎么做到的?它凭什么能打破那个诅咒?"小明这一问,问出了整个实时渲染史上,一次石破天惊的"思维革命"。是的,那个"物体数 × 光源数"的乘法诅咒,曾经死死地扼住了游戏画面的咽喉。直到有一天,一群天才的工程师,用一种**“颠覆常识、重排流程”**的方式,硬生生地把那个"乘法",掰成了"加法"——从此,"万家灯火"的震撼画面,才成为可能。这个破局者,就是今天的主角——延迟渲染(Deferred Rendering)。