本文轉自公眾號:虛幻引擎
大家好!如果你現在已經在我的各種網站(LinkedIn或Instagram)上關注了我,你就會知道我最近對Nanite和植被的興趣。通過這篇文章,我想詳細介紹我的工作流程以及我在這個項目中所學到的東西。
請注意,這絕不是一個教程或做事的唯一方法。這只是我開發并用來創建此場景的工作流程。我堅信它仍然還有很大的改進空間。
Speedtree - 樹木創建
盡管Nanite在三角形(tris)預算方面具有很大的自由度,但它并不是無限的。這就是為什么我決定將每棵樹的多邊形數量設定為一百萬到兩百萬個三角形。對于一款游戲來說,這樣的資產精度有點過高了,但現在只是制作一個場景,我就放飛自我了。還需要知道的是,大部分多邊形數量來自于樹葉,樹葉可以進一步優化。請注意,無論你是否使用Nanite,創建邏輯都保持不變:多邊形數量越低越好。
使用掃描樹干 - 創建樹木的第一步是充分利用Nanite,這就是我決定使用Megascans掃描樹干的原因。盡管使用了Nanite,我還是選擇使用LOD3以獲得更大的舒適度。更低的LOD會過重。
在繼續處理樹之前,我總是盡可能先創建可平鋪的掃描紋理。有些資產非常特殊,有時最好使用Megascans或其他庫提供的可平鋪紋理。要根據掃描部分創建可平鋪的紋理,你可以使用為此目的制作的網格體轉換器工具。還要注意,它可以幫助你將掃描的資產轉換為Speedtree資產,這在進行大規模優化時非常有用。
借助“Stitch”工具,可以非常輕松地組合自定義資產和Speedtree資產。雖然需要正確定位,但它對于將兩種資產類型結合在一起有很大幫助。請注意,Stitch總是帶有一個分支,代表主干的連續性。你必須將我們之前創建的紋理分配給這個分支。
需要了解的是 - 為了使Stitch和網格體之間的過渡完美進行,你需要通過選擇網格體、轉到“材質”并使用“烘焙縫合工具”選項來烘焙此信息。從這里你可以僅烘焙紋理,或使用它們自動創建著色器。
結構工作流程 - 其余結構總體上與Speedtree非常相似。但是由于使用Nanite,你不必烘焙整個樹枝,在平面上使用來盡可能地優化樹木,因此真正的區別在于3d樹枝級別的數量,這比傳統工作流程要多。
Nanite圖集規格 - 雖然通常需要在地圖集中包含盡可能多的不同大小的分支,但在這里Nanite也要求你以不同于傳統植被的方式工作。
無需烘焙具有數十個不同分支階段的圖集,只需幾個小分支就足夠了。這不僅減少了圖集中元素的數量,還意味著元素可以變得更大,從而提高其質量。由于元素更大,其分辨率也更高,從而減少了在元素過多或元素大小未被合理控制的圖集中出現的“模糊”現象。
你可以親自查看傳統方法圖集與Nanite方法圖集之間的比較。
一旦圖集完成,我們就可以剪出詳細計劃來詳細說明我們的各個分支。但為了讓Nanite全速工作,必須去除所有透明度,尤其是植被。因此,我們需要找到一種方法,將基于不透明蒙版的經典網格體轉換為完全不透明的網格體,這樣就可以不用這個有問題的蒙版。
需要了解的是 - 你可以在我的Old West Environment課程中學習如何在混合工作流程(Nanite中的3D結構和LOD中的植被)中創建這些樹。
Houdini - 將基于阿爾法的網格體轉換為不透明網格體
這時我就非常感謝Quentin King和他的視頻,視頻里展示了如何創建工具在Houdini中將阿爾法卡網格體轉換為不透明幾何體。如果你想了解該工具是如何制作的,甚至如何重新制作它,我強烈建議你觀看他的視頻。
就我而言,我只會向你展示你可以使用該工具做什么。
如你所見,一旦正確配置,該工具就能完美運行,并且與手動工作相比可以節省大量時間。雖然理論上該工具適用于使用不透明蒙版的所有類型的資產,但我僅在植被上進行了測試。
現在,使用該工具對該場景中使用的幾棵樹進行處理,查看樹枝資產的結果。
Speedtree - 地面植被創建
地面植被的處理方法與樹枝的處理方法非常相似。我首先從基于不透明蒙版的剪切開始,然后使用上面顯示的工具將其移除。
這種資產類型的真正困難在于保持每個資產的三角形計數一致。由于每項資產都會重復多次,因此建議不要將其價值保持在太高的位置。除了我的草((過170k三角形)和紫色花朵(接近100k)外,我的其余資產均不超過30k。
再次強調,我得出這些數值,因為我是在場景中,而不是在游戲中。如果你對游戲采用類似的方法,我建議你每項資產不要超過10k。盡管Nanite可以很好地處理具有大量三角形的資產,但資產的三角形越少,Nanite的效率就越高,你就越能管理預算。
Speedtree - 風
最初,我的場景不包含風,只有靜態鏡頭可供渲染。因為知道給Nanite資產加上風會對性能產生影響,我不確定是否想嘗試。但后來我想,如果在這一點上不去嘗試失敗一下,那真是太可惜了,所以我冒險嘗試了。
“舊版Unity/虛幻引擎”和.st格式 - 我從經典方法開始,雖然我的資產在導入時移動得很好,但一旦轉換為Nanite,就不可能讓它們移動。我認為這一定是保存頂點顏色信息的問題,所以我切換到第二種方法。
Pivot Painter(IGToolsPP) - 盡管這種方法極其耗費資源,但如果它能讓我的樹在轉換為 Nanite 后移動,我愿意采用它。而且它確實有效,樹木通過這種方法移動,添加使工具與自定義著色器兼容的功能非常簡單,而且風也非常有趣。
但對于我來說,必須通過特定的層來配置它似乎相當復雜,特別是在數十種不同的資產上。盡管可以使用復制/粘貼選項,但這似乎不是最好的方法。更重要的是,它似乎在主干上有一個正常問題,這可能是由于我對此工具缺乏了解造成的。就在那時,我想到Speedtree提供的第二種風。
“游戲”和.st9格式 - 在經歷了前兩次失敗之后,我對測試這種新方法沒有什么信心了。我認為它會與第一種風類似。盡管如此,我還是冒險嘗試了這種新型的風。我嘗試了幾次才明白它是如何工作的以及每個參數起什么作用。當一切都清楚之后,我配置了我的第一個樹并將其導出到虛幻引擎。
第一個結果并不是很有說服力,即使我的樹在轉換后移動了,它們似乎與我在Speedtree上看到的完全不同。但這種風與“舊版”的區別在于,這里的所有參數都可以從虛幻中的材質實例中獲得。這為其配置提供了極大的自由。從那時起,我以樹木的風為基礎進行配置,不再考慮最終結果。
由于我的樹的每個生長階段都非常相似,因此只需配置一個就可以影響其他樹。因此我設置了四種風型,每個生長階段一種。大型、幼年、樹苗和幼苗。
因此,如果你需要在Nanite植被上配置風,我建議使用“游戲”風類型并從Speedtree 10以“.st9”格式導出你的資產。雖然這種風在版本9上可用,但我還沒有測試過。這樣,這些變化就不會影響所有Actor。
關于著色器
正如你現在所知,Nanite永遠不如不透明著色器更好工作,但如果你不想創建新的主著色器或擔心破壞已有的主著色器,你可以直接在材質實例中更改著色器類型(混合類型)。這樣,更改就不會影響使用相同著色器的Actor。
值得了解的是 - 你可以在這里了解如何創建此場景中使用的每個著色器
性能
在進一步討論這個問題之前,請務必記住我還沒有進行過任何廣泛的測試或比較。因此,除了我自己的發現之外,我不會在這里分享任何其他東西。
與該場景早期僅使用傳統植被相比,僅使用Nanite資產和不透明著色器所獲得的性能提升相當令人印象深刻。我很難進行比較,因為我根本沒有這樣想過這個項目,但在我沉浸在這個主題之后不久,我就分享了我對性能的驚訝。以下我開始研究后不久在LinkedIn上發布的一篇帖子的截圖,證明了這一點。
正如我所擔心和已經知道的,風對Nanite資產的影響相當顯著。平均來說,當有風時,我會損失大約30FPS。
最終場景在RTX 4080上以1440p分辨率、全是Nanite和風的情況下以大約45fps的速度運行,在沒有風的情況下則以75fps的速度運行。值得注意的是,地貌上的Nanite極其耗費資源,因此資產遠未得到最佳優化,并且這些數據來自編輯器而不是獨立版本。
然而,我相信,通過采用更加以游戲為導向的方法以及隨之而來的限制,在沒有風的情況下,在相同條件下保持100fps以上并非不可能。
總結
在進行這個項目之前,我認為Nanite不是一種用于植被的技術,但今天我的觀點發生了改變。我不會說它功能齊全、沒有問題,但虛幻引擎5的各種更新所取得的進展正朝著正確的方向發展,并強化了我的信念:有一天,Nanite和植被很可能成為許多工作室的選擇。
該項目將在未來幾個月的課程中介紹,但我將發布一篇新的博客文章來分享有關即將開設的課程及其發展方式的信息。
感謝各位花時間閱讀這篇文章。
不要猶豫,告訴我你對Nanite在植被上的看法,始終保持善意并尊重每個人的意見。
全文完
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.