首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >什么是真实感渲染(三):前沿趋势之实时光线追踪

什么是真实感渲染(三):前沿趋势之实时光线追踪

作者头像
Peter Lu
发布于 2022-05-17 04:08:55
发布于 2022-05-17 04:08:55
1.5K0
举报
文章被收录于专栏:LETLET

前两篇我们分别介绍了渲染的发展史真实感渲染的具体技术,作为本系列的最后一篇,聊一下渲染相关的前沿技术。

个人比较感兴趣的前沿技术主要是实时光线追踪,VR&AR以及神经渲染三个领域。本文介绍实时光线追踪。

栅格化算法计算量小,且更适合GPU流水线。在真实感渲染方面借鉴了光线追踪的思想,也极大地提高了阴影,反射和折射方面的渲染效果。

图片来自’ Bringing Ray Tracing to Vulkan’

但是,栅格化中的真实感渲染引入了大量的近似和假设,乍看上去效果提升了很多,但没有对比就没有伤害,比如上图栅格化与光线追踪的对比。另一个问题是在真实感渲染上各种奇技淫巧堆叠在一起,需要记录很多中间状态,每一个像素都会用到相关的信息,这导致内存开销巨大以及系统的复杂。光线追踪算法简单健壮,尽管计算量巨大,随着算法的优化,硬件的升级,两者是此消彼长的趋势。因此,人们逐步采用实时光追技术来替代渲染管线中的模块。我们也不难理解十年前的卡马克所下的定论 “Eventually, Ray tracing will win” 。

2018年,微软提出了DirectX Ray Tracing(DXR)的API,提供了Ray Tracing Pipeline的雏形,而Nvidia推出了新一代的RTX显卡,提供了Ray Tracing硬件加速的能力。2020年,Vulkan也推出了Ray Tracing规范,同DXR非常相似。

图片来自’Introduction to NVIDIA RTX and DirectX Ray Tracing’

如上图,绿色模块是我们需要在shader中实现的部分,其余部分则对应ray tracing 的渲染管线。Ray Tracing的渲染管线非常简洁,并能很好地模拟光线的反射,折射以及阴影效果。首先,在Ray Generation中创建射线,通过射线求交的算法来判断是否和场景中的物体相交(Hit),这里分为三种情况,'Miss','Closet Hit'和'Any Hit'。Miss情况下,通常我们会以环境光贴图作为光源来计算该射线的贡献,Closet则表示该射线命中了某物体表面,则基于该物体材质计算该射线的贡献,从而实现反射,折射等效果,而Any用来判断该射线和光源之间是否有遮挡物,以此来判断该射线的贡献,从而产生了阴影效果。而在光线追踪中,因为需要大量的射线求交算法,往往需要构建BVH场景树,RTX技术在GPU中实现了构建场景树和射线求交的查询,也就是硬件加速能力。

图片来自’ State-of-the-Art and Challenges in Game Ray Tracing’

SIGGRAPH2019的Ray Tracing专题报告展望了实时光线追踪的未来。其中,SEED团队分享了自己的混合渲染管线(上图),管线由一个接一个的阶段串联,而每个阶段采用最合适的技术来实现。

图片来自‘Lumen | Inside Unreal’

2021年,UE5的视频又掀起了一波热潮,新一代的渲染引擎Lumen则是一套完整的光线追踪管线,分为Software和Hardware两种形式。其中,software ray tracing是一种混合的光线追踪解决方案,首先在屏幕空间采用光追(Screen Trace),其次是两米以内的区域(Mesh Distance Field Trace),最后是这个场景空间(Globe Distance Field Trace),上图表示了三种策略各自的贡献。这里,Lumen仅支持简单物体的数据预处理。Software的好处是不依赖硬件,缺点是有限的几何数据类型。Hardware的好处是高质量,缺点是计算量巨大,且依赖显卡。

图片来自‘Lumen | Inside Unreal’

