得益于下面的技术进步,使得通常应用于离线渲染技术中的路径追踪能够应用于实时渲染:
- RTX显卡带来的硬件光追管线
- 新的采样方法:ReSTIR
该采样方法通过在渲染过程中减少采样的方差,带来了几十倍的速度提升;并且能够优化有大量光源的情况;并且支持更健壮的光源路径(比如光源隐藏在门后的情况) - 新的降噪技术
主要代表为SVGF等结合时间和空间上的信息一起做Filter的降噪算法以及基于神经网络降噪技术
使用该管线可使射线与场景相交计算大幅提升;并且不再需要自己维护BVH加速结构,而是直接使用管线默认提供的加速结构来代替
渲染管线
前端->光照传输->后处理
前端
前端主要负责组织场景数据,包括构造和更新场景数据
- 使用基于光追管线提供的BLAS和TLAS来组织场景数据,并使用它的API来更新场景数据
- 对于不支持光追管线的情况,也可以自己构造和更新BVH
- 如何使用LBVH算法在CPU端构造BVH,可参考如何用WebGPU流畅渲染百万级2D物体?->实现BVH
- 如何改进GPU端遍历BVH,可参考WebGPU实现Ray Packet
- 如何在GPU端构造BVH并具有良好的访问性能,可参考PLOC算法,参考代码在这里
- 如何更新BVH,可参考更新BVH树
光照传输
光照传输使用路径追踪来实现直接光照和间接光照的计算。
- 使用ReSTIR采样方法
- 使用RTXDI计算直接光照
- 使用ReSTIR GI计算间接光照
- 可以将其进一步改进为ReSTIR PT
原文还对frameless render进行了讨论,不过我不是很了解
后处理
这里讨论降噪
我其实更看好神经网络降噪,这也是最近的发展趋势
它还有改进的论文:
Interactive Monte Carlo Denoising using Affinity of Neural Features
- 论文翻译】基于深度学习的蒙特卡罗去噪研究进展-2021
- Denoising VOL.2 | 神经网络结合滤波器方法
我确定了通过依次实现下面的论文,可以逐渐改进蒙特卡洛降噪器:
- LBF
- KPCN
Kernel-predicting convolutional networks for denoising Monte Carlo renderings - KPAL
Denoising with kernel prediction and asymmetric loss functions - Monte Carlo Denoising via Auxiliary Feature Guided Self-Attention
- Self-Supervised Post-Correction for Monte Carlo Denoising
A machine learning approach for filtering Monte Carlo noise
slang: 着色器语言中的Typescript
这个shader原文作者写了1万行,规模相当大,因此需要一种更容易维护、更模块化的shader语言
slang相当于Typescript,也就是在原始的着色器语言之上增加了一层编译器
我构想的具体实现的方案
应用领域
Web3D
技术栈
- WebGPU
- WebGPU Node
如果渲染器是运行在Nodejs中的话,则可以使用WebGPU Node这个开源的Nodejs项目。它底层封装了Vulkan SDK,上层使用了dawn-ray-tracing项目,提供了WebGPU API,实现了在Nodejs环境中使用WebGPU API和光追管线来实现硬件加速的光线追踪。
具体介绍可见WebGPU+光线追踪Ray Tracing 开发三个月总结
如果渲染器是运行在浏览器中的话,则使用WebGPU这个图形API。但是目前WebGPU只有计算管线而没有光追管线,所以我们就需要自己维护BVH
技术方案
我们使用自主开发的神经网络降噪器来降噪
初步的开发计划
1.实现基础的神经网络降噪器
- Neural Temporal Adaptive Sampling and Denoising
- LBF
- KPCN
需要使用我开发的深度学习库,并将其改为支持GPU端训练和推理
3.使用slang来写着色器语言,编译为GLSL
5.将渲染器拆成光照传输和降噪器两个部分,并重构为基于Meta3D的扩展
6.将光照传输改为使用RTXDI实现直接光照、使用ReSTIR实现间接光照