CGPC2024 第二日

离线渲染:真实感材质建模

王贝贝,NJU

科研大佬!

  • 材质模型的基本概念
  • 几种常见材质模型
  • 材质模型近期进展

  • 材质:定义了渲染方程中的BSDF(BSDF = BRDF + BTDF)

    • Diffuse、Glossy、Specular
    • 前沿:(微结构)表面模型(电梯、茶壶的金属表面)、织物模型

BRDF

  • 定义在局部坐标系,以着色法向 为z轴
  • BRDF:出射的Radiance(辐亮度)和入射的Irradiancce(辐照度)的微分之比
  • 定义:
  • 辐照度Irradiance:单位面积的辐射通量
  • 辐射率/辐亮度Radiance:单位面积、单位立体角的辐通量密度

着色法向 vs. 几何法向

  • 几何法向:三角形面法向

  • 顶点法向:所有相关联的三角形面的法向的平均

  • 着色法向:定点法向插值后的法向

    • 重心坐标
  • 着色法向由于插值,可以近似光滑

方向参数化

直角坐标 或球面坐标

BRDF的不同参数化形式(在神经网络上十分重要)

  • 入射方向 + 出射方向
  • 半程向量 + 差向量
  • 各向同性BRDF ,4D->3D

讨论范畴

  • 几何光学与波动光学:材质细节与光的波长相当时,进入波动光学范畴
    • e.g: 黑色狗毛呈现彩色
  • 表面渲染与体渲染
    • 表面材质模型:入射出射为一个点
    • 次表面散射:光线在介质内传播,吸收、散射导致出射点多个
    • 渲染方程 -> 辐射传输方程(RTE)
    • 扩散理论

常见材质模型

  • 标准
    • 真实性
    • 计算高效性
    • 存储简洁性
    • 表达统一性
    • 物理性:能量守恒、可逆性
      • 白炉测试:材质球在纯白环境光下,如果与背景融为一体则能量守恒
      • 可逆性: 互换不变
      • 不强制要求,但需要考虑衡量
    • 重要性采样便捷(便于生成PDF)
    • 可编辑性

测量模型

  • 每个材质:到BRDF值的数据表格
  • MERL数据集(2003)
  • Pros: 真实性强(真实摄制)、计算高效、表达统一
  • Cons: 存储不简洁、编辑困难、不具物理性、PDF只能用累积分布函数

解析模型

  • 经验模型 / 基于物理的模型
  • Lambertian
    • Diffuse: 视角无关, 为albedo/base color
  • Blinn-Phong
    • 真实性:分布简单,塑料感
    • 高效、简洁、易于编辑
    • 表达效果不统一
    • 能量不守恒,有可逆性
    • PDF:解析公式
  • 微表面模型 Microfacet Model
    • 认为表面由多个微小面元构成
    • NDF - 法向分布函数:Beckmann, GGX, GTR
      • 参数:粗糙度(roughness)
      • GGX常用,GTR拟合更好,但打破了拉伸不变性(面积与roughness的关系)
    • Shadow Masking - 遮挡函数
    • 菲涅尔项
      • 光线在两种不同折射率的介质中传播时的反射比例
      • 金属:接近1,贴地角出反射更强
      • 非金属:垂直入射处折射为主,贴地角处反射变强
      • 与界面折射率(IOR)有关,与材质的物理属性有关
        • 金属的IOR是复数,常规折射率 和消光系数
      • 计算开销:需要考虑偏振,与光线波动性有关
      • 实时渲染:Fresnel Schlick 近似
    • 没有漫反射项、金属度
      • Cook-Torrance模型:Lambertian + 微表面
    • Disney Principled BRDF
      • 广泛应用于UE、Blender等
    • 真实性:在金属、粗糙玻璃有真实感,无法模拟视差、双高光
    • 高效性:实时渲染需要近似
    • 无法表达纤维材质,高光分布不同
    • 有解析解,但每种NDF需要特定的PDF采样

其他BRDF

4D -> 6D 增加了uv维度

  • SVBRDF
  • BTF

近期进展

  • 传统方向
    • 微表面模型多次散射
    • 微结构模型(存储开销)
    • 多层材质模型(SpongeCake)
    • 布料、皮肤、头发
  • AI + 材质
    • 神经网络材质表达
    • 材质推导和重建
  • 展望
    • Physics vs. Data
    • 材质模型何时统一:surface & volume
      • From microfacets to participating media: A unified theory of light transport with stochastic geometry. SIGGRAPH 2024
    • 材质 + AI

当代游戏引擎光照与几何处理前沿技术

