实时光线追踪基础 - gtc on demand...并大幅提高了性能 41...

43
杨雪青 NVIDIA 开发者技术工程师, 20191218实时光线追踪基础

Upload: others

Post on 18-Jan-2021

5 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

杨雪青 NVIDIA 开发者技术工程师, 2019年12月18日

实时光线追踪基础

Page 2: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

2

概要

光线追踪及算法简介

Classical Ray Tracing, Distribution Ray Tracing, Path Tracing, Photon Mapping

GPU光线追踪

光线追踪API,光线追踪GPU

游戏中的实时光线追踪特效

反射,阴影,全局照明, 焦散等

游戏引擎中的光线追踪

UE4, Unity

Page 3: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

3

光线追踪及算法简介

Page 4: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

4

什么是3D渲染?光线追踪

射线的数学定义

射线的原点(位置):O

射线的方向:D

射线上的任意点可表示为:P = O + t*D, t代表P与O的距离

Page 5: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

5

光线追踪重心坐标

P0

P1

P2

A = A0 + A1 + A2P

A0 = 三角形P2P1P的面积

A1 = 三角形P0P2P的面积

A2 = 三角形P1P0P的面积A1

A2

A0

P = 射线与三角形P0P1P2交点

w0 = A0/A

w1 = A1/A

w2 = A2/A

(w0)

(w2)

(w1)

Page 6: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

6

光线追踪重心坐标

(u0, v0)

(u1, v1)

(u2, v2)

u = w0 * u0 + w1 * u1 + w2 * u2

v = w0 * v0 + w1 * v1 + w2 * v2

P

(u, v)

Page 7: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

7

光栅化

Page 8: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

8

什么是3D渲染?光线追踪

Page 9: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

9

什么是3D渲染?物体上的颜色从何而来?

直接光照

间接光照

自发光

Page 10: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

10

1980: CLASSICAL RAY TRACING

Image now generated in real-time, in OptiX (was 74 minutes per frame in 1980)

Page 11: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

11

CLASSICAL RAY TRACING

Page 12: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

12

1980: CLASSICAL RAY TRACING

对于每个像素

• 从视点发射光线到场景

• 从交点向每个光源发射一条光线: shadows

• 为每次折反射生成新的光线

highly polished surface Generated using OptiX sample “optixWhitted”

Page 13: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

13

1984: COOK STOCHASTIC (“DISTRIBUTION”) RAY TRACING允许Shadow Ray射向面积光上任意一点

允许在理想反射方向周围对Specular Ray进行扰动

在帧间某时发射以制作运动模糊。

glossy surface

Page 14: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

14

STOCHASTIC RAY TRACING

Page 15: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

15

Path Tracing: 发射光线并沿着光线的一系列相互反射进行跟踪

“渲染方程”

确保在光线数量达到极限多时能得到正确结果

1986: Kajiya-Style Diffuse Interreflection

diffuse surface reflection

Page 16: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

16

渲染方程

出射亮度 自发光亮度 反射所有外部入射光线的亮度

BRDF

Page 17: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

17

PATH TRACING

Page 18: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

18

PHOTON MAPPING

从光源发出射线,追踪光子的行进路线

视点

焦散(Caustics)

Page 19: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

19

如何用有限的采样次数来完成任务

蒙特卡洛采样积分+重要性采样 → 大量采样逼近真实解

实时渲染每像素至多几个采样(spp/samples per pixel)

低采样率导致噪点, 使用降噪器产生高质量画面

随机采样 + 降噪

Page 20: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

20

GPU光线追踪

Page 21: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

21

光线追踪软件接口

Page 22: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

22

光线追踪API概览

光线追踪API与硬件

▪ DirectX Raytracing (简称DXR)

▪ DXR为D3D12的直接扩展

▪ 全新管线,包含光线追踪的专用Shader类型与资源

▪ 紧密结合传统光栅化与通用计算管线,易于实现混合渲染

▪ 通过D3D12已有机制进行提交和调度

▪ 与原有渲染管线共享资源,无需转换

▪ Vulkan Ray Tracing (简称VKRay)

▪ 使用扩展VK_NV_ray_tracing

▪ 全新管线,包含光线追踪的专用Shader类型与资源

▪ 紧密结合传统光栅化与通用计算管线,易于实现混合渲染

▪ 通过Vulkan已有机制进行提交和调度

▪ 与原有渲染管线共享资源,使用无捆绑模式(bindless)

▪ Khronos标准制定当中

Page 23: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

23

光线追踪API:高层结构

光线追踪API与硬件

加速结构Acceleration Structures

着色器表Shader Table

光线追踪管线Ray Tracing Pipeline

资源Resources

光线求交调用TraceRay()

属性索引着色结果

Page 24: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

24

光线追踪管线 (Ray Tracing Pipeline)

光线追踪API与硬件

1. 发射光线▪ 新Shader类型Ray Generation Shader

▪ DXR: DispatchRays(); HLSL: TraceRay()函数

▪ VKRay: vkCmdTraceRaysNV(); GLSL: traceNV()函数

2. 求光线与物体的交点▪ 遍历加速结构(Acceleration Structures)

▪ 新Shader类型Intersection Shader(可选)

3. 处理交点 — 进行着色,继续发射光线,等等▪ 新Shader类型Closest Hit Shader(可选)和Any Hit Shader(可选)

4. 处理无交点的情况 — 继续发射光线,或终止

▪ 新Shader类型Miss Shader

Hit Group

Page 25: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

25

▪ AS是树形数据结构,用于加速光线遍历

▪ 两级层次结构

▪ 底层加速结构(BLAS): 对应单个物体,针对基本几何体信息(三角形及包围盒)

