路径追踪的实时渲染概述
大家好,本文是对Real-Time Path Tracing and Beyond和它的视频:HPG 2022 Monday, Day 1 (enhanced)学习的总结,并结合我的理解进行了一些延伸
得益于下面的技术进步,使得通常应用于离线渲染技术中的路径追踪能够应用于实时渲染:
- RTX显卡带来的硬件光追管线
使用该管线可使射线与场景相交计算大幅提升;并且不再需要自己维护BVH加速结构,而是直接使用管线默认提供的加速结构来代替 - 新的采样方法:ReSTIR
该采样方法通过在渲染过程中减少采样的方差,带来了几十倍的速度提升;并且能够优化有大量光源的情况;并且支持更健壮的光源路径(比如光源隐藏在门后的情况) - 新的降噪技术
主要代表为SVGF等结合时间和空间上的信息一起做Filter的降噪算法以及基于神经网络降噪技术
-
渲染管线
- 前端
- 光照传输
- 后处理
- slang: 着色器语言中的Typescript
-
我构想的具体实现的方案
- 应用领域
- 技术栈
- 技术方案
- 初步的开发计划
渲染管线
实时渲染路径追踪的渲染管线如下图所示:
管线分为三个部分:
前端->光照传输->后处理
下面依次讨论:
前端
前端主要负责组织场景数据,包括构造和更新场景数据
有两个实现方案:
- 使用基于光追管线提供的BLAS和TLAS来组织场景数据,并使用它的API来更新场景数据
- 对于不支持光追管线的情况,也可以自己构造和更新BVH
- 如何使用LBVH算法在CPU端构造BVH,可参考如何用WebGPU流畅渲染百万级2D物体?->实现BVH
- 如何改进GPU端遍历BVH,可参考WebGPU实现Ray Packet
- 如何在GPU端构造BVH并具有良好的访问性能,可参考PLOC算法,参考代码在这里
- 如何更新BVH,可参考更新BVH树
光照传输
光照传输使用路径追踪来实现直接光照和间接光照的计算。
不过对路径追踪进行了下面的改进:
- 使用ReSTIR采样方法
- 使用RTXDI计算直接光照,这是基于ReSTIR的
- 使用ReSTIR GI计算间接光照
- 可以将其进一步改进为ReSTIR PT
原文还对frameless render进行了讨论,不过我不是很了解
后处理
后处理包括降噪->DLSS->其它后处理(如tone map)
这里讨论降噪
原文使用了Nvdia的NRD Denoiser来降噪,它相当于SVGF的改进版
我其实更看好神经网络降噪,这也是最近的发展趋势
原文中也提到了一种神经网络降噪的方法:Neural Temporal Adaptive Sampling and Denoising
它还有改进的论文:
Interactive Monte Carlo Denoising using Affinity of Neural Features
通过参考下面的资料:
- 论文翻译】基于深度学习的蒙特卡罗去噪研究进展-2021
- Denoising VOL.2 | 神经网络结合滤波器方法
我确定了通过依次实现下面的论文,可以逐渐改进蒙特卡洛降噪器:
- LBF
A machine learning approach for filtering Monte Carlo noise - 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
slang: 着色器语言中的Typescript
因为使用了统一的路径追踪算法,所以只需要一个shader
这个shader原文作者写了1万行,规模相当大,因此需要一种更容易维护、更模块化的shader语言
因此,原文作者使用了slang,它支持接口定义等语法,貌似可以进行单元测试,可以编译为GLSL、HLSL等着色器语言
slang相当于Typescript,也就是在原始的着色器语言之上增加了一层编译器
我构想的具体实现的方案
下面是我构想的具体实现的方案:
应用领域
Web3D
技术栈
- WebGPU
如果渲染器是运行在浏览器中的话,则使用WebGPU这个图形API。但是目前WebGPU只有计算管线而没有光追管线,所以我们就需要自己维护BVH - WebGPU Node
如果渲染器是运行在Nodejs中的话,则可以使用WebGPU Node这个开源的Nodejs项目。它底层封装了Vulkan SDK,上层使用了dawn-ray-tracing项目,提供了WebGPU API,实现了在Nodejs环境中使用WebGPU API和光追管线来实现硬件加速的光线追踪。
具体介绍可见WebGPU+光线追踪Ray Tracing 开发三个月总结
技术方案
我们应该会优先使用WebGPU Node,因为它支持光追管线
我们使用自主开发的神经网络降噪器来降噪
我们基于自主开发的Meta3D:开源Web3D低代码平台,通过实现多个独立且可组装的扩展来开发可维护、可扩展、可读的渲染器
初步的开发计划
1.实现基础的神经网络降噪器
需要重点实现:
- Neural Temporal Adaptive Sampling and Denoising
- LBF
- KPCN
需要使用我开发的深度学习库,并将其改为支持GPU端训练和推理
2.直接使用基础的路径追踪算法来渲染基本的场景,并用神经网络降噪器来降噪
3.使用slang来写着色器语言,编译为GLSL
4.实现动态场景
5.将渲染器拆成光照传输和降噪器两个部分,并重构为基于Meta3D的扩展
6.将光照传输改为使用RTXDI实现直接光照、使用ReSTIR GI实现间接光照
推荐阅读
-
KCF追踪方法的工作原理概述
-
《GAMES202笔记:实时光线追踪的学习备忘录》
-
路径追踪的实时渲染概述
-
利用包围盒加速的光线追踪实现图形渲染
-
图形学渲染基础(五):光线追踪(Ray Tracing)的探索
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
如何轻松使用JMeter进行HTTP接口测试 - 一步步教你设置线程组、 cookie、默认值与Sampler,加上响应断言和监听器,打造基础测试案例。针对复杂情况,将子系统和流程测试分类组织,确保数据一致性。同时,别忘了感谢阅读,给新手提供实战学习资源与全套测试指南,助你轻松踏上自动化测试之路! - 在"测试计划"点击右键,添加"线程组"并设定初始"线程数"和"循环次数" - 配置"HTTP Cookie管理器"与"Http请求默认值",输入目标系统信息,如域名、端口、协议等,让所有相关Sampler共享这些默认设置 - 在线程组内增加"HTTP Request"的Sampler,并填入接口详情,比如路径、请求方法及参数 - 添加"响应断言"检查接口返回结果,通过正则表达式验证预期结果 - 安装监听器,实时查看测试执行状况 - 如需处理流程性接口,请依次添加多个相关Sampler,关联前后请求间的上下文数据 特别提示:为了帮助大家避免学习中的曲折,我们准备了详尽的视频和文档资料库,无论你是软件测试的新手还是老司机,都能从中找到所需的全方位支持。只需点击下方链接加入我们的学习交流社群,就能立刻获取这份珍贵的学习宝藏!再次感谢您的耐心阅读,愿它成为您前行路上的一大助力!
-
实时渲染基础 (7) 光线追踪
-
深入分析英伟达™(NVIDIA®)的实时光线追踪焦点色散技术
-
游戏中的实时光线追踪技术和技巧 - 体积贴图