前言
這周由於玩《艾爾登法環》的原因,讀一篇略短一些的GDC文章的內容,分享人是騰訊的《暗區突圍》(英文名:Arena Breakout)項目的渲染主程Junhong Wang。
我個人認為國內手機跨平台遊戲中,在世界規模、美術視覺和性能幾個方面綜合來說都還不錯的有米哈游的《原神》,騰訊的幾個槍戰遊戲,網易的《明日之後》等——這幾個也是GDC上都發過分享的國內產品。今年也持續會出很多類似規模的遊戲,但具體表現還需要觀察。
另外,我個人覺得騰訊遊戲其實不是以技術規模製勝的,它更多是一個商業成功的發行商和養蠱者;但反過來說,其實騰訊內部也是有很多技術大神的,我也樂見他們能拿出這種有技術含量的又能商業成功的產品。當然我個人有一套評價標准,肯定不是說商業成功就是一切——讀技術分享的文章里我就不對模仿原罪問題和大公司團隊內耗問題表達個人觀點了。
本次內容還是以配圖並翻譯原文為主,同時打星號的部分是我個人的一些備注與分析。
一、項目背景概述
*整個項目是搭建在虛幻4引擎上的開放世界大地圖FPS遊戲,對於安卓和IOS有不同的圖形API。
——手機光線追蹤
——啟用光追的准備
*安卓版光追已經發布了,IOS版(截至分享日)還在開發中。
*光追主要應用到反射、軟陰影、AO這幾方面。
二、光線追蹤的場景管理
*雖然基礎思想都是射線可以進行遞歸的彈射查詢,但手機端主要考慮的是減少檢測數量和優化加速結構。
* Bottom-Level-Acceleration-Structure(BLAS)定義了幾何體的基本組成。如果物體是網格形式就是三角面的頂點索引,也支持其他組織形式比如體素,曲線等,但要自行構建加速方式。Top-Level-Acceleration-Structure(TLAS)定義了場景實例層的相關屬性例如包圍盒、變換矩陣等數據 。簡單來說可以參照下圖:
——世界總覽
——在LOD加載時創建BLAS?
——結果:
*加載數和記憶體用量降到了700個BLAS和1.1G
三、光線追蹤的反射
*由於射線數量限制,這里的反射只能是鏡面反射,沒辦法做出鏡面和漫反射之間的粗糙度效果。因此粗糙度只能通過模糊處理等方式來近似,後面會提到。
——反射像素的著色
——混合的渲染管線
——性能:能耗、幀率
反射管線分析:
基礎pass(不透明場景顏色、法線粗糙度和檢測標志、深度)——場景查詢pass——可見性處理pass——聯合雙邊濾波過濾——聯合雙邊濾波過濾(參數不同)——混合——後處理
*後面逐步介紹了各步驟的一些細節。
——MRT(這里是MultiRenderTarget,繪制到多個幀緩沖。相應的RT就是渲染目標紋理)
——深度模板:D24S8
——可選:(對於金屬材質)反射顏色
*關於重心坐標在Games101中有詳細介紹,主要是通過和三角形頂點的關系來定義三角面中的任意點。
——可見性處理pass(CPU)
——可見性處理pass(GPU)
優點:較好的硬體兼容性
缺點:
——繪制指令:使用GPU剔除查詢來去除不可見的網格繪制指令
——重疊繪制:
*優化後減少到了110個draw call,且沒有重疊繪制了。
輸入紋理:反射貼圖、定製化的GBuffer貼圖、深度貼圖
算法: 聯合雙邊濾波,模糊核偏移尺寸基於粗糙度調整
*關於模糊算法和核(Kernel)之前我有一篇文章介紹過。關於聯合雙邊濾波,簡單來說是一種可以較好保持原圖邊緣的模糊和降噪算法,文末會附加資料連結。
*通過聯合雙邊濾波再算一遍,但模糊核偏移更大了。
*這里的模糊反射效果是基於單一射線查詢加模糊算法得出的,而復雜的光線傳播是會有多條光線散射並求積的情況的。離線渲染中會對粗糙度不同表面採用蒙特卡洛積分(采樣)的方式來求積。所以從這個意義上說這里算反射還是用的前現代的光追算法,和1974年的Witted Style一致。
優點:較好的硬體適配,高性能
缺點:難以處理半透明或有遮罩的材質
四、光線追蹤的AO和軟陰影
*可以看到開啟光追後,陰影和AO質量都有較大提升。
兩者都需要大量射線:陰影1根、AO1根、沒有降噪輔助。
需要考慮性能表現。
軟陰影和AO的光追管線分析:
前置pass——場景查詢pass——分幀降噪——A-Trous過濾(2個pass)——基礎pass——後處理pass
*前置pass包含了場景的法線和深度,後面從場景查詢pass開始介紹。
*這里其實就類似現代光追面臨的問題了,在每個采樣點需要更多信息來確認陰影和AO情況,但性能上只允許每個點一幀采樣一根射線。可以看到只運行一幀時偏差很大,所以Games202的閆老師說過目前實時光追的核心技術是降噪,這既有調侃的意味,很大程度上也是事實。
*Temporal——基於時間的。如果了解過TAA應該不難理解。
*A-Trous算法也被翻譯為多孔算法。簡單來說它比聯合雙邊濾波有更好的性能,但單次運算效果相對較差,需要多幀平攤來得到還不錯的結果——且兩者都有著不錯的邊緣保持特性。
*關於分幀降噪在Games202的實時光線追蹤一節中有詳細介紹,這兩種降噪算法都涉及到了。
*通過加倍太陽的尺寸,得到了更柔和的陰影。(以及展示整體的陰影和AO結果)
一些缺點:
結語
總的來說,手機版的光線追蹤還處於秀肌肉大於實用的階段,畢竟玩手機其實畫質比起幀數或能耗來說反而不那麼重要。作為我個人來說,手機遊戲都是看看高畫質然後開省電玩的,畢竟手機也不是只打遊戲的。
但我確實理解為什麼他們要盡早在手機上做光追(雖然性價比高的還是前現代光追算法做的反射,而現代光追算法做的陰影和AO手機上有點太耗了),這不僅僅是一個噱頭:一方面來說,這套兼容傳統管線和簡單光追的管線既然適配了手機端,那麼完全可以以更高質量應用於全平台(實際上這遊戲也有PC端);另一方面,這對於開發人員本身也是寶貴的技術積累,畢竟國內做帶有光追的大型3A項目的機會更少,也更難深度定製與優化渲染管線——能在保證項目質量的基礎上開展技術升級也是很難得的(反面則是不斷練手但是項目爛尾了)。
實際上這個遊戲中他們沒有發明全新的定製化光追方案,而是一事一議的在UE4的管線、Vulkan新版本API的框架內做了很多優化——與其說他們是「做」光追,不如說是優化光追。很多優化成果也是對前人成果的一些疊代和演進。
很多時候做手機遊戲進行技術突破,就面臨一個「為什麼要做」的靈魂問題——畢竟常有一類說法是「某某遊戲畫面那麼稀爛反而買量容易、更好賺錢」;但真等到《原神》這類項目憋大招出來靠管線技術突破和規模效應獲得了商業成功,再要從頭追趕又傻眼了。從我個人的觀察來看,騰訊魔方工作室在3D項目的技術積累上確實略好於天美工作室群,可能是因為天美本身有太多躺著賺錢的產品了。
這里還是要復讀我的一個觀點——3D手機遊戲的技術積累不是僅僅積累給手機端的,尤其是對於商業(通用)引擎的技術積累上,這對於整個國內遊戲行業都是普適的。
最後是資料連結:
《Ray Tracing in Arena Breakout Mobile》 這篇分享的GDC地址
Games202官方主頁
Nvidia的Practical Real-Time Ray Tracing With RTX
一篇寫得很好的介紹Unreal引擎光追的知乎文章
來源:機核