> For the complete documentation index, see [llms.txt](https://okzkx.gitbook.io/blogs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://okzkx.gitbook.io/blogs/game-tech/engine/render/tutorials/games-202/12.-real-time-ray-tracing-1.md).

# 实时光线追踪 1

Real-Time Ray Tracing

* 体积，散射，皮肤，毛发，将会在离线渲染的课上教

#### RTX

* 光线追踪实质上是做场景的 BVH 树的遍历
* RTX 专门遍历树，GPU 遍历树较慢
* 100 亿跟光线每秒，约等于每帧每像素一条光线

#### SPP 光路样本

sample per pixel，最基本的 spp 是两次弹射，四条光路

![image-20220309184452095](https://image-1253155090.cos.ap-nanjing.myqcloud.com/202303281824791.png)

* 光路样本
  1. 1 rasterization primary
  2. 1 ray primary visibility
  3. 1 ray secondary bounce
  4. 1 ray secondary visibility
* 最基本的两次弹射光路
* 第一条 primary 等价于光栅化
* 1 SPP 看作 3 条光线对场景求交

#### Key technology 核心技术

* 实时光追也是使用 path Tracing，出现是因为 GPU RTX 架构
* 硬件的突破造成光追的广泛应用
* 降噪技术是配合光追的重要技术

### Denoising 降噪

#### goads

实时光追目标

* 不模糊，没 Bug，具有细节，速度快
* 当前方法都不可能在短时间内实现

![image-20230328183541498](https://image-1253155090.cos.ap-nanjing.myqcloud.com/202303281835559.png)

#### Temporal

* 时间上的滤波，时间上的复用
* 认为前一帧已经滤波完毕
* 利用帧之间的连续性，认为前一帧的颜色输出可以对当前帧做重大贡献

**Back projection 方法求 motion vector**

![image-20230328183824124](https://image-1253155090.cos.ap-nanjing.myqcloud.com/202303281838387.png)

1. 取像素点的屏幕坐标
2. 求像素点的世界坐标
3. 取对应物体上一帧的变换矩阵
4. 求像素点在上一帧的世界坐标
5. 求像素点在上一帧的屏幕坐标
6. 计算位移向量

* motion vector 是准确的，不像深度学习的光流，只有图像信息，没有物体信息
* 也可以通过 z-buffer 里的深度信息求像素点的世界坐标

### Temporal Accum Denoising

1. 当前帧自己的降噪
2. 和上一帧的输出 Color Buffer 线性混合
3. 上一帧的权重为 80% \~ 90%

![image-20230328184223325](https://image-1253155090.cos.ap-nanjing.myqcloud.com/202303281842385.png)

#### 滤波效果

* 降噪前图片看起来暗
* 因为噪点亮度超过显示范围
* 整体图片的亮度期望降噪前后应当是相同的
* 对比真实图片，降噪会亮化 AO 信息

#### Temporal Failure 时间方法的缺陷

* 画面巨变，需要预热 burn-in period
  * 换场景
  * 镜头切换
* 屏幕外信息
  * 看前方，倒着走
* 出现原本被遮挡的位置
  * 容易出现残影（拖影、鬼影）
* 阴影出现滞后情况
* 反射也会出现滞后情况
  * 任何与环境光相关的着色改变，都会出现滞后
  * 因为在物体与环境光相对移动后，上一帧的像素着色和当前帧的输入已经是不同了，没有对当前帧贡献的意义

#### Adjustments to temporal failure

* 提高当前帧权重
* 是否应当废弃该位移向量
