A Hands-on Look at Using Ray Tracing in Games with UE 4.22 GDC 2019

talker: Sjoerd De Jong (SR.ENGINE EVANGELIST)

ue4.22加入了raytracing,GDC2019上,Epic的工程师用一个简单的场景延时了下raytracing的一些效果。视频在油管UnrealEngine的频道已经放出来了,除了光追,还包括其它包括物理,声音动画的分享。

原视频地址:https://www.youtube.com/watch?v=EekCn4wed1E&list=PLZlv_N0_O1gYrzsn-fTzsrJq4sQPlAiqb&index=13&t=0s

原文标题是 hands-on look ,翻译成人人都能看懂不过分把(滑稽

0. Intro

全文 主要从 软阴影,反射,半透明,AO/GI,性能分析 几个方面介绍ue4.22中加入的raytracing。

演示场景是一个地铁的环境,会包括水面反射,瓷砖,镜子,车灯等效果

4.22 支持了全灯关类型的软阴影(天光,点光,范围光)的raytracing,反射,AO,GI,

还有一些没有支持上的,未来会支持上的

ue4中怎么开

开raytracing,要你有张RTX的卡,windows版本在1809之上, ue4启动的时候加上 -DX12,ue4的project setting 里面开启 raytracing
也可以参考这个视频 RealTime Raytracing Arrives

1.Shadows

首先从阴影开始,介绍下不同光源产生阴影,传统做法和光追的区别。包括天光,点光,平行光,矩形光,还有光追效果和普通效果混合的。

进入一个地铁场景,里面很多光源,注意看人物的影子,开启cast raytraced shadow之后,人物的影子柔和了很多,可以通过改变光源的source radus调整软阴影的边缘,0话的就最硬。

注意看,通过ratraced生成的阴影,越靠近脚部的地方越硬,人上半身的影子边缘梯度下降的就很明显,这是传统PCF做软阴影达不到的。


4.18 就加入了rect light,但是4.22加入raytracing之后,算是完善了rect light。

rectlight在环境中可以产生了很棒的灯光效果,可以像rect一样,调整rect的width,height

比较有意思的是还可以调整ban door angle和length,类似灯的厚度(这样理解不知道准不准确)。

还可以加一张贴图,达到特殊形状rect light的效果,像天花板上的2根灯管。

还有这个rect light 的source texture 在反射中也是有效果的。


下面是一辆地铁通过时候,开启raytracing和不开的比较。可以在命令行里输r.RayTracing.Shadows 0 关闭。没开的话,影子特别的锐利


刚才是在indoor环境的,现在展示下outdoor的,很多茶壶,一盏平行光。上面的是没有用raytracing,用的传统CSM(Cascade Shadow maps)动态阴影,跑了52 fps。

同样的场景,同样的视角,Ray tracing 跑了73 fps,可以看出光追在动态阴影表现卓越。

其实可能确定室外,大环境更适合用raytracing,现在主机常见的室外做法是,太阳光产生 动态阴影,环境中可能有多盏点光源不产生阴影,共同作用达到动态阴影的效果。

之前地铁的场景可以在epic的商城里免费拿到

2.Reflection

反射这部分,主要讲反射过后的软阴影,光线的弹射次数,性能问题(后面性能分析会提到)

接下来看看反射的东西,镜子里raytracing的反射效果特别好,如果你移动的话,还会看到一部分 noisy

这里的墙面瓷砖光线是只进行了一次反弹,当然ue4也支持多次。

下面是开1次bounces 的效果,和开3次的效果。开了3次之后隧道墙面的灯光明显更亮了一点。帧率也是明显下降了从 90帧降到了30帧。


还有镜子里的阴影,你会发现,镜子中的影子和现实世界不一样,因为为了性能优化,ray tracing reflect的 shaodws,提供了hard shadows,Area shadows,

3. Translucency

半透明物体

半透明物体,例子是地铁的玻璃,透过玻璃看外面墙面上的led灯。

type可以选Raster或者RayTracing。

第二张图是ray tracing的效果虽然只做了一次bounce,但是玻璃里受环境影响的黑色的效果也比光栅化的效果好很多,黑色更纯粹。


4. AmbientOcclusion

这一部分演讲者,说了下因为演示场景是在室内,地下,黑色比较多,AO和GI的效果不明显,为了性能,他没有开启,别的环境可以尝试,说是效果很好。

5. Optimiazation and Performance

性能优化,主要从阴影,反射,半透明,AO/GI 这几个方面

反射是游戏里面最耗的,用GPU profiler工具可以看到刚才那个场景RayTracingReflections 占到了2/3。

老黄的Nsight也是非常好的Profiler工具, DXR也提供了一套Profiler的工具。(为啥不安利一波宇宙第一RenderDoc呢?)

反射性能主要受到这几个东西的影响:

  • Screen Percentage 反射的质量
  • Distance 光追的距离,或者说bounce的次数(追的越远越耗,弹的次数越多约耗)
  • Material Roughness 材质的粗糙度(pbr微表面原理,不同Roughness的材质,对光线的吸收是不一样的,光滑和不反射的材质都是不怎么耗的)

5.1 Material

材质不同,光追的复杂度也会不同,可以通过关闭r.RayTracing.EnableMaterial 0 来关闭,遮罩材质很慢!

演讲者做了这样的一个debug工具(上一节最后一张图),可以看不同材质ray tracing 的时候的消耗,yellow是发生100%反射,近似镜面反射的;green是不发生反射的,光线直接被吸收掉的;
2者交界处,褐色的部分是交界处,材质较为复杂,发生了漫反射,当ray过来的时候,并不是直接镜面反射走掉,而是diffuse向四面八方,这就要大量的计算,朝不同方向,计算ray的bounces,这非常耗。

还有就是混合材质,混合材质意味着更复杂的反射折射,这也会更耗。

Mask Material也很耗,因为他要去算材质表面那个位置是0还是1,可见和不可见又要分别处理。

5.2 Geometry

不同几何体,性能消耗也会不一样。

  • 空间中特别小的物体,很耗。(如树叶,栅栏等)
  • 不透明的固体会比较快(因为不会发生 scatter 散射)
  • 室外会比室内快(室内空间小,光线可能发生多次弹射,室外直接弹走了)
  • 所以更适合raytracing的环境是室外城市,没有树叶那种

以上是全部的内容,

A Hands-on Look at Using Ray Tracing in Games with UE 4.22 GDC 2019的更多相关文章

  1. OpenCascade Ray Tracing Rendering

    OpenCascade Ray Tracing Rendering eryar@163.com 摘要Abstract:OpenCascade6.7.0中引入了光线跟踪算法的实现.使用光线跟踪算法可实现 ...

  2. 开始研究Ray tracing

    几个月前面试时Boss问过我一个问题--"除了scanline渲染方法,你还知道什么其他渲染方式?",我没答出来,至今记忆犹新. 前段时间摆弄Intel VTune时看了它的示例代 ...

  3. Ray Tracing

    Ray Tracing 题目链接:http://codeforces.com/problemset/problem/724/C 拓展欧几里得 //为什么这次C题这么难啊=.= 可以观察到,光线在矩形中 ...

  4. 《Ray Tracing in One Weekend》、《Ray Tracing from the Ground Up》读后感以及光线追踪学习推荐

    <Ray Tracing in One Weekend> 优点: 相对简单易懂 渲染效果相当好 代码简短,只看书上的代码就可以写出完整的程序,而且Github上的代码是将基类与之类写在一起 ...

  5. 【Ray Tracing The Next Week 超详解】 光线追踪2-7 任意长方体 && 场景案例

    上一篇比较简单,很久才发是因为做了一些好玩的场景,后来发现这一章是专门写场景例子的,所以就安排到了这一篇 Preface 这一篇要介绍的内容有: 1. 自己做的光照例子 2. Cornell box画 ...

  6. 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-7 混合概率密度

     Preface 注:鉴于很多网站随意爬取数据,可能导致内容残缺以及引用失效等问题,影响阅读,请认准原创网址: https://www.cnblogs.com/lv-anchoret/category ...

  7. 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-5 random direction & ONB

     Preface 往后看了几章,对这本书有了新的理解 上一篇,我们第一次尝试把MC积分运用到了Lambertian材质中,当然,第一次尝试是失败的,作者发现它的渲染效果和现实有些出入,所以结尾处声明要 ...

  8. 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-4 基于重要性采样的材质初探

     Preface 我们今天来把第三本书从开局到现在讲的一大堆理论运用到我们的框架中,那么今天我们首先将原始的材质改为基于重要性采样原理的材质 这一篇是代码工程中进行MC理论应用的初步尝试篇  Read ...

  9. 【Ray Tracing The Next Week 超详解】 光线追踪2-9

    我们来整理一下项目的代码 目录 ----include --hit --texture --material ----RTdef.hpp ----ray.hpp ----camera.hpp ---- ...

随机推荐

  1. IO-file-03 文件的长度

    package com.bwie.io; import java.io.File; public class FileDemo4 { /**文件字节数 * length():字节数 文件夹 0 * * ...

  2. Java集合框架——Map接口

    第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...

  3. AMD全新32核线程撕裂者GeekBench跑分曝光:超2950X近一倍

    AMD全新32核线程撕裂者GeekBench跑分曝光:超2950X近一倍 2019年09月01日 09:36 1109 次阅读 稿源:快科技 1 条评论 https://www.cnbeta.com/ ...

  4. 【转贴】内存重要参数详解 RAS CAS

    内存重要参数详解 RAS CAS 分类: LINUX 2014-09-12 09:41:58 原文地址:内存重要参数详解 RAS CAS 作者:Reny http://blog.chinaunix.n ...

  5. SQL SERVER YEAR函数

    定义: YEAR函数返回指定日期的年的部分 语法: YEAR(date) 参数: ①date参数是合法的日期表达式. 返回值: int型数据 例:  声明:本文是本人查阅网上及书籍等各种资料,再加上自 ...

  6. base64转码java版

    package com.net.util; import java.io.FileInputStream; import java.io.FileOutputStream; import java.i ...

  7. PHP的四种运行方式

    一丶cgi协议模式 cgi模式通用网关接口(Common Gateway Interface),它允许web服务器通过特定的协议与应用程序通信,调用原理大概为:用户请求->Web服务器接收请求- ...

  8. ajaxFileUpload 被坑记

    用ajaxFileUpload时,MVC的Controller层,不能用JSON去返回数据,因为前台会接不到 返回信息不能用json(),而是要转换一下.     return Content(Jso ...

  9. 如何使用classnames模块库为react动态添加class类样式

    摘要 在react中添加动态的css时,传统的方式较为繁琐,今天刚好学习到一个模块库可以便捷的解决这个问题.对的,它就是“classnames”. classnames模块库 npm安装 npm in ...

  10. ThinkPHP模板继承和修改title

    先说下模板继承: 假定:在View文件夹中 -> Public  公共模块 —>base/header/top/footer 4个html文件 这下面base文件使用include引入其他 ...