Games104-P4-5 Rendering

IMG_0937 2

IMG_0956

Lecture4 Rendering (硬件)

截屏2023-06-24 12.25.43

  • 游戏渲染的挑战
    • 成千上万的objects,需要不同的效果
    • 计算机硬件复杂,需适配硬件
    • 帧率需稳定,不能场景变复杂帧率下降
    • 限制CPU资源的使用,一般10%-20%,需将更多资源留给Gameplay等

截屏2023-06-24 12.31.40

截屏2023-06-24 12.32.05

截屏2023-06-24 12.39.35

GPU

SIMD&SIMT

截屏2023-06-24 13.09.16

  • SIMD

    • 实现单指令多线程的运算
  • SIMT——应用于现代GPU

    • 一个计算内核,分成小的很多个
    • 同一个操作在每一个小的core上都进行

GPU架构

  • 截屏2023-06-24 13.14.48

  • CPU GPU间数据尽可能单向传输

    • 截屏2023-06-24 13.17.54
  • cache

    • cache hit:数据在缓存中,速度快
    • cache miss:数据不在缓存而在内存,速度慢
  • Tile - based GPU
    • 应用于移动端,一小块Tile的渲染
    • 截屏2023-06-24 13.25.37

Renderable

Mesh

  • Mesh primitive
    • 截屏2023-06-24 13.29.39
  • 使用索引的方式存储

Material

截屏2023-06-24 13.38.52

Texture

截屏2023-06-24 13.39.19

Shader

截屏2023-06-24 13.39.58

Render Objects in Engine

  • 变换

    • 截屏2023-06-24 13.43.33
  • Submesh

    • 对于一个GO,根据材质不同,切分成submesh
  • 针对submesh,相同的材质shader等数据造成资源浪费;解决方法👇

渲染优化

  • Resource Pool
    • 指引pool中所需的到mesh
    • 截屏2023-06-24 13.48.59
    • 截屏2023-06-24 13.50.11
  • Sort by Material

    • 目的是尽量不改变显卡的状态设置,一次性做完所有相同材质的渲染
    • 截屏2023-06-24 13.53.22
  • GPU Batch Rendering

    • 减少Drawcal
    • 截屏2023-06-24 13.55.23

