Imagination 技術團隊日前於舊金山遊戲開發者大會(GDC)展示了與亞馬遜網路服務(AWS)合作創建的光線追蹤demo。本文將介紹此開創性行動光線追蹤如何透過與亞馬遜網路服務(AWS)合作而實現。亞馬遜網路服務(AWS)是開源即時3D引擎(O3DE)的主要建立者,該引擎可支援使用光線追蹤實現即時動態運算全域照明。
光線追蹤的強大功能
光線追蹤是一項強大的技術,其使開發人員透過運算光線在3D引擎渲染器內的反射情況來增強遊戲動畫或任何即時運算生成的圖像,挑戰在於其為運算密集型,這就是為何Imagination IMG CXT GPU IP中的PowerVR Photon架構對於協助實現即時運算所需的功率和頻寬效率如此關鍵。IMG CXT代表五級光線追蹤級別系統的第一個Level 4解決方案。
光線追蹤級別系統
光線追蹤模擬了光線在現實世界中的工作方式,光子從光源發出並在場景中反射,直到到達觀察者的眼睛。光線追蹤可以在3D渲染中以多種方式使用,以生成燈光和陰影,使3D場景看起來更逼真。雖然遊戲中的光線追蹤通常用於創建逼真的反射,但如果用於全域照明(GI)則可真正模擬3D場景在現實世界中的表現。
基於另一種(探測器)運算和使用場景內的二次光反射方法,全域照明協助掌握渲染器場景環境的哪些部分更暗、更亮,以及燈光如何在附近對象之間擴散(強度和顏色)。為了更進一步瞭解反射和GI的視覺影響,請查看我們為啟動IMG CXT GPU而創建的光線追蹤展示,它們帶來的差異非常明顯,其展現了GI如何比僅使用反射更有效地創建真實感。
我們自從接觸O3DECON的介紹後,隨即於2021年7月開始研發O3DE的展示,O3DE是Amazon Lumberyard的演進,其捐贈予Linux基金會並由合作夥伴委員會和公眾組成的委員會開發及維護。初始花了一個月的時間從長遠角度評估引擎的性能,找出它可以為我們的展示團隊提供哪些可能性。
我們發現該引擎可使用光線追蹤來即時動態運算GI,因此決定將其用作展示的主要功能。自此與AWS開發人員展開緊密合作,互相協助、測試引擎,並向開發人員提供了持續的意見回饋,基於這些意見實現了一些缺失的功能。
結果是我們稱之為「Buon(GI)orno」的圖形展示。
GI 如何對即時變化做出反應的展示
由於引擎處於早期階段,該專案確實為我們的藝術家和圖形工程師帶來了一些挑戰。然而,透過時間和耐心(以及遠見),我們設法同步,將我們的努力整合到現在非常易於使用的AAA引擎中。
關於O3DE引擎
首先簡要地介紹負責開發O3DE的團隊,他們工程師與藝術家的結合,角色是透過圖形展示創新技術和功能,他們從使用新軟體中受益,因為這有助於其增強作品的視覺效果,而公司則從性能數據收集中受益,這些數據代表了在售出裝置中施作時如何在硬體上運行。
如果您對O3DE感興趣,您可以從O3DE的網站下載引擎,在穩定版本或每日構建版本(其中包含最新更新)間選擇,第一步可能令人生畏,但堅持下去,您便會在短時間內上手。
開發人員正在努力根據社群回饋(尤其是我們的意見:作為引擎的早期採用者,我們與主要的O3DE合作夥伴之一AWS密切合作)發表修改和更新,並提供有關如何使用這些功能的文檔。那麼,經過測試,O3DE帶來了什麼?O3DE具有其他遊戲引擎的所有典型特徵,例如多線程渲染器、數據驅動的動畫系統、即時物理引擎等等。
正如先前提到的,O3DE與其他遊戲引擎不同的突出之處,在於其可使用光線追蹤即時動態重新運算GI,使其成為展示IMG CXT硬體光線追蹤功能的完美合作夥伴。
我現在將介紹除了GI外的其他幾個主題,以展示熟悉引擎是多麼容易,並根據在製作BuonGIorno展示的過程中所學為您提供訣竅。
創意工作流程
對於開發人員來說,從專案的第一天開始就有清晰的想法是非常重要的,製作展示或影像遊戲是一個艱巨的過程,因此您必須從一開始就擁有具體的願景才能獲得好結果,這意味著必須了解專案的目的。例如,我們展示的主要目的是分享如何透過使用光線追蹤GI,從物體擴散的鮮豔色彩可以即時動態地影響周圍環境照明和附近的實體,這就是促使我們創造一個義大利風格的小村莊,並創建彩色房屋的想法。
透過光線追蹤GI影響二次光反射的材質開關
我們首先收集參考資料,並製作由白框組成的場景(或佈局)的初稿,之後我們反覆運算相同的想法,實現簡單的動畫和基本的技術功能。透過這種方式,您可以立即瞭解概念是否有效及可行性,完成並獲得批准後,我們開始製作構成場景所需的資源。
第一階段是對資源進行建模,您甚至可以使用照片掃描或其他技術,但請注意,遊戲引擎通常需要您生成經過最佳化的資源,因此您需要注意一些事項。
• 密切關注多邊形數量。
• 注意模型的拓撲。
• 根據您的UV接縫指定平滑組。
• 調節UV島的分佈和間距,以避免顏色溢出。
• 達到這種最佳化水平意味著您將能夠製作乾淨的高多邊形到低多邊形「烘焙」(bake)(這意味著透過某些貼圖通道將細節從高多邊形造型投影到同一模型的低多邊形版本,例如凹凸、法線或高度)。這對於認為資源已準備好接收動畫和紋理非常重要。
說到這裡,讓我們進入製作流程的下一部分,即創建紋理貼圖和材質。
目前,基於物理渲染(PBR)的O3DE工作流程要,求您為每個材質通道設定獨立的紋理貼圖。然而,在未來的更新中,開發人員正在努力提供使用稱為「紋理打包」的技術的可能性。除此之外,要導出的紋理貼圖的數量和類型取決於您對著色器的要求。事實上,並不是每個著色器都針對相同的用途進行了最佳化或需要相同類型的紋理。
例如,在創建新的PBR材質時,O3DE允許您在不同的著色器之間進行選擇,每個著色器都支援不同的功能和紋理貼圖,這樣您就可以決定哪一個更適合您的需求。請注意,在O3DE中這些不同版本的PBR材質之間,有一點是它們都支援「輻照度」。
O3DE中不同PBR材質預設中的輻照度
如果您可以在所有三個PBR實現技術中找到它,這一定很重要,對吧?
正確!這是因為O3DE中的輻照度是一個通道,當使用帶有「乘」值的GI來管理顏色擴散的強度時,它決定了從該特定材料擴散出什麼顏色。在實作GI時,您需要注意這一點。
讓我們進入下一部分,這將是關於O3DE中的資源和功能實現的。
O3DE中的資源和功能實現
如何使用資源填充關卡是開始可視化展示或影像遊戲的第一件事。您只需從場景內的資源瀏覽器中拖動FBX或GLTF檔(3D檔的業界標準檔格式),就會自動創建具有網格元件的「實體」。您可從那裏根據每個資源在場景中的用途開始添加「元件」。例如,讓您的關卡感覺生動是在展示或影像遊戲中實現的最重要的事情之一,因此您需要知道如何在某個點為某些物件或角色實現動畫。
O3DE有兩種不同的動畫方法,一種最適合蒙皮(變形)物件,另一種最適合非蒙皮物件。第一種方法涉及將Actor元件與Simple Motion元件或在O3DE「動畫編輯器」中創造的運動系統搭配使用。如果您不需要為實體蒙皮,您可以使用「軌跡檢視」編輯器並創建序列,在其中將動畫「關鍵幀」直接放入編輯器。選擇取決於您的需要,但請注意O3DE中仍然不支援蒙皮對象主動影響GI。對於開發人員來說,此功能仍在開發中並希望能早日實現。
非蒙皮物件會影響光線追蹤GI探測器的即時啟動,而蒙皮物件則不會。
預製件
預製件是一種特殊類型的元件,它允許將設定完全的遊戲物件(O3DE中的「實體」)保存在專案中以供重複使用,之後可在場景甚至其他專案之間共用這些資源,而無需再次設定。這對於將被多次使用的物件非常有用,因此非常重要,尤其是在關卡創作的模組化或程式化方法上。O3DE以預製件為中心,甚至您的關卡也會自動設定為預製件。
使用Prefab實例化遊戲對象(實體)的強大功能
預製件在O3DE中很容易創建:您可以透過右鍵按兩下實體來完成,之後須決定將其儲存在專案中的哪個位置。接下來,只需從「資源瀏覽器」瀏覽,複製並按兩下其從視區(viewport)或大綱中進行編輯。您現在只需按下即可將您的更改從一個預製件反映到所有實例化副本!
我們現在已經知道如何在編輯器中實現資源了—但是如果您看不到展示或影像遊戲,那它又是什麼?因此,下一個主題是照明。本篇不會專注於基本的照明特性,將讓您了解如何應用GI。
O3DE中的GI功能強大。首先,如果需要,它可以一次使用多個光源,包括定向燈、點光源、聚光燈和區域燈。接下來,它可以運算二次光反射,既可以為您使用硬體光線追蹤核心來進行動態運算,也可以作為探針與光源的單一交互進行烘焙。第三,也是最重要的,GI也很容易設定。
您需要執行以下操作:
1. 首先,轉到您的「LevelName.prefab」並添加一個名為「Diffuse Global Illumination」的元件。
2. 選擇您希望在場景中具有的GI品質級別。
3. 創造一個新實體,並向其中添加一個「Diffuse Probe Grid」元件(O3DE將要求您新增一個「長方體元件」以確定將包含和分佈探針的體積邊界)。
4. 透過設定GI體積的尺寸並將其移動到場景內需要的位置來定義GI體積的邊界(它必須完全包含您希望受GI影響的實體)。
5. 開始調整GI參數,例如 Probe Spacing、Number of Rays per probe、Ambient Multiplier(應保持為 1)和偏差。您可以透過啟動探針的可視化,來協助自己在這些參數之間達到正確的平衡(show active/inactive probes這是O3DE中最近添加的功能)。
6. 確保GI實體處於活動狀態,模式設定為「即時(光線追蹤)」,並開始在體積影響內播放實體、燈光、材質和動畫。您會注意到GI會即時接受您的更改而提供更佳的整體環境照明,這就是光線追蹤GI的強大之處。
7. 任何這些步驟和設定都可以隨時查看和修改。
最後,來談談如何完成和匯出您的專案。
完成專案時需要注意的是後期處理,設定後處理FXS很簡單:它需要將「PostFX 層」元件添加到實體,然後您可以開始將所有其他單個效果元件添加到同一實體。 目前,FX功能有很多後處理特性可選,例如螢幕空間環境光遮蔽、自動或手動曝光控制、HDR 顏色分級、色差、光暈等。
其他如光線追蹤螢幕空間反射功能目前正由O3DE開發人員開發中,希望很快能實現。
一些可用的後處理效果在O3DE中作為實體內部的「元件」實現。
測試和匯出您的工作
O3DE編輯器可隨時播放和測試您的關卡,追蹤頂點計數、圖元計數、繪製專案,並監控FPS速率。除了播放按鈕外,還有一個實體模擬按鈕提供試用。
要匯出您的作品(特別是我們展示的影片),您可以從軌跡視圖中設定「camera director」,並創建最終的可播放序列。從中直接在引擎中錄製影片。
結論
以上為我們在創建BuonGIorno示範O3DE的所有內容。本質而言,我們想展示的是O3DE可如此輕易實現既熟悉又驚人的新功能,以增強您在展示和影像遊戲中的視覺效果。透過關注全域照明而不僅只是反射,我們瞭解了光線追蹤如何協助目前和下一代開發人員製作更優質、更逼真的環境照明。
雖然目前還沒有在O3DE中同時即時運行光線追蹤反射和光線追蹤GI的選項,但其已開發中,感謝開發者的努力,及Imagination行動和桌面PowerVR Photon架構,這些功能將很快成為影像遊戲和即時CGI世界的標準,讓每個人都能體驗更好的視覺效果。