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?

www.youtube.com

原文標題是 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幀(下降的簡直可怕0.0)。

還有鏡子裏的陰影,你會發現,鏡子中的影子和現實世界不一樣,因為為了性能優化,ray tracing reflect的 shaodws,提供了hard shadows,Area shadows,

3. Translucency

半透明物體

半透明物體,例子是地鐵的玻璃,透過玻璃看外面牆面上的led燈。

type可以選Raster或者RayTracing。

第二張圖是ray tracing的效果雖然只做了一次bounce,但是玻璃裏受環境影響的黑色的效果還是比光柵化的效果好很多,黑色更純粹。

4. AmbientOcclusion

這一部分演講者,說了下因為演示場景是在室內,地下,黑色比較多,AO和GI的效果不明顯,為了性能,他沒有開啟,別的環境可以嘗試,說是效果很好。

5. Optimization 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的環境是室外城市,沒有樹葉那種

以上就是全部的內容。可以我沒有RTX卡,真想試一試!!!

6.總結一下

  • ray tracing 產生的軟陰影比傳統shadow map,pcf或者csm產生的都更自然,物理離產生陰影的平面越遠,擴散啊的越快
  • 反射是tracing裏最耗的一部分,bounce彈射次數增加,消耗增長明顯
  • 室外比室內更適合用ray tracing
  • 漫反射比鏡面反射更耗
  • 小物體太多也會更耗

7.結尾福利

最後放2張ue4,開RTX ray tracing 渲染出來的車模,是羣裏 @戴鑫祺 Fisher 老哥做的,效果太棒了!


推薦閱讀:
相關文章