目录
- 孤岛危机1/弹头
- 孤岛危机2
- 孤岛危机3
- Ryse/EaaS时代
- CRYENGINE V
Shader系统
- Uber-shader
- 预先生成不同程序变体,减少动态分支
- 最小化状态切换
- 减少不必要的寄存器占用
ZPass
- 预先渲染场景深度图
- 减少pixel shader中不必要的渲染
- 基于屏幕空间信息的渲染技术
- SSAO,大气散射,后处理体积光……
- 对之后的游戏画面技术影响深远
阴影
- Cascaded Shadow Map
- 渲染多张shadow map覆盖长距离阴影
- 地形投影使用VSM
Deferred Shadow Mask
- 将阴影输出至屏幕空间遮罩
- R通道存储平行光,GBA存储点光源
- 可在屏幕空间处理软阴影
- 优化渲染管线
地形AO
- 预烘培植被、地形与静态物体(brush)的AO
- 保存进体纹理
- 渲染时采样体纹理,输出至RT
- 大幅度加强丛林光照的层次感
地形AO
SSAO
SSAO
- 基本思想:使用屏幕空间深度信息计算AO
- 广泛应用于之后的游戏中
植被
- 漫反射,高光,表面下散射,透射
- 投射、散射效果基于视角变化
- 可调真阴影与光照部分的混合比例,给予植被更强的体积感
- 支持预渲染SH光照系数
- 相比现代PBR,孤岛危机1没有使用复杂的光照模型,但给予美术人员更大的控制权
植被程序动画
- 分两部分:结构上的摆动;细节摆动
- 结构摆动:根据场景中的风力源以及植被高度,作逐顶点风力模拟
- 细节摆动:使用四个三角波的组合模拟风力,对模型进行形变
- 模型形变由美术人员预先绘制
植被优化
- 批次渲染
- 对于较远的植被(200~300m外),替换成图片(billborad)
- 生成Billboard时会预计算光照,使得远距离的植被也有很好的体积感
物体动态模糊
- 输出物体的速度方向与大小
- 对于运动物体沿运动方向扩展边缘(velocity dilation)
- 沿运动方向累积采样
- 生成MB Mask,只对运动物体进行混合
延迟渲染
- Deferred Lighting/Light Pre-pass
- 先渲染一遍场景,输出一些基本的场景材质信息到GBuffer
- 在一个灯光缓冲(Light buffer)中累积光照
- 再渲染一遍场景,结合之前累积的光照信息以及材质信息得到最终渲染结果
-
优点:减少GBuffer的大小,降低带宽。
- 缺点:需要渲染场景两遍
Light Propagation Volume
- I3D 2010论文
- 第一个用于正式游戏项目的动态全局光照算法
Light Propagation Volume
- 基本思想:VPL,instant radiosity等方法的结合
- 渲染RSM
- 将得到的结果作为虚拟光源注入体纹理,以二阶SH系数表示
- 在体纹理中沿6个方向传播
- 将场景可见信息存入另一张体纹理,用于间接光照的投影
多次反弹
受GI影响的粒子
高光反射
沿反射方向ray march体纹理数据累积光照
体渲染
屏幕空间反射
屏幕空间反射
- 首次出现在孤岛危机2中,广泛用于今天的游戏
- GBuffer提供了屏幕空间的场景信息,可以直接对其进行ray march算出光照
- 优点:速度快,可以得到符合基于物理BRDF的高光形状
- 见寒霜3的Stochastic SSR
- 孤岛危机2、3中只是简单地叠加到最终渲染结果中
- 缺点:无法获得屏幕空间外的反射信息
大规模草丛
Automerged Grass
大规模草丛
- 分区块管理草丛,剔除不必要的模型实例,计算lod
- 使用16*16*16保存风力扰动
- 使用transient buffer等方法实现高效的内存管理与任务分派
间接照明
- 孤岛危机3的场景照明大多为静态
- PC:LPV+手动打光
- LPV精度低,由手动打光弥补
间接照明-GIF
Tiled Deferred Shading
- 将屏幕划分成多个区块(tile)用以提出光源,每个区块保存影响该范围的光源列表
- GBuffer与渲染结果只读取和写入一次,大幅度减少带宽压力
- 减少不必要的光源重绘
Forward+
- 将tiled deferred的思想用于前向渲染上
- 读取TBDR产生的光源列表
- 利用depth pre-pass避免不必要的重绘
- 用于复杂材质,如毛发,眼睛等
基于物理的渲染
高光:Cook Torrance模型
- 菲涅尔项:Schlick近似
- 法线分布项:GGX
- 几何遮挡项:Schilck-Smith
基于物理的渲染
Image Based Lighting
- Split-sum approximation(虚幻4,COD:BO2)
- 将渲染方程拆分成两部分,预计算DFG项,存入一张2D LUT纹理中
- 可改善不同粗糙度和视角下环境贴图的菲涅尔反射
LOD
- LOD级别根据模型在屏幕上的三角形平均覆盖率选择
- 减少不必要的多边形数,减少aliasing
SVOGI
SVOGI
- CRYENGINE的SVOGI是一个半实时的实现
- CPU端建立SVO,在运行时实时streaming到GPU上,不在GPU上更新SVO
- 通过在渲染RSM时注入动态物体的颜色近似实现动态间接照明
SVOGI (GIF)
体积光
体积光
- 方法类似寒霜3
- 构建视锥体形状的体素,保存大气参数
- ray march体纹理,采样shadow map累积光照
体积云
- 采用了《地平线:黎明时分》的方法
- 基本思想
- 通过ray march Perlin和Worley等噪声模拟低空积雨云的形状
- 在累积光照时使用更加复杂的光照模型,如Powder效果,多重散射
GPU粒子