王希,不鸣科技

  • 现代游戏要60FPS,10-30ms生成1frame
  • 工业界实现了大量的hack
  • MCRT -> Reflective Shadow Maps,Ray Marching
  • LPV:
    • SVOGI & VXGI:体素化全局光照(前者采用八叉树)
    • SSGI:屏幕空间全局光照,开销小

Lumen

  • 开销最大、最不稳定的问题:Visibility(Ray Trace),每个像素只能承担1/2根ray
  • 空间体素存储光照信息,Screen Probe Structure
  • 世界空间 Radiance Cache
  • 把各种算法在不同情况下结合起来
  • Nanite - Skipped

ReSTIR GI

展望

  • 看起来对的就是对的

  • 从PBR到AI: Data Driven,Neural Network based Material

交流环节

Unity vs. Unreal

  • 并行化问题:UE和Unity仍是几十年前的古典架构,没有太多区别
    • 主线程 + 其他线程
    • 用一些Trick处理并行化的问题(物理模拟、Gameplay AI等),类似 Vic3 的多核优化
  • 引擎魔改问题
    • Unreal高度集成化,底层C++,对于引擎的修改大多数是直接修改源码
    • Unity大多数情况可通过暴露的C#进行修改,大厂会养自己的团队魔改底层;更利好个人开发者
  • Nanite:主要问题在于显存带宽而非算力

脚本选型

  • Apple的更新政策,导致更多开发者倾向采用脚本作为资产的方式开发,以规避更新审核
  • Lua vs. Python
  • Lua: 轻量化、效率较高
    • practice: Roblox
    • Lua-jit,但最初开发者神隐了
    • Luau:强类型的Lua,类似TS和JS
  • 个人更倾向Lua

图形API

  • DX12 vs. DX11:12更底层,上限更高,可以魔改pipeline(可以在传统vertex-fragment基础上修改流水线)
  • Vulkan:类似于DX12,更加底层,同时难度也更高,目前正在适配移动端,属于未来的技术

光线云:云原生实时渲染引擎 - RaysEngine

王锐,ZJU,光线云

公司背景

ZJU CAD&CG,基于渲染技术在工业界发展

EAR制裁(0%美国技术可用)

技术背景

  • Web 3.0:个人化时代

  • XR、三维可视化

  • 端云协同的渲染

端云协同引擎

实时渲染:GPU与渲染流水线

王锐,同上

概述

  • 求解渲染方程

    • Path Tracing
    • 有限元方法,Radiosity
  • 实时

    • 传统:30FPS
    • VR:90FPS
    • 晕3D问题:可能需要更高的刷新率
  • Local Shading:只算直接光:

渲染管线

Rendering PPL

  • 历史:Geometry Engine(SGI 1982) -> Voodoo -> NVIDIA GeForce RTX 4090
  • 图形工作站 -> 2D图形计算卡 -> 3D显卡

早期阶段

  • Model -> Vertices -> Pixels -> Color Pixels
  • Transform&Lighting -> Rasterizer -> Shader
  • CPU应用 -> 系统调度 -> GPU

固定管线

  • 固定函数绘制流水线(Fixed-function Rendering Pipeline)

  • 早期~2000

  • 1992,SGI成立OpenGL
  • Vertex -> Fragment -> Blending
    • Model: Modeling, Vertex-Shading, Transformation, Clipping(裁剪)
    • Screen Vertices: Projection, Rasterization
    • Pixels: Visibility
  • 一个Pixel可能有多个Fragment,故OpenGL命名为Fragment

可编程管线

  • 核心问题:Vertex、Fragment阶段的自定义

  • Programmable Shaders

  • 发展:GPGPU(General-purpose GPU),发展到CUDA,利用GPU并行能力

  • 着色阶段发展

    • 几何着色器(Geometry Shader): 在 Vertex 和 Fragment 中间
    • Tessellation Shader(细分曲面着色器)

Graphics API

  • OpenGL
    • 最新版本:4.6,已停止演化
    • OpenGL ES - 移动端
      • 基于 OpenGL 4
      • Version 3.2
      • Shader based
    • WebGL - 浏览器
      • 基于 OpenGL 3.0
    • 发展历史
      • 2.0 - 可编程管线
      • 3.2 - 几何着色器
      • 4.1 - Tessellation Shader
      • 可拓展插件:Mesh Shader
  • WebGPU
    • W3C维护,发展中
  • Vulkan
    • 最新版 Version1.3
    • Vulkan vs. OpenGL
      • 应用负责内存、线程等管理
      • 上手难度大
      • Driver通用性
  • DirectX
    • Windows
    • 跨平台性差
    • 非向前兼容

着色语言

  • RenderMen: 2019 Turing Award

    • 辐射度算法,引入了着色语言(Shading Language)
  • HLSL、GLSL、MSL(Metal)、WGSL(WebGPU)

    • C Styled
  • SPIR-V Toolchain
    • 从不同着色语言转为跨平台API调用

