研發實戰:用Unity、3D Max、V-Ray等工具為Quest開發高質量圖像

映維網 發佈 2020-01-09T04:36:42+00:00

對於VR遊戲開發工作室ArabianArt Studios,其組成人員在遊戲行業打滾的歲月加起來超過27年,曾供職過的企業包括西木工作室, 藝電和岩石壁畫等等。

映維網 2020年01月09日)對於VR遊戲開發工作室Arabian Art Studios,其組成人員在遊戲行業打滾的歲月加起來超過27年,曾供職過的企業包括西木工作室(Westwood Studios), 藝電(Electronic Arts)和岩石壁畫(Petroglyph Games)等等。為了幫助開發者利用他們的開發流程,這支團隊最近發布了一個全新的Unity VR遊戲示例。日前,核心成員以利·阿拉比安(Elie Arabian)和馬特·奧斯特加德(Matt Ostgard)撰文介紹了這個示例及相關技巧步驟。下面是映維網的具體整理:

如需下載所述的Unity遊戲示例,請前往Oculus Ogre Sample下載頁面。

我們Arabian Art Studios從2016年開始為Gear VR開發VR遊戲,並一直尋求在相關的系統限制下實現我們最佳的視覺效果。最低硬體規格是三星Note 5。所以,我們在與製作階段了進行了一系列的性能測試:最大繪製調用,可持續的頂點/多邊形數量,烘焙照明與動態照明,蒙皮網格性能等等。我們根據相關的測試開發了一個管道,而它為我們的遊戲提供了最佳的視覺效果。

利用這一流程開發的首款演示內容是《Cursed Sanctum》(下面第一組圖像)。所述作品於2017年3月發行,並且依然支持Gear VR和Oculus Go。我們的第二款作品《Myth Hunters》已於2019年12月5日與大家見面。這是一款完整的遊戲,並且採用了我們先前開發的眾多技術。

隨著時間的流逝,原本專屬於特定軟體平台的工具開始日漸普遍,尤其是GPU紋理烘焙,所以我們的方法現在可以在大多數流程管道中使用。今天,我們將向大家介紹基於Unity的Oculus Quest演示作品《Ogre Smithy and His Workshop》,並用於展示了我們的工具和流程管道。我們在下面的博文中提供了這個示例的概述,包括如何準備3D asset,Unity管道的設置,以及工作流程的基本教程。我們希望能夠為你提供一定的借鑑參考,從而幫助你不斷創造具有優秀視覺體驗的遊戲內容。

1. 包括在場景中的3D asset

所有asset均使用生成遊戲美術的標準做法進行建模和構造。創建高細節模型,然後是優化的拓撲網格及紋理處理。我們的管道包括ZBrush,3DS Max,Photoshop,Substance Painter和Unity。

2. 場景構建及管道

在導入Unity之前,我們用於創建場景和紋理烘焙的管道是基於3D Studio Max(Autodesk)和V-Ray(Chaos Group)。然後,我們使用V-Ray的控制和渲染功能將所有照明和高多邊形細節烘焙到低多邊形的遊戲內asset。對於《Ogre》演示,我們同時使用Substance Painter對一定的asset進行處理,將高多邊形細節烘焙到低多邊形asset。

為了確保這個過程的成功,高多邊形和低多邊形asset必須共享相同的坐標,並且必須彼此重疊。上面是兩者的視圖,你可以看到高多邊形asset中的幾何細節水平。對於場景構建,模型始終是作為一個asset進行移動。

3. 為3DS Max預備asset

第一步是在3DS Max中使用V-Ray材質獲得基本幾何形狀。我們使用「Vray」 Config從Substance Painter導出紋理。

導出紋理後,我們需要將其分配給3DS Max中的V-Ray著色器,並將其應用於烘焙對象。材質類型必須切換為VrayMTL。從Substance導出的所有紋理類型在VrayMtl中都有一個類似命名的欄位。對於凹凸貼圖,請確保使用「VrayNormalMap」類型。考慮到我們在演示內容中同時使用了高多邊形烘焙對象和低多邊形烘焙對象,這確實是需要在製作期間做出的決定。由於場景完全依賴於密集的高多邊形烘焙對象,3DS Max文件往往會變得非常大,甚至達到千兆字節。每種方法的決定應視場景而定,我們需要將唯一asset的數量,每個細節的大小+密度,文件大小,以及最終視覺目標都考慮在內。

即便有了從Substance Painter導出至V-Ray的預設,我們發現正常凹凸的綠色通道通常都需要翻轉才能獲得正確的結果。

4. 3DS Max中的場景裝配