▪ 顶层加速结构(TLAS): 对应场景,存储多个BLAS的实例(Instance)信息,包括坐标变换数据、材质等

▪ AS由驱动创建维护

▪ 应用程序调用API进行管理

▪ 两种方式: 重建(Build),更新(Update)

DXR: BuildRaytracingAccelerationStructure()

VKRay: vkCmdBuildAccelerationStructureNV()

加速结构(Acceleration Structure)

光线追踪API与硬件

Page 26: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

26

RayGen Miss

RayType 0

Miss

RayType 1

Hit

Geometry 0RayType 0

Hit

Geometry 0RayType 1

Hit

Geometry 0RayType 0

Hit

Geometry 0RayType 1

Hit

Geometry 1RayType 0

Hit

Geometry 1RayType 1

0 1 2 3 4 5 6 7 8 9 10

Instance A Instance B

InstanceContributionToHitGroupIndex

▪ 着色器表用于索引一次光线追踪中可能用到的所有资源

▪ 顶层加速结构(TLAS)中的节点指向着色器表中的对应记录

▪ 由多条等长的记录构成

▪ DXR:着色器表中可存放常量、resource view等数据

▪ VKRay:资源使用无绑定模式(Bindless),着色器表中只存放资源的全局索引

光线追踪API与硬件

Shader Record

Shader Identifier

uint64

uint

float

int

Shader Record

着色器表(Shader Table)

DXR

VKRay

Page 27: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

27

光线追踪API:全景

光线追踪API与硬件

DispatchRays()

Hit Group

TraceRay

Shader Identifier

Local Root Arguments

Ray Generation

Shader

Ray Tracing

Pipeline

Shader Table

Page 28: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

28

支持DXR与VKRay的GPU

光线追踪API与硬件

无RT Cores

简单的RT特效

光线数量少

有RT Cores

复杂的RT特效

同时运行多种特效

光线数量多

Page 29: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

29

非RTX GPU软件模拟BVH遍历

Page 30: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

30

TURING RT CORE使用硬件加速代替软件模拟

▪ 用于加速BVH遍历及光线与三角形的求交检测

Page 31: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

31

TURING的光线追踪性能>10 Giga Rays

Page 32: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

32

游戏中的实时光线追踪特效

Page 33: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

33

光线追踪与传统渲染相结合

游戏中的实时光追特效

▪ 光栅化: 主要渲染流程,如前向渲染、延迟渲染

▪ 光线追踪: 次级光线效果,如反射、阴影

▪ 通用计算: 模拟,后处理

Page 34: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

34

Page 35: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

35

光追阴影

游戏中的实时光追特效

▪ 光追阴影的使用

▪ 广泛应用于传统阴影算法难以解决的面光源、点光源阴影

▪ 可用于多光源同时产生阴影

▪ 需要使用降噪器对结果进行处理

▪ 光追阴影的优势

▪ 产生精细的半影效果

▪ 在很多情况下性能优于传统阴影(UE4)

▪ 实现代码简洁

Page 36: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

36

光追反射

游戏中的实时光追特效

▪ 反射是当前性价比最高的光追特效

▪ 具有传统SSR无法比拟的效果优势

▪ 单次光追反射可使用deferred shading

▪ 反射的应用场景

▪ 水体:海面、河流

▪ 天气效果:下雨场景,潮湿地面、墙面

▪ 材质:金属,瓷器,大理石,漆面,玻璃,冰面

Page 37: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

37

光追GI与AO

游戏中的实时光追特效

▪ 光追GI的优势

▪ 实时更新,更好地支持动态物体

▪ 弥补传统SSGI信息不足的问题

▪ 有效解决传统GI的漏光问题

▪ 光追AO的优势

▪ 解决传统SSAO信息不足的造成的错误结果

图片来源:METRO EXODUS

Page 38: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

38

光追焦散

游戏中的实时光追特效

▪ 光追焦散的优势

▪ 传统方法缺乏有效的实现方法

▪ 焦散性能较高,不涉及复杂的材质

▪ 准确反映与水面的交互

▪ 有效增加游戏的实时互动性

Page 39: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

39

游戏引擎中的光线追踪

Page 40: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

40

Unreal Engine 4

游戏引擎中的光线追踪

▪ 推荐使用版本UE4.24

▪ https://github.com/EpicGames/UnrealEngine/tree/4.24

▪ 修复了4.22以来的大量问题,并大幅提高了性能

Page 41: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

41

UE4.24支持的主要光追特性

游戏引擎中的光线追踪

▪ 光追效果

▪ 反射, 折射, 阴影, 半透明, 环境光遮蔽(AO), 实时全局照明(GI)

▪ Path Tracing (离线渲染)

▪ 支持列表

▪ 光源: 直射光, 聚光, 点光, 天光, 面光, 图像光(IBL), 以及这些光源的阴影

▪ 材质: 普通, 无光, 双面, 函数

▪ 模型: static w/ wpo, skeletal, geometry cache, landscape, foliage, procedural mesh

▪ 粒子: Niagara (sprite, ribbon, mesh)

Page 42: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

42

Unity

游戏引擎中的光线追踪

▪ Unity 2019.3 beta

▪ Ray Tracing in HDRP (Preview)

▪ HDRP = High Definition Render Pipeline

▪光线追踪特性

▪ 面积光软阴影,反射,半透明,AO,GI

Page 43: 实时光线追踪基础 - GTC On Demand...并大幅提高了性能 41 UE4.24支持的主要光追特性 游戏引擎中的光线追踪 光追效果 反射, 折射, 阴影, 半透明,

谢谢!