GPU光追

  • 2018,NVIDIA RTX
    • Previous: OptiX
    • 发布了 Mesh Shader、RTCore

实时渲染方法

王璐,山东大学

Shadow Mapping

  • 2-pass Algorithm
    • Light pass: 从Light方向看去得到深度图
    • Camera pass: 着色点投影到光源矩阵下,比较1st pass的深度
      • Vertex: 着色点对光源作变换
      • Fragment: 根据深度图作Visibility test
    • Shadow Acne
      • 阴影自遮挡问题
      • 方案1:前向面和后向面都做一次着色,计算平均值得到深度图(开销大)
      • 方案2:得到深度图过程中,一个bias的着色(可能会漏光)
      • 高分辨率问题
      • 方案:在视锥中不同区域绘制同样分辨率的材质(近处阴影细节多,远处阴影细节少)
  • Soft Shadow
  • PCF(Percentage-closer Filtering)
    • 2Pass中,查询着色点周围一圈区域(Filter)
    • 受Filter Size影响
  • PCSS
    • 本质:自适应边缘的PCF
    • Step1: 进行一个固定大小的查询,算出周围遮挡体深度的平均值
    • Step2:计算半影半径
    • Step3:PCF
  • VSSM
    • 切比雪夫不等式
    • 借助Mipmap/SAT生成阴影纹理
    • 问题:漏光、存储开销变高(深度图、深度图平方、Mipmap)
  • DFSS
    • Ray Marching:基于SDF
  • UE 应用
    • Shadow Map
    • Virtual Shadow Map
    • SDF
    • RT + 去噪
    • 预计算 / 动态GI

3D Space GI

  • 开销小:One-bounce
  • PRT(Precomputed Radiance Transfer)
  • VXGI(基于体素的GI)
    • 体素存储
      • 八叉树:很难在GPU上存储
      • Clipmap:不同LOD存储不同数目体素
    • 1st pass: Light pass,获得次级光源注入体素
    • 2st pass: 根据着色点查询周围的Cone中的体素,累计间接光
    • 漏光、遮挡问题(体素内部不考虑可见性)
  • Light Map
    • 预烘培光照贴图
  • Light Probe
    • DDGI

Screen Space GI

SSAO

AO:渲染方程中Visibility项

  1. 在屏幕空间中,判断每个像素表面周围(法向半球体)采样点是否落在模型内部
  2. 根据外部点/内部点的比例计算遮挡系数

SSR

【没懂】

  • 在边缘处作一个滤波避免割裂

Real-time RT

  • Graphics API + Hardware
  • 目前只能承担1SPP
    • 取上一帧的大量数据去噪(TAA)
  • 鬼影、遮挡问题
  • 插帧、超分:Tensor Core 利用网络生成高分辨率结果

  • Nvidia Real-time Denoiser(NRD): 非网络

  • Nvidia DLSS

研究进展

  • Neural Basis Function for PRT
  • Real-time Woven Fabric Rendering
  • VR中适用SSR:左右眼显示效果不一致,提出了一致性处理方法

展望

  • 复杂几何体:动物皮毛等复杂结构难以用Nanite处理
  • 复杂材质
  • 复杂光源
  • 更多次弹射的GI
  • 去噪:快速运动场景中可用信息很少,如何去噪

高质量LBVR应用研发分享

XVERSE元象

LBVR简介

  • Location-based VR,沉浸式,在特定地点提供沉浸式体验
  • 幻旅之门项目
    • PICO & Quest: Android平台
    • Vision Pro:闭源,暂不支持UE

VR性能优化

  • 性能要求:90FPS,晕动症问题

  • Meta: ASW(Application SpaceWarp)

    • 插帧实现高帧率
    • UE插件支持
  • 模型减面

    • 边折叠:QEM
    • 顶点合并, etc.
  • QEM

    • 收缩一条边,收缩一条边上的两个顶点,设定收缩阈值,计算损失矩阵
    • 停止迭代:豪斯多夫距离
      • 问题:效果不可控、没有结合业务现状(减面效果与视角无关)
    • 方案:加入剪影Loss

手势追踪绑定

  • 交互动作:适配不同模型的人物需要调整
    • 手K
    • 基于视觉的动捕(不成熟)
    • 动捕设备

资产优化

  1. UE PSO(Pipeline State Project)

    • 降低第一次打包时卡顿
    • 设置开启PSO采集->打包->运行采集->转换缓存->重新打包
  2. 双目视频压缩

    • 全景图(球形、立方体),双目视差

    • MV-HEVC

      • 存一个视角的信息+另一视角的部分信息