本篇文章的題目采用的是“啟示”而不是“變革”,這是因為移動端的游戲引擎依然在遵循自己的策略慢慢地實現全局光線追蹤。移動端游戲社區都想實現光線追蹤,但是存在不可抗力的原因:硬件的性能不夠,不能滿足幀率的要求。因此,Imagination一直在致力優化移動端,并推出了PowerVR光線追蹤硬件IP核。
?
本篇文章主要分為兩部分,分別從不同的角度進行闡述。第一部分討論的是美術相關的問題以及游戲場景資源的生成:幾何、顏色、紋理、表面屬性和光源。第二部分介紹的是將軟件工程集成到虛幻引擎(UE)中來,并采用Imagination PowerVR GR6500硬件平臺以及Vulkan驅動中擴展的光線追蹤API。
第一部分:美術(游戲美工抱怨:“我只是想讓它漂亮些,為什么會變成這樣?”)
毫無疑問,游戲制作美工都想要實現光線追蹤效果(提供準確的反射、折射和投射陰影的一鍵式解決方案)。因為這將會使他們將更多的精力放在美學研究方面,而不是專注于游戲資源的適應技巧從而使得游戲場景顯得更加的真實。
我們注意到,光線追蹤的解決方法類似于反射探測、屏幕空間和平面反射外加額外的眩光效果,但是它們都有明顯的光學限制。在屏幕空間內,物體的反射是不可見的,物體的背面也是沒有反射效果的。平面反射通常是采用比較生硬的方式來實現,比如通過巧妙的重新定位相機對場景進行重新渲染。實際上這種方法只適用于平面,而且在移動端由于性能的限制這個功能通常會被禁止。
游戲美工通常花費大量的時間定位和測試反射探測節點以及其它光發射節點,為的是讓場景更具視覺沖擊力。當然,如果游戲是打算在移動設備上運行,那么我們不得不限制反射探測節點的數量,因為每一幀都需要將它們重新生成來涵蓋所有的動畫。這種解決方法通常需要成百上千個小時來進行處理以達到預期的效果。當然,這些都需要我們人工實時查看處理過程以確保所有游戲資源預期進行處理。
可以驗證的是光線追蹤的陰影更加精確而且不需要過多的密集型處理,結果就是更低的功耗以及性能的提升。目前創建非光線追蹤的陰影緩存比較復雜而且很容易出現各種問題。從根本上講,它們是深度圖像文件,從光點角度來看它們表示的是距離。由于實際文件大小的限制它們只占用游戲場景的一小部分。一般用于靜態物體,對于動畫對象每一幀都需要重新加載處理,這會增加處理器的負載。而且如果陰影繼承到顏色屬性中,那么對于透明的物體也是有問題的。適當的模糊陰影長度能夠增加真實感,但是不通過光線追蹤或者動態深度測量是不可能實現的。如果渲染引擎采用全局光線追蹤就不會出現這些問題。(注:在寫這篇文章時我們還沒有將混合單光線軟陰影算法添加到虛幻引擎支持中)。為了能夠顯著提升投射陰影的表現力,Imagination的光線追蹤方案會區別對待陰影光線,尤其那些不透明的物體。
游戲場景的其他方面,如管道、材質、模型、光源和物體表面都可以通過光線追蹤引擎實現流線型的表現效果。現在游戲美工社區特別期待移動端硬件能夠支持光線追蹤。盡管,即使有了光線追蹤特性也還有很多工作要做,但是花費更多時間使游戲場景變得更加漂亮也是值得的。
?
?
第二部分:科學(真正重要的來了)
這個項目的目標是集成光線追蹤特性,使之確保光線跟蹤效果與現有的光柵效應同等重要。舉個例子,當材料的表面屬性需要反射效果,那么這個材料的著色器需要編譯來投射合適的反射光線。我們付出了很多努力來尊重虛幻引擎(UE)的架構,以便所有效果都能夠放在一起很好的展示出來。這意味著你的游戲可以選擇光線追蹤反射搭配映射陰影在同一個場景同一時刻存在。為了能夠實現這個功能,引擎需要編譯材料著色器的光線追蹤變量,當二次光線在場景內交織時依然能夠保持正常。
虛幻4引擎支持桌面版Linux和OpenGL 3.x和4.x已經有一段時間了,2015年年底的時候,初始版本又增加了對Vulkan 1.0的支持,但是只兼容Windows和安卓系統,2016年2月在MWC大會上Epic公司正式發布了這個消息,并展示了一個名為ProtoStar的Demo運行在三星Galaxy S7手機上。現在來自虛幻4引擎Gihub社區的Yaakuro實現了引擎與Vulkan同時運行在桌面版Linux系統上,并且在英偉達桌面版GPU上進行了展示。
2016年5月,我們啟動了一個項目,將虛幻4引擎運行在PowerVR GR6500系統上,起初是在常規光柵模式下,但不久后增加l了對光線追蹤功能的支持。由于虛幻4引擎代碼庫的架構,默認僅在移動平臺上支持OpenGL ES 2.x和3.x,且在Linux系統只支持桌面版OpenGL 4.x。同時我們也決定擴展Vulkan跨平臺API,使得在桌面版Linux主機上支持我們的“移動端”GPU。
我們只花了幾周時間就熟悉了Yaakuro所做的工作,并根據當前虛幻4引擎代碼庫對其項目進行了更新,實現了在英偉達GPU上移植Vulkan API。從次以后就可以簡單地實現Vulkan設備管理切換為GR6500板卡,并使用Imagination開發的Vulkan驅動程序,只需要對SDL庫做些微小的調整就可以讓引擎好像是在X window上渲染,實際上是在渲染評估系統HDMI的輸出畫面。
項目停頓了一段時間,因為我們已經非常熟悉虛幻4引擎的代碼庫,并且與在UK的工程師協作完成和穩定了Vulkan驅動程序,同時我們開始計劃使用Vulkan光線追蹤擴展API向虛幻引擎中添加基礎的光線追蹤功能。
最初階段涉及到調節引擎的渲染傳遞機制來執行光線場景的構建操作,使用Vulkan光線追蹤擴展API非常簡單,因為修改的代碼非常類似Vulkan現在的光柵渲染,使用開始/結束命令包裝渲染次序,使用帶有頂點和光線著色器的Vulkan管道對象取代常規的光柵著色器。我們還可以重復使用現在的“靜態網格”幾何圖形來繪制一個環路,適當調整來移除投影碎片的可見性檢查,我們希望所有的幾何體都能夠被渲染到光線追蹤的層次結構中。
我們能夠準確的使用與光柵渲染相同的頂點著色器(有引擎編譯生成),僅需要改變一些參數值來控制頂點的轉換使得頂點的輸出在世界場景中而不是投影的屏幕空間中。起初,我們使用手寫的光線著色器,編寫自己的代碼實現控制,僅要求頂點屬性結構能夠匹配頂點著色器(這種方式只需要在引擎編譯之前解析頂點著色器的GLSL資源)。
這讓我們能夠一次性的完成場景搭建和光線追蹤渲染,我們增加了基本顏色、光源、陰影和反射屬性,最后一步是展示測試,在游戲畫面中光線追蹤圖形應該疊加在常規的光柵圖形上面。
下一步就是讓引擎能夠根據實際的場景材料自己生成光線著色器,采用材料和著色器跨編譯器機制使得我們你能夠增加其他著色器類型,盡管引擎只是將它們作為第二像素(碎片)著色器,從USF著色器文件資源衍生而來(USF資源定義了常規的像素著色器)。然后Vulkan RHI層會將二次USF像素著色器轉換為GLSL,將GLSL資源代碼轉換為光線著色器,最后會將其編譯到SPIR-V資源文件中。在引擎的高層次中的材料代碼會創建像素著色器的二次副本(也就是說相關參數是相同的),然后將它傳遞給RHI,因為它只接收二次像素著色器實際上我們這里給它傳遞的是光線著色器副本。最后與像素著色器的綁定方式相似,它會準確的綁定所有相同的材質資源。
雖然是一個全局的光線追蹤渲染器,但是實際上它是常規像素著色器行為的復制或者說幾乎相同,包括映射/CSM陰影、反射探針反射以及所有相同的光源變體(光源圖、方向光、可選的點光源等)。
使用USF內置的功能來調節引擎的HLSL解析器一般會將光線追蹤的一些細節(輸入和輸出光線管理、與光線著色器綁定的參數)隱藏起來。這使得USF著色器代碼包含了更多功能,如檢查輸入光線的深度(用于光線反射調節)、發射反射和陰影光線以及統計光線追蹤累積緩存中的最終顏色值,不使用額外非常的語法。這些調用的函數會轉換為GLSL,而且這些函數的實現會添加到GLSL代碼中,作為從像素著色器向光線著色器的轉換代碼。
使用一些預處理程序,可以使用USF的像素著色器代碼快速搭建出基本的光線著色器,僅需要添加10行代碼和調節,就可以實現光線追蹤反射和圖像深度統計。其他部分重組的USF代碼需要添加光線追蹤陰影,只需要將光源計算放到陰影計算之前,這樣我們就可以實現動態切換是選擇光柵(映射/CSM查找)還是光線追蹤(遞歸統計)陰影效果。
展示的這個Demo是在常規引擎說明場景基礎上擴展的一個版本,引擎可以自由切換為光柵模式還是光柵追蹤模式。盡管在光線追蹤模式下,我們也可以在光柵和光線追蹤陰影之間選擇以及顏色取樣和光線追蹤反射效果。我們還增加了其他一些材料用于在渲染模式下每種材料表面參數設置。舉個例子,因為這個初始版本的光線追蹤反射實現方案不支持光滑(或模糊)反射,我們展示了如何設置使得一些材料可以繼續使用模糊探測反射,其他材料使用光線追蹤實現真正的光滑反射效果。
最后我們演示了光線追蹤的靈活性,提供可選的攝像機模型和第四種渲染模式,即使用真正的360度球面透鏡渲染整個場景。
后面的工作我們會涉及到動態幾何圖形,支持點光源,重新實現和優化我們開發的混合單射線軟陰影算法。
本篇文章作者Will Anielewicz,高級軟件工程師(PowerVR,Imagination); Simon Eves,高級軟件工程師(PowerVR,Imagination)。
Will Anielewicz簡介
Will自從1967年就開始與計算機打交道,在1974年獲得了紐約大學計算機科學榮譽學位,同時具有多學科碩士學位,包括美術、計算機科學和心理學。曾被授權開發一個計算機圖形鋼琴,并在現場演唱會上演出。1976年在加拿大多倫多藝術畫廊,Will作為嘉賓參加了世界上第一次計算機圖形藝術展覽。在1982年Will作為第一個員工參與了瑪雅三維軟件的開發。自從那以后,Will參與了14部特效電影(例如星際前戰:幽靈的威脅)和多個商業獲獎廣告的創作。現在Will在Imagination科技作為一名高級軟件工程師,研究和開發PowerVR光線追蹤。他的目標是推動計算機圖形學的發展,尤其在計算機視覺和增強現實方面。
Simon Eves簡介
Simon是Imagination科技的一名高級圖形學工程師,在舊金山分部已經工作了六年。之前他從事了長達十五年的軟件開發和電影和電視視覺效果技術美工工作,工作地點遍布倫敦和灣區。在收購Caustic圖形公司后,Simon作為第一名員工參與了硬件光線追蹤架構的開發,也就是現在的PowerVR Wizard架構的前身。
英文鏈接: https://www.imgtec.com/blog/unreal-engine-and-the-ray-tracing-revelation/
聲明:
本文為原創文章,轉載需注明作者、出處及原文鏈接,否則,本網站將保留追究其法律責任的權利
評論