Games104-P4-5 Rendering
Lecture4 Rendering (硬件)
- 游戏渲染的挑战
- 成千上万的objects,需要不同的效果
- 计算机硬件复杂,需适配硬件
- 帧率需稳定,不能场景变复杂帧率下降
- 限制CPU资源的使用,一般10%-20%,需将更多资源留给Gameplay等
GPU
SIMD&SIMT
SIMD
- 实现单指令多线程的运算
SIMT——应用于现代GPU
- 一个计算内核,分成小的很多个
- 同一个操作在每一个小的core上都进行
GPU架构
CPU GPU间数据尽可能单向传输
cache
- cache hit:数据在缓存中,速度快
- cache miss:数据不在缓存而在内存,速度慢
- Tile - based GPU
- 应用于移动端,一小块Tile的渲染
Renderable
Mesh
- Mesh primitive
- 使用索引的方式存储
Material
Texture
Shader
Render Objects in Engine
变换
Submesh
- 对于一个GO,根据材质不同,切分成submesh
针对submesh,相同的材质shader等数据造成资源浪费;解决方法👇
渲染优化
- Resource Pool
- 指引pool中所需的到mesh
Sort by Material
- 目的是尽量不改变显卡的状态设置,一次性做完所有相同材质的渲染
GPU Batch Rendering
- 减少Drawcal
Visibility Culling 可见性裁剪
Culling基础思想:计算包围盒是否在事件锥内
补:关于包围盒
BVH结构,降低Culling的计算复杂度
PVS (Potential Visibility Set)
- 用于可见性,也可用于资源加载(理解为LOD设置
now:GPU - Based Culling
- early-z获取深度
Texture Compression
引擎中对图片重新编码——用于实现随机访问
Block Compression:将图片切成小块进行压缩
- 4*4,找到最亮&最暗,插值压缩
Cluster - Based Mesh Pipeline
新的模型管线
概述:将许多小面片合成一个cluster,每一个cluster都交给一个gpu的core,做一致的操作
- cluster culling:每一个cluster都有一个Bounding
现代引擎的应用👇
Nanite
总结
- 现代引擎的设计深度依赖硬件
- submesh的设计支持了拥有不同材质的模型
- 用culling算法尽可能少的绘制GO
- GPU Driven:随着GPU越来越强大,更多的工作会转移到GPU进行
Lecture5 Rendering (光、材质、着色器)
- 参与渲染
- Lighting:光子被发射、反射、吸收、反弹,the origin of rendering
- Material:光子和物体如何反应
- Shader:光子和物质间反映的复杂运算
光照
渲染方程 & 挑战
-
渲染的挑战
- 阴影
- 光源的复杂度
- 真实世界中,所有物质都是光源
基础光照的解决方法
主要光和环境光 —— 解决阴影和所有物质都是光源
Blinn - Phong —— 用经验模型解决复杂光源问题
- 问题:可能出现能量不守恒;无法表达物理细节
Shadow
- 场景中任何一个点,是否从光源可见
- shadow map —— 解决阴影
- 从光看去的深度图
- 问题:从光源出形成Shadow map的采样率和相机观察的采样率不同,造成artifacts
基于预计算的全局光照GI
Lightmap 光照贴图
如何生成光照贴图
- 对几何进行简化,降低参数化复杂度,使如下图UV格子分布均匀
Lightmap
- 实现 bouncing & 软阴影
- Lighting:
- Lighting + Direct Lighting
- Final:(combined with materials
优缺点
- 优点
- runtime下效率高
- 可烘焙很多细节
- 缺点
- 预计算时间长
- 只可以处理静态物体和静态光
- 占用存储空间——空间换时间的策略
- 优点
Probe
Light Probe
- 对于游戏场景中的每个Probe,采样一个光场。移动时,寻找周围的Probe,进行插值得出最终结
- 空间体素化
Reflection Probe
- 针对反射的Probe,密度低但采样精度高(原因:反射对高频敏感)
Light Probe + Reflection Probe 的优缺点
- 优点
- runtime下效率高
- 静态、动态场景都可以用,runtime可更新
- handle both diffuse and specular shading
- 缺点
- 为了稳定帧率,更新会选择相对空闲的帧内
- 采样率远低于GI,没有GI那种完美的阴影
Image - Based Lighting (IBL) 基于图像的光照
具体看202,真的没太明白T^T
- 核心思想:对真实的环境光照提前做预处理,提前算出环境光照和材质作用的卷积结果
- 实时计算变为事实查表,空间换时间
回顾BRDF
Diffuse Irradiance Map
- 提前算出$L_d$。diffuse结果
Specular
- 针对不同roughness,采取mipmap的存储方式存储
经典阴影方法
Cascade Shadow
- 由远到近, 精度变高
- 难点:不同采样间的插值
- cascade shadow的优缺点
Hard Shadow V.S. Realistic Shadow
详见202
- 软阴影算法
- PCF
- PCSS
- PCSS
- Variance Soft Shadow Map (VSSM)
- PCF
Material
Physical - Based Material
微表面模型
-
GGX
- 金属的电子捕获光子,无次表面散射
关于DFG都是什么
- D:法线分布
- GGX绿色的线以拟合
- G:微表面间遮挡
- F:菲涅尔项
- D:法线分布
- 迪士尼BRDF原则
- 艺术家的直觉,而不是物理
- 参数尽可能少
- 参数归一化,特殊情况允许
- 所有参数的组合都有意义(plausible and robust
常见的PBR模型
PBR Specular Glossiness
- 利用图片描述材质,而非参数
- Specular表示菲涅尔项,有RGB三通道,不同颜色菲涅尔不同
PBR Metallic Roughness
- 解决Specular易出错而导致菲涅尔出错
MR V.S. SG
- MR
- 优点
- 更容易被理解,灵活度虽然低但F0(菲涅尔项)不易出错
- 贴图存储占据更少空间,metallic和roughness都是灰度图
- 缺点
- 没太看懂这个T^T
- 非金属和金属过渡处,易产生白边
- 优点
- SG
- 优点
- specular直接控制菲涅尔
- 缺点(MG的优点的反义)
- 优点
Shader管理
- 不同现象排列组合,会产生许许多多的shader
- Uber Shader:一个全方面的shader,通过宏定义去细分情况
- Uber Shader:一个全方面的shader,通过宏定义去细分情况
- 跨平台Shader编译 SPIRV
Summary of Popular AAA Rendering
- 解决光:Lightmap + Lightprobe
- 解决材质:PBR + IBL
- 解决阴影:Cascade Shadow + VSSM
前沿技术
- 硬件进步
实时光追
实时全局光照
复杂材质渲染
Virtual Shadow Map