目前而言,光追整体上还是太慢,硬件上仅能做到每帧每像素半个射线,而在室内场景中通常需要200+的射线,400倍的差距(UE给出的数据)。当然,也有很多方案来弥补这个差距,比如降噪技术(上图),通常,相邻区域获取的光源比较接近,相近时间下区域内接收的光源也比较接近,降噪技术则利用这种空域和时域上的连续性,将一条射线的贡献尽可的延伸到周围像素或下一帧的像素,榨干每一次计算的价值。还有其他类似的思路,比如radiance cache,DLSS超采样以及RESTIR重采样等,这里就不深入展开了。

Nvidia也给出了Ray Tracing的路线图,去年也推出了Ray Tracing Gems II。AMD在上周(4.12)也推出了自己的ray tracing库---HIP。可见,实时光线追踪目前主要是由硬件和游戏厂商推动,推动力主要来自工业界,其生态也在不断地完善。

个人而言,我是在2018年底开始学习光线追踪的相关技术,当时上映了‘阿丽塔:战斗天使’,阿丽塔浮出水面的画面深深地触动了我。而我对实时光线追踪的未来,就好比我看你的时候,眼睛是发光的,内心是虔诚的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LET 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
敲下 vite 命令后,server 做了哪些事?
大家好,我是码农小余。当我们在终端上敲下 vite(vite dev、vite server)到返回下图结果
码农小余
2022/06/16
7240
敲下 vite 命令后,server 做了哪些事?
手写 Vite Server 系列(3)—— 更细粒度的复用
在该系列的第一篇文章,我们实现了 Vite Server 的一些处理文件的功能(TS、TSX、CSS),但这个 Server 的功能是写死的,如果需要新增功能,就需要修改 Server 的代码,没有任何的可扩展性。
CandyTong
2023/02/24
4830
手写 Vite Server 系列(3)—— 更细粒度的复用
PluginContainer,管理你的 vite 插件
大家好,我是码农小余。上一小节我们了解 ModuleGraph,知道它在解析、加载、转换模块时都会用到 pluginContainer 的 API。但是具体 pluginContainer 有哪些能力?Vite 的插件与 rollup 的插件又有什么关系?本文就来揭晓这些问题的答案。
码农小余
2022/06/16
1.2K0
PluginContainer,管理你的 vite 插件
如何开发Vite3插件构建Electron开发环境
开发新版本 Vue 项目推荐你使用 Vite 脚手架构建开发环境,然而 Vite 脚手架更倾向于构建纯 Web 页面,而不是桌面应用,因此开发者要做很多额外的配置和开发工作才能把 Electron 引入到 Vue 项目中,这也是很多开发者都基于开源工具来构建 Electron+Vue 的开发环境的原因。
liulun
2022/11/18
1.9K0
如何开发Vite3插件构建Electron开发环境
手把手教你手写一个 Vite Server(一)
之前写过几篇 Vite 的文章,对 Vite 的概念也有一定的理解了,但理解归理解,仍然觉得很虚,也不知怎么的,这几个概念突然就变成一个这么强大的工具。。。
CandyTong
2022/07/18
2.1K0
手把手教你手写一个 Vite Server(一)
点击页面元素,这个Vite插件帮我打开了Vue组件
前言 大家好,我是webfansplz.这两天肝了个Vite插件,本文主要跟大家分享一下它的功能和实现思路.如果你觉得它对你有帮助,请给一个star支持作者 💗. 介绍 vite-plugin-vue-inspector的功能是点击页面元素,自动打开本地IDE并跳转到对应的Vue组件.类似于Vue DevTools的 Open component in editor功能. 用法 vite-plugin-vue-inspector支持Vue2 & Vue3,并且只需要进行简单的配置就可以使用. Vue2 //
null仔
2022/04/19
1.2K0
点击页面元素,这个Vite插件帮我打开了Vue组件
如何开发一个完整的 Vite 插件?
Vite 插件与 Rollup 插件结构类似,为一个name和各种插件 Hook 的对象:
江拥羡橙
2023/11/20
1.4K0
如何开发一个完整的 Vite 插件?
Vite插件开发指南:轻松驾驭前端开发利器
Vite 插件扩展了设计出色的 Rollup 接口,带有一些 Vite 独有的配置项。因此,你只需要编写一个 Vite 插件,就可以同时为开发环境和生产环境工作。
微芒不朽
2024/07/20
2820
Vite插件开发指南:轻松驾驭前端开发利器
在浏览器中,把 Vite 跑起来了!
大家好,我是 ssh,前几天在推上冲浪的时候,看到 Francois Valdy 宣布他制作了 browser-vite,成功把 Vite 成功在浏览器中运行起来了。这引起了我的兴趣,如何把重度依赖 node 的一个 Vite 跑在浏览器上?接下来,就和我一起探索揭秘吧。
ssh_晨曦时梦见兮
2022/03/07
1.5K0
Vite 学习(四) - vite 插件开发预学习
上一小节我们对 rollup 和 esbuild 的使用有了基本的了解,了解了二者主要的 hook 使用。vite 插件需要兼容 rollup 和 esbuild 的插件机制,虽然 vite 兼容大部分 rollup 插件,但不是所有钩子都支持,本小节介绍下 vite 中的钩子及插件开发流程。
测不准
2022/02/19
2.2K0
解析配置时,Vite 做了这些事
大家好,我是码农小余。上一小节我们了解了从敲入 vite 命令到最后服务运行起来的详细过程。本节开始我们从流程中选一些核心流程细细品味,首先看入口配置(即 resolveConfig 函数)的逻辑。
码农小余
2022/06/16
2.6K0
解析配置时,Vite 做了这些事
深入浅出 Vite5 中依赖预构建
大多数同学提到 Vite ,会下意识的反应出 “快”、“noBundle”等关键词。
19组清风
2024/01/30
1.2K1
深入浅出 Vite5 中依赖预构建
三大前端构建工具横评,谁是性能之王!
而在Vite之前,还有Snowpack也同样采用了No-Bundler构建方案。那么No-Bundler模式与传统老牌构建工具Webpack孰优孰劣呢?能否实现平滑迁移和完美取代?
Nealyang
2021/03/26
2.2K0
三大前端构建工具横评,谁是性能之王!
Vite该如何使用?Vite学习笔记,持续记录
配置文档:https://cn.vitejs.dev/config/,基于ESM;
房东的狗丶
2023/02/17
4.5K0
Vite Plugin Just so so
大家好,我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder
前端柒八九
2024/05/17
2980
Vite Plugin Just so so
模块之间的依赖关系是一个图
在 解析配置时,Vite 做了这些事 一文中,我们知道了 vite dev 时通过 resolveConfig 去获取并合并配置,处理插件顺序和执行 config 、configResolved 钩子,最后还学习了 alias 以及 env 的配置处理。
码农小余
2022/06/16
2.1K0
模块之间的依赖关系是一个图
Vite Server 是如何处理页面资源的?
我们知道,Vite 在开发环境下,会打开一个 Dev Server 用于预览开发的页面,那么这个 Dev Server 到底做了什么呢?它是怎么做到将我们的代码展示成页面的,接下来我们就来一探究竟。
CandyTong
2022/07/18
9210
Vite Server 是如何处理页面资源的?
这几个为 vue 设计的 vite 插件,你一定要知道!
前面几天陆陆续续介绍了二十多个广受好评的 vite 插件,今天我们围绕 vue 再来介绍一些插件吧!
萌萌哒草头将军
2025/06/07
1410
这几个为 vue 设计的 vite 插件,你一定要知道!
【实战技巧】Vue3+Vite工程常用工具的接入方法
Vue3 正式版已经发布一段时间了,和 Vue3 更配的工具 Vite 也已经投入使用了,本文整理了如何将一些常用的工具整合到项目中。
一尾流莺
2022/12/10
2.1K0
量大管饱,这9个 vite 插件让你的开发更简单!
这个插件是我自己开发的,在生产环境中可以根据 git 作者信息移除非自己的 console 语句,无任何配置负担,优化开发体验~
萌萌哒草头将军
2025/06/07
960
量大管饱,这9个 vite 插件让你的开发更简单!
推荐阅读
相关推荐
敲下 vite 命令后,server 做了哪些事?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档