Visibility Culling 可见性裁剪

  • Culling基础思想:计算包围盒是否在事件锥内

    • 截屏2023-06-24 13.58.40
  • 补:关于包围盒

    • 截屏2023-06-24 13.59.18
  • BVH结构,降低Culling的计算复杂度

    • 截屏2023-06-24 15.17.07
  • PVS (Potential Visibility Set)

    • 用于可见性,也可用于资源加载(理解为LOD设置
    • 截屏2023-06-24 15.27.11
    • 截屏2023-06-24 15.27.27
  • now:GPU - Based Culling

    • early-z获取深度
    • 截屏2023-06-24 15.31.31

Texture Compression

  • 引擎中对图片重新编码——用于实现随机访问

    • 截屏2023-06-24 19.22.55
  • Block Compression:将图片切成小块进行压缩

    • 4*4,找到最亮&最暗,插值压缩
    • 截屏2023-06-24 19.26.53

Cluster - Based Mesh Pipeline

  • 新的模型管线

  • 概述:将许多小面片合成一个cluster,每一个cluster都交给一个gpu的core,做一致的操作

截屏2023-06-24 19.39.24

截屏2023-06-24 19.46.41

  • cluster culling:每一个cluster都有一个Bounding

截屏2023-06-24 19.49.42

现代引擎的应用👇

Nanite

截屏2023-06-24 19.45.16

总结

  • 现代引擎的设计深度依赖硬件
  • submesh的设计支持了拥有不同材质的模型
  • 用culling算法尽可能少的绘制GO
  • GPU Driven:随着GPU越来越强大,更多的工作会转移到GPU进行

Lecture5 Rendering (光、材质、着色器)

  • 参与渲染
    • Lighting:光子被发射、反射、吸收、反弹,the origin of rendering
    • Material:光子和物体如何反应
    • Shader:光子和物质间反映的复杂运算

光照

渲染方程 & 挑战

基础光照的解决方法

  • 主要光和环境光 —— 解决阴影和所有物质都是光源

    • 截屏2023-06-25 14.06.10
  • Blinn - Phong —— 用经验模型解决复杂光源问题

    • 问题:可能出现能量不守恒;无法表达物理细节
    • 截屏2023-06-25 14.08.28
  • Shadow

    • 场景中任何一个点,是否从光源可见
    • 截屏2023-06-25 14.14.42
  • shadow map —— 解决阴影
    • 从光看去的深度图
    • 截屏2023-06-25 14.15.45
    • 问题:从光源出形成Shadow map的采样率和相机观察的采样率不同,造成artifacts截屏2023-06-25 14.20.53

基于预计算的全局光照GI

截屏2023-06-25 14.32.31

  • 如何展现全局光照
    • 球面采样,通过BRDF和蒙特卡洛进行卷积运算
    • 截屏2023-06-25 14.37.06
  • 信号处理前置知识

  • 球面调和函数 (视频具体位置)

    • 截屏2023-06-25 14.45.11
    • 截屏2023-06-25 14.48.30
    • 截屏2023-06-25 14.49.17
  • 应用球面调和函数对所得对光照球面展开进行压缩
    • 截屏2023-06-25 14.58.25
    • (前置知识在202-6

Lightmap 光照贴图

  • 截屏2023-06-25 15.02.24

  • 如何生成光照贴图

    • 对几何进行简化,降低参数化复杂度,使如下图UV格子分布均匀截屏2023-06-25 15.10.18
  • Lightmap

    • 实现 bouncing & 软阴影
    • Lighting:截屏2023-06-25 15.13.41
    • Lighting + Direct Lighting截屏2023-06-25 15.14.15
    • Final:(combined with materials截屏2023-06-25 15.13.18
  • 优缺点

    • 优点
      • runtime下效率高
      • 可烘焙很多细节
    • 缺点
      • 预计算时间长
      • 只可以处理静态物体和静态光
      • 占用存储空间——空间换时间的策略

Probe

Light Probe

截屏2023-06-25 15.21.54

  • 对于游戏场景中的每个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

  • 核心思想:对真实的环境光照提前做预处理,提前算出环境光照和材质作用的卷积结果
  • 实时计算变为事实查表,空间换时间

截屏2023-06-25 21.37.15

  • 回顾BRDF

    • 截屏2023-07-02 16.06.35
    • Diffuse Irradiance Map

      • 提前算出$L_d$。diffuse结果
      • 截屏2023-07-02 16.06.50
    • Specular

      • 截屏2023-07-02 16.15.01
      • 针对不同roughness,采取mipmap的存储方式存储截屏2023-07-02 16.15.56
      • 截屏2023-07-02 16.21.10
  • 截屏2023-07-02 16.25.25

经典阴影方法

Cascade Shadow

截屏2023-07-02 16.30.55

  • 由远到近, 精度变高
    • 截屏2023-07-02 16.33.19
  • 难点:不同采样间的插值
    • 截屏2023-07-02 16.35.15
  • cascade shadow的优缺点
    • 截屏2023-07-02 16.40.29

Hard Shadow V.S. Realistic Shadow

详见202

  • 软阴影算法
    • PCF
      • 截屏2023-07-02 16.42.17
      • PCSS
        • 截屏2023-07-02 16.43.17
    • Variance Soft Shadow Map (VSSM)
      • 截屏2023-07-02 16.46.36

Material

Physical - Based Material

  • 微表面模型

    • 截屏2023-06-25 16.43.20
  • 微表面的BRDF

    • 截屏2023-06-25 16.54.58
  • GGX

    • 截屏2023-07-29 12.57.40
    • 金属的电子捕获光子,无次表面散射
    • 截屏2023-06-25 16.52.58
  • 关于DFG都是什么

    • D:法线分布
      • GGX绿色的线以拟合截屏2023-06-25 16.51.47
    • G:微表面间遮挡
      • 截屏2023-06-25 16.58.44
    • F:菲涅尔项
      • 截屏2023-06-25 17.02.59
  • 迪士尼BRDF原则
    • 艺术家的直觉,而不是物理
    • 参数尽可能少
    • 参数归一化,特殊情况允许
    • 所有参数的组合都有意义(plausible and robust
    • 截屏2023-06-25 21.10.31

常见的PBR模型

PBR Specular Glossiness
  • 利用图片描述材质,而非参数
  • Specular表示菲涅尔项,有RGB三通道,不同颜色菲涅尔不同

截屏2023-06-25 21.12.09

截屏2023-06-25 21.14.23

PBR Metallic Roughness
  • 解决Specular易出错而导致菲涅尔出错

截屏2023-06-25 21.25.27

截屏2023-06-25 21.26.24

MR V.S. SG
  • MR
    • 优点
      • 更容易被理解,灵活度虽然低但F0(菲涅尔项)不易出错
      • 贴图存储占据更少空间,metallic和roughness都是灰度图
    • 缺点
      • 没太看懂这个T^T
      • 非金属和金属过渡处,易产生白边
  • SG
    • 优点
      • specular直接控制菲涅尔
    • 缺点(MG的优点的反义)

截屏2023-06-25 21.30.38

Shader管理

  • 不同现象排列组合,会产生许许多多的shader
    • Uber Shader:一个全方面的shader,通过宏定义去细分情况
      • 截屏2023-07-02 17.06.58
  • 跨平台Shader编译 SPIRV
    • 截屏2023-07-02 17.11.47
  • 解决光:Lightmap + Lightprobe
  • 解决材质:PBR + IBL
  • 解决阴影:Cascade Shadow + VSSM

前沿技术

  • 硬件进步
    • 截屏2023-07-02 16.58.31
  • 实时光追

    • 截屏2023-07-02 16.58.59
  • 实时全局光照

    • 截屏2023-07-02 17.00.18
  • 复杂材质渲染

    • 截屏2023-07-02 17.01.53
  • Virtual Shadow Map

    • 截屏2023-07-02 17.03.41