A Hands-on Look at Using Ray Tracing in Games with UE 4.22 GDC 2019
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的环境是室外城市,没有树叶那种
以上是全部的内容,