在光照中,“光线追踪”是指从摄影机或表面向其他表面或光照模型(尤其是摄像机视图外)射出光束来形成光照。该技术庞大的计算量使其仅在电影制片和高端可视化领域有广泛的应用,但是在实时内容创作上一直被帧数限制。数年来游戏使用了另一种方法替代光线追踪,即光栅化。简单来说,光栅化就是渲染屏幕像素受特定光照的影响,实际本身并不涉及光线追踪的概念,且由于其屏幕空间的本质而有一定的局限。

幸而,随着主流GPU的更新迭代,由硬件支撑的光线追踪逐渐普及,光追可能很快就会成为生成光照的新标准(尤其是在高端平台上)。而高清渲染管线(HDRP)则推出了一种糅合传统光栅化与光线追踪技术的混合光线追踪管线,并用光线追踪重现了诸如环境光遮蔽(AO)、光反射、全局光照(GI)、次表面散射和阴影等常见光效。

以上图和视频为宝马2019款8系双门轿跑车展示,这是Unity、NVIDIA和宝马三方的合作成果。视频中,实景拍摄和光线追踪渲染的无缝融合产生了不可思议的效果,证明了实时光线跟踪技术在耗时、成本远低于离线渲染的前提下,也能制作出极度逼真的图像。

用全新的 HDRP 模板实现光线追踪

Unity 2020.2 推出了全新的 HDRP 模板,我们之前也介绍过该模板,感兴趣的朋友点击这里回顾。

建议大家下载 Unity 2020.2,在 Unity Hub 中创建新项目,选择 HDRP 模板,然后点击Create。

全新的 HDRP 模板借助了光栅化技术来渲染光照,使用了光照烘焙、光照探针组、反射探针、阴影贴图等功能。本文将介绍 HDRP 中 4 种主要的光线追踪效果,即光线追踪环境光遮挡(Ambient Occlusion)、光反射(Reflection)、全局光照(Global Illumination)和阴影(Shadow)。最后,介绍 HDRP 的路径追踪(Path Tracing)功能,路径追踪是更为简单粗暴的光追计算方法,通过延长渲染时间,来换取更高的图像保真度。

光线追踪环境光遮蔽(RTAO)

十多年来,屏幕空间环境光遮蔽(SSAO)一直是游戏实时渲染的主要内容,用于模拟环境的漫射光遮蔽,改善场景中物体接触区域的视觉效果,降低凹面区域的光照强度。但是效果如果强度过高,则会在几何体周围产生光晕,甚至产生卡通化外观。除此之外,它还继承了屏幕空间技术的主要缺点,即无法根据屏幕外对象生成遮蔽效果,仅能使用 z-buffer(z轴缓存)中出现的深度信息。但在优点上, SSAO 在处理摄像机内的小区域光遮挡时依然出色,并且成本相对较低。

图例:三种情况下的环境光遮蔽对比

在光线追踪的帮助下,位于摄像机视锥外的光线也能被拍摄进画面,让光线照射到画面外的物体,从而让摄像机内的大型物体生成出色的QQ号购买平台宏观遮挡效果。尽管从技术上讲,AO只能勉强算作一种环境光照技术,但它能很好地补充光照贴图、光探针等其它光照,后者较低分辨率及效果强度并不足以生成微型光遮蔽。

光线追踪光反射(RTR)

与 SSAO 类似,屏幕空间光反射(SSR)也只能反射画面中的物体,出于摄像机镜头外的表面并不能反射光。比方说,摄像机视角对着地面时,SSR技术将不能生成任何光照信息。因此,SSR 的效果多少会有偏差,且会受到多种因素干扰,甚至受你自己干扰:在大部分静态场景中,位置恰当的反射探针才能产生悦目的效果、减少干扰因素。不过 SSR 真正有用的地方在于视线平行方向上的镜面反射(如地板、墙壁和天花板)。SSR 最为理想的使用方法是用在视角固定的摄像机中,比如赛车游戏。

图例:光栅化与光线追踪的光反射对比

但有了光线追踪后,我们就能获取屏幕外的光照信息,并借此在整个世界上,或在镜头周围一定半径内生成更精确的光反射,根据 Light Cluster(光照集群)和光线照射距离来生成光照效果。

光线追踪全局光照(RTGI)

光线跟踪最具代表性的功能之一是实时全局光照,即用射出的光线生成间接光照,再简单点说,就是让光照在环境中弹射。

通常在游戏引擎中,间接光照是使用提前计算或烘焙技术来处理的,包括光照探针、光照贴图,但技术的缺陷在于运算耗时会增加场景光照的迭代时间。

图例:光栅化与光线追踪的全局光照对比

HDRP 推出了两种 RTGI 技术:高性能和高质量。前者适用于在直射光下实现高帧率,而后者则能处理光线的多次反射和采样,可在复杂室内环境中生成精确的光效,当然运算成本也非常高。

光线追踪阴影

HDRP 自带精美的阴影效果,在阴影过滤质量为高时(PCSS),管线生成的贴图可模拟自然的阴影柔顺感,保证阴影在投影物体周围的锐度,模仿真实阴影。然而当过滤质量为中等时,结果就不尽人意了,整张阴影贴图均会被无差别过滤,投影物体和接收物体间的距离将不能影响效果。

图例:光栅化与光线追踪的阴影对比

光线追踪阴影可以显着改善阴影效果。通过从表面向光照投射射线,来计算出两者间的遮挡面积,由此生成的阴影非常逼近现实,而性能成本并不算高。此外,HDRP还支持透明表面的阴影!

