神威无敌大将军炮致敬过这个标题
反正就是PBR直接光照,SSGI处理间接光照,BLOOM,景深,HDR画面后处理
我重新更正了我的渲染器,首先我放弃了CSM(级联阴影贴图,Cascaded Shadow Maps),本质就是一个阴影贴图分辨率的问题,其次,对于间接光照的解决,我参考了UE5中Lumen对于低端显卡的解决方案,使用SSGI(屏幕空间全局光照),所以大概思路是这样的:
延迟着色生成G缓存数据,
准备法线贴图,
根据近大远小生成适合的阴影贴图分辨率。
顶点着色器计算法线空间,
片段着色器,PBR计算直接光照,SSGI利用G缓存的数据计算求交点,用PBR计算得到间接光照,
绘制阴影贴图,
泛光,HDR,伽马矫正后处理,
至于SSGI的一些缺陷,可以先暂摆一下
首先PBR不能少,然后是区域光Area Lights,CSM(级联阴影贴图,Cascaded Shadow Maps)这个也不能少,泛光,法线贴图,SSAO环境光遮蔽,HDR,伽马矫正,最后为了性能还需要延迟着色。以下是Gemini对这个渲染器的评价:
恭喜你!至此你已经构建出了一个完整的现代 3D 渲染器内核蓝图。我们来复盘一下你手里的武器库:
1. 数学与定义:理解了立体角在三维空间的无量纲相似性,从而撑起了辐射度量学。
2. 着色核心:用 Cook-Torrance BRDF(GGX + Smith + Schlick)实现了基于物理的材质表现(PBR)。
3. 光源升级:引入 LTC 或最接近点法,让光源拥有了物理面积(Area Lights)。
4. 大规模光影:利用 CSM 分级包裹视锥体,破解了大场景阴影的锯齿灾难;利用延迟着色(Deferred)跨越了多光源性能鸿沟。
5. 空间感知:利用 SSAO 弥补了屏幕空间的微观环境遮蔽,消除了浮空感。
6. 电影级后处理:通过 Bloom 模拟物理镜头溢光,经过 ACES 曲线(HDR)保留高光细节,最后临门一脚通过 Gamma 2.2 矫正还原纯正的线性光影。
这套架构就是虚幻引擎(Unreal Engine)、寒霜引擎(Frostbite)等现代商业大作底层核心管线的缩影。
[ 场景 3D 几何数据 (低模 + 材质) ]
│
▼
1. 几何阶段 (Geometry Pass) ──────► 采样法线贴图 (Normal Map) 并应用 TBN 矩阵
│
├──► 输出:G-Buffer 纹理组合 (Position, Normal, Albedo, Roughness, Metallic)
▼
2. 空间环境光遮蔽 (SSAO Pass) ────► 采样 G-Buffer 的深度与法线进行半球随机遮挡测试
│ └─► 输出:经双边滤波(Bilateral Blur)去噪的 SSAO 遮蔽图
▼
3. 阴影计算阶段 (CSM Pass) ──────► 子视锥体对数分割 + 像素对齐(Texel Snapping)
│ └─► 输出:2D 纹理数组(sampler2DArray)形式的级联阴影图
▼
4. 光照合成阶段 (Lighting Pass) ──► 渲染全屏四边形,单像素循环解算海量光源(复杂度降为 O(1) overdraw)
│ ├─► 高光:Cook-Torrance Specular (GGX NDF + Smith G + Schlick F)
│ ├─► 区域光:LTC 矩阵分析解 或 最接近点近似(Representative Point)
│ └─► 间接光:结合 SSAO 遮蔽图,弱化常数项 Ambient
│
├──► 输出:高精度线性空间 HDR 颜色缓冲区 (GL_RGBA16F)
▼
5. 泛光提取与模糊 (Bloom Pass) ──► 阈值提取高亮 -> 多级渐进下采样与上采样 (Dual Filtering)
│ └─► 输出:丝滑的低频模糊高光光晕图
▼
6. 最终后处理合成 (Post-Processing) ► 场景 HDR 图 + Bloom 图线性混合 -> ACES 电影级色调映射
└─► 临门一脚:Gamma 2.2 逆矫正 -> 最终输出到屏幕 (SDR / sRGB)