一旦預備好所有的asset,並且都具有高多邊形「烘烤」和低多邊形「投影」就緒的asset,我們就可以裝配場景。場景裝配非常簡單,只需將素材放置在3D空間中即可創建完整的環境。我們強烈建議使用實例或引用方法來複製asset,從而將場景文件的內存占用降至最低。設置分層系統非常重要,這允許你輕鬆選擇場景中的高多邊形和低多邊形對象。最終,低多邊形將作為單個對象組合在一起。在《Ogre》中,由於我們在Substance中烘焙了大量的正常數據,所以我們能夠將項目的低多邊形對象用作高多邊形的基礎。

下圖是High_Exeterior_Terrain_High中的Sand_Floor視圖。asset包含230萬個頂點。

沙漠地面切分成較小的塊狀,從而平衡每個對象的多邊形數量,並且當它不在camera視場中時利用遮擋剔除的優勢。

注意「Bake」圖層asset的命名和層次結構約定;文件組織和asset命名令我們在3DS Max和Unity中執行每個步驟變得更加容易。

對於性能,除了最小化繪製調用,重要的一環是減少多邊形。在確定場景後,請刪除不必要的多邊形,從而減少遊戲中的幾何形狀。

建立場景後,我們需要進行紋理烘焙的準備。在這個步驟中,我們將各個遊戲asset組附加在一起,並變成一個唯一的對象。通過附加對象,組合對象的UVW坐標將重疊。必須在紋理烘焙之前解決這個重疊問題,而你只需將組合對象的UVW坐標移動到UVW2並擴展即可消除重疊。組合對象的數量通常取決於每個對象的多邊形計數要求,以及最終場景中的總繪製調用。

下圖是對象組合併將坐標重新映射到UVW2的另一示例:

一旦組合所有遊戲asset並重新映射,我們接下來就可以進行場景烘焙。前提條件是,必須使用V-Ray照明場景。對於這個階段的可視化,我們可以將其作為高多邊形場景的渲染並使用GPU渲染。

《Ogre》場景演示了兩種紋理烘焙方法,在這裡進行區分說明十分重要。在3DS Max中,對象可以自行投影,或通過投影修改器將一組對象投影到另一個對象。要指定紋理烘焙,我們使用「Rendering」選項卡中的「render-to-texture」選項。選擇將為其分配投影紋理的對象。然後,我們需要為紋理烘焙設置所需的設置。對於這個示例,我們的過程要求使用「VrayCompleteMap」輸出類型。有關V-Ray的詳盡指南說明,請參見這個教程:Basic Texture Baking with V-Ray。

5. 自投影

萬分注意:請不要啟用「Mapping」欄位,並確保設置正確的UVW通道。

6. 投影另一個對象

要啟用「Projection Modifier」欄位,請確保設置正確的UVW通道。將Push修改器應用於烘焙對象,並確保Push修改器設置一個足夠大的值,以消除高多邊形基礎幾何圖形和遊戲內投影幾何圖形之間的相互穿透,否則烘焙的紋理將出現撕裂。

關於在3DS Max中使用V-Ray進行烘焙的最後一點說明。在撰寫本文時(2019年12月),烘焙對象需要完全透明的VrayMtl才能正確渲染。未來的軟體疊代或許能夠解決這個問題。

儘管所述步驟特定於這個軟體組合,但方法中的許多都可以與其他軟體管道結合使用。

請始終將紋理烘焙為具有48位和Alpha的PNG文件。有時,烘焙的紋理會變暗,這需要在Photoshop中進行處理。使用48位可以調整曝光,不會造成褪色和條紋。

我們在Photoshop中使用一組動作來處理和填充渲染紋理的空白。

出於美學原因,可以全局調整紋理。通過對場景整體執行所述步驟,我們不會造成接縫,並且可以進行大大小小的更改,無需重新渲染。請參見下面的渲染和紋理烘焙處理示例:

作為最終檢查,準備就緒的asset應將烘焙紋理用作自發光材質。這個過程將驗證烘焙的紋理,並公開需要解決的所有錯誤。一旦畫面看起來正確,場景就可以導出到Unity。通常,我們在導出前會應用Reset XForms,對齊軸,並檢查所有對象的法線。

7. Unity管道

有了上面一系列的場景設置和製作工作,Unity的操作過程相當簡單。上面提到的部分Unity功能可以在線學習,我們接下來不會逐步介紹。

7.1. 將asset導入Unity

在正確命名所有asset的情況下,請以最適合項目的文件夾結構將將FBX和紋理導入Unity。通常,我們將幾何與紋理和著色器分開。由於這是一個導出場景,因此所有內容都位於相同的相對位置。要令場景看起來令人滿意,你只需為每個紋理創建一種材質並將其應用於每個幾何體。