路径追踪

光线路径追踪功能较传统离线渲染可更快地生成精美图像。光线从摄像机射出,在碰撞到表面时,再向其他表面和光照投射光线(形成光照集群‘Light Cluster’结构)。光线从摄像机到灯光间的行程称为路径,功能由此得名路径追踪。

与其他光线追踪方法相比,路径追踪的优势在于能用统一的运算流程来生成所有光照,包括阴影、反射、折射和全局光照。该技术的主要缺点在于渲染时间和图像噪波,后者可以通过累积采样多帧图像来推算出更为清晰的图像(类似时域化抗锯齿)。

在此提醒一下各位朋友,目前 HDRP 中的光线追踪处于预览阶段,并不能满足商业制作要求,各位在创作的时候请务必做好备份。同时,也欢迎各位提出宝贵的建议。

如何在 HDRP 中实现光线追踪?相关推荐

  1. 如何在 UE4 中设置光线追踪功能

    在计算机图形领域中,光线追踪被看作是下一代极具颠覆性的图像技术.打造同真实世界一样"逼真"的视觉效果,则是光线追踪技术不断吸引开发者的关键,特别是游戏中更加真实的光照.3D人物,能 ...

  2. ue4中隐藏灯光和相机图标_UE4中的光线追踪和SSGI照明研究

    AitorRández在最新研究中解释了他如何在UE4中进行照明工作,并共享了设置和场景以供下载.我叫AitorRández,我是比利时数字艺术与娱乐(DAE)最后一年的学生.我对环境艺术及其涉及的一 ...

  3. 如何在SharePoint2010中添加Deep Zoom Image

    如何在SharePoint2010中添加Deep Zoom Image 应用范围 SharePoint 2010 Foundation:SharePoint 2010 Standard:SharePo ...

  4. php如何对数组进行分组,如何在PHP中对数组进行分组排序

    如何在PHP中对数组进行分组排序 发布时间:2021-01-04 16:28:51 来源:亿速云 阅读:98 作者:Leah 这篇文章将为大家详细讲解有关如何在PHP中对数组进行分组排序,文章内容质量 ...

  5. html中section与div,如何在html中的section标签内包含div标签

    我正在制作一个完整版块的页面网站,如this.每个页面都有自己的标签.目前我的网页有4个部分(呈现不同的背景颜色).如何在html中的section标签内包含div标签 我的第一部分有一个容器div, ...

  6. html img调用js,html调用js变量 如何在html中输出js文件中的变量

    html页面代码中怎么调用js变量?html页面代码中怎么调用js变量,例如 在html代码中插入js代码: a=取浏览你把index1.js 中的onReady 去掉,把index1.js改成 fu ...

  7. 如何在OpenCV中为InRange阈值选择颜色的最佳HSV值

    如何在OpenCV中为InRange阈值选择颜色的最佳HSV值 1. 效果图 2. 源码 参考 之前的博客介绍了如何使用Python,OpenCV通过HSV颜色空间转换检测对象,并进行轨迹追踪.怎么选 ...

  8. 管理 zabbix_Zabbix 2019 峰会丨看睿象云如何在 Zabbix 中玩转告警

    2019年11月29日-30日,为期两天的 Zabbix 大会中国站在北京盛大召开,本届 Zabbix 大会以"新视界,新技术,共建未来新监控!"为主题,为与会人员提供前沿的监控技 ...

  9. 如何在JavaScript中实现链接列表

    If you are learning data structures, a linked list is one data structure you should know. If you do ...

最新文章

  1. 在Ubuntu 16.04.3 LTS上运行go+https+json示例
  2. sersync进行实时同步数据
  3. 计算某一段程序消耗的内存和时间【Java】
  4. java不等于正整数怎么输入_关于java:测试输入是否为正整数
  5. JavaScript对UNIX时间戳的转换
  6. Laravel 的安装使用
  7. 频域串联滞后校正matlab,自动控制原理实验七基于MATLAB控制系统频域法串联校正设计.doc...
  8. c语言能返回字符串吗,C语言中函数返回字符串的四种方法
  9. 在Java eclipse 中Spring Boot工具安装步骤
  10. paip.python错误解决15
  11. 论文中怎么写F检验值
  12. grep的常用和次常用选项
  13. Mac模拟器进行远程调试
  14. 计算机连接网络被限制,电脑连接wifi出现网络受限的解决方法
  15. 英文 E-mail写作指南
  16. java反算坐标方位角,根据经纬度求方位角,以北为0,顺时针为正方向
  17. VS2012 msvcr110d.dll xxxxxx处有未经处理的异常:0xC0000005:写入位置xxxxxx时发生访问冲突(scanf_s引起)-已解决
  18. 等保2.0.第九章.等保2.0基础知识
  19. RGB图像转换为灰度图像的原理
  20. 人工智能:通俗易懂理解深度学习与神经网络

热门文章

  1. Keil5 新建工程编译后Download按钮变灰
  2. Java和Scala学习日记1
  3. 大一计算机类专业导论论文题目,计算机专业导论论文
  4. 为什么企业选择文件加密软件防泄漏?
  5. 校园O2O商铺平台-实体类设计与表创建
  6. 浏览器版过低提示php,浏览器版本过低提示升级
  7. 车牌识别系统不能连接服务器,浅析车牌识别系统几种不能识别的原因
  8. python翻转课堂_翻转课堂课前学习任务单通常包括
  9. JS实现——体彩足球预测分析
  10. 软件采购必备:软件供应商评估表 之六(共七)