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. 《MIT 6.828 Lab 1 Exercise 7》实验报告

    本实验链接:mit 6.828 lab1 Exercise 7. 题目 Exercise 7. Use QEMU and GDB to trace into the JOS kernel and st ...

  2. 如何获得select被选中option的value和text和......

    我想获取select选中的value,或者text,或者…… 比如这个: <select id="select"> <option value="A&q ...

  3. HTML5页面如何在手机端浏览器调用相机、相册功能

    最近在做一个公司的保险信息处理系统项目,开发微信端浏览器访问的HTML5的页面,页面中有一个<input id="input" type="file"/& ...

  4. 数据结构C++实现-第一章 绪论

    1.1 计算机与算法 1.1.3 起泡排序 void bubbleSort(int a[], int n) { for(bool sorted=false; !sorted; --n) { sorte ...

  5. Photon Server 实现注册与登录(一) --- Hibernate整合到项目中

    本系列实现目的:基于Photon Server实现注册于登录 一.拷贝Nbibernate项目的文件到MyGamerServer项目中. 二.数据库新建表,结构如下 三.修改文件名和配置 (1).将拷 ...

  6. python之并发编程(概念篇)

    一.进程 1.什么是进程 进程是正在进行的一个过程或者一个任务.而负责执行任务的则是cpu. 2.进程与程序的区别 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程 ...

  7. Python运算符和编码

    Python运算符和编码 一.格式化输出 现在有以下需求,让⽤户输入name, age, job,hobby 然后输出如下所⽰: ----------info of dogfa---------- n ...

  8. js 替换html

    function getInfo(){ var player_name=$("#name").val(); $.ajax({ url: 'get_wefare', method: ...

  9. JSON运用在文件

    #include <iostream>#include <fstream>#define JSON_IS_AMALGAMATION#include "json/jso ...

  10. UEditor编辑器

    1.UEditor编辑器官网:http://ueditor.baidu.com/website/ 2.下载文件:选择  1.4.3.3 .Net版本 UTF-8板 3.建一个ueditor文件夹,将下 ...