一旦放置在場景中,新導入的FBX應該設置為靜態,而網格渲染器的「Receive Global Illumination」下拉菜單應設置為「Light Probes」。這可以告訴Unity不要生成光照貼圖,但允許幾何體影響光探針。

對於這個演示內容,我們在Unity中使用了「Lightweight Render Pipeline/Unlit」著色器。

下一步是應用天穹,而這在烘培過程中非常重要。

在完全設置場景後,下一步就是添加Unity光探針和反射探針。這個管道中沒有動態Unity光源,所述探針將用於在Unity中烘焙光源和反射貼圖,以供場景中動態對象的著色器接收光信息。

光探針和反射探針示例配置。上圖:外面;下圖:裡面

設置好探針後,我們需要進行快速光烘培。我們發現缺乏一個乘法因子的基礎紋理不允許足夠的光發射到探針。要解決此問題,我們在烘培之前執行以下操作:

暫時將材質的著色器設置為「Lightweight Render Pipeline/Lit」。請記住,如果你是使用最新版本的Unity,它的名稱可能是「Universal Render Pipeline/Lit」。

勾選Emission複選框。(僅限第一次烘培)

將烘焙紋理分配給Base Map和Emission Map參數。(僅限第一次烘培)

要增強光探頭,請將Emission Color設置為2、2、2(RGB)。(僅限第一次烘培)

保存項目(File & Save Project),儲存材質改動以供日後使用。 (僅限第一次烘培)

依次轉到Lighting選項卡((Window > Lighting Settings),然後點擊「Generate Lighting」按鈕以烘培場景。

選擇所有場景材質,並將著色器設置回「Lightweight Render Pipeline/Unlit」。

通過Lighting選項卡及「Generate Lighting」按鈕的下拉箭頭烘焙反射探針。然後,保存項目(File > Save Project)。現在,場景已經可以用於遊戲之中。

烘焙光探針後及在烘焙反射探針之前,我們必須將材質恢復到標準曝光範圍,這一點十分重要。如果不這樣做,場景中的動態對象在遊戲中會太亮。

8. 管道的優勢

我們在三年前就開始構建這個管道流程,目標是減少Gear VR和三星S5的繪製調用並創建最佳視覺效果。我們對這兩種情況的結果都感到滿意。

下面是採用這一管道的其他原因:

  1. 烘烤單個或多個選定的asset。
  2. V-Ray強大的控制項可用於微調渲染,能夠提高質量和節省製作時間。
  3. 非常高性能的著色器可用於靜態幾何體。
  4. 允許高多邊形計數,這在VR中的效果非常好,因為深度細節對視覺影響很大。
  5. 粗糙表面的視覺效果更好,相當光滑的表面看起來也不錯。

9. 管道的挑戰

我們在使用這個管道時確實有遇過一定的挑戰。下面是採用這一管道的其他原因:

  1. 當場景接近最終場景時,場景幾何的疊代可能會令人生畏且耗時。
  2. 要取得滿意的結果,你需要採取許多個步驟並留有出錯的餘地,因為場景變大了且越來越複雜。
  3. 組合烘焙對象和重新映射UVW坐標的過程變得非常耗時,而且分組更加複雜。
  4. 基礎幾何圖形和烘烤幾何圖形需要保持同步。
  5. 在環境中使用的動態照明將無法正常工作,或者至少看起來不會很好。
  6. VRAM/磁碟使用率很高。sparse virtual texture或許可以繞開這個問題。

10. 下載示例項目

首先,你需要下載這個Unity項目。它至少需要Unity 2019.2,並且是嘗試這一示例的推薦版本。打開OculusOgrePrototype.unity。如要構建和部署場景,你需要輸入自己的簽名證書,然後就可以正常地進行開發並部署到Quest。有關如何構建並將將Unity應用部署到Quest的更多信息,請參見這個文檔頁面。

11. 總結

《Cursed Sanctum》顯然受益於這個管道流程,即使已經過去兩年,這款遊戲依然憑藉視覺效果獲得Gear VR和Go玩家的好評。我們繼續在《Myth Hunters》沿用這一流程管道,而它使得我們的平均紋理烘焙時間從4個小時降低到20分鐘。展望未來,我們將評估Unity的變化以及GPU支持紋理烘焙的實現,從而確定是否可以在場景構建和烘焙過程中更多地利用Unity。另外,隨著VR硬體性能的提升,數年前的多個性能瓶頸將漸漸變得不再重要,並允許我們調整流程,從而更好地開發未來的遊戲。感謝你抽出時間閱讀我們的博文,希望這能夠為你提供幫助。

原文連結:https://yivian.com/news/70821.html

關鍵字: