淺聊程式化世界構建流程
遊戲開發中的過程化生成技術(Procedural Generation)讓開發者能使用少量的程式碼,生成一個無限可能的空間,隨著目前大世界沙盒生存遊戲的發展,PCG相關的技術剛開始在國內大公司引起重視沒幾年,儘管這種理念已經在國外作為遊戲工業化生產的標準,以前國內傳統的場景製作流程一般還是先出個layout白模,然後由場景地編將遊戲世界中的一草一木都是手工精心調整,需要大量的人力來維護和更新,一旦遇到整個場景的迭代,所有時間與過程將浪費,大量成本人力會急劇的上升。不同這些的是PCG的理念是通過配置一些生成的規則,然後由生成演算法自動去生成遊戲世界,運用得當可以進行快速迭代,節省大量的美術的工作量和成本。它的完整的設計的目的就是為了允許在專案的任何階段都可以進行快速的迭代。
對於技術的使用通常需要在遊戲的原型設計階段開始介入,從遊戲大世界內容製作到遊戲批量內容迭代一直貫穿,在製作流程上,需要拆分成不同的模組進行製作,這樣不同模組之間可以根據需要相互協同,並且有可以進行復用。從介入時間和模組化劃分的好處是可以保證整個流程的製作是與專案所需的美術風格是一致的,同時可以根據必要的美術需求進行定製化工具的開發,而作為整個工具鏈的目標產出是幫助美術可以使得所有內容通過極少的引數和輸入進行控制並以這種方式來加速美術內容的製作。希望使得在相同的引數的輸入下,輸出的內容一定是完全一致的。
我們在實際的操作中可以把所有的美術製作內容都可以歸類到幾個不同的抽象層,按照不同抽象層之間的依賴關係,製作每一個抽象層本身的生成規則,當每一層的規則足夠複雜時,就可以一定程度上去仿造美術的製作流程,綜合所有抽象層的輸出,完成對一個完整遊戲關卡世界的按照規則引數的輸出。
抽象流程
而在實際的操作時候不同的分層之間其實是有依賴關係的,必須需要按照依賴關係來處理。生成的時候需要要遵循一定的順序進行比如道路的生成是需要地形相關的資料,而後道路的生成又為村莊的分佈提供了基本資料;再比如需要根據地理環境的資料例如草地、土壤、岩石、房屋等分佈,來佈置整個世界上的草地、樹林和沙灘的位置。
下面說說我們在遊戲專案中實踐的Pipeline,基本可以歸納為五步走:
1.遊戲概念設定:為了保證整個場景風格一致,需要統一的概念設定和參考,通常由原畫和文案一起給出相應的概念稿給KFZ全員,統一大家對於遊戲的認識
2.分析建立規則:其實對於大部分的設計都可以轉換成一系列規則,關卡美術或者關卡策劃用自然語言提煉出相應想做的世界的規則,這些規則比如:高緯度的樹應該比低緯度樹矮,道路兩邊草應該比較稀疏,並且有大量裸露地面。有了這些自然的規則TA或者程式才能去分析,然後根據這些規則去構建程式化的分層規則,從而構建出規則引擎。
3.模組化劃分:第二條的規則既然已經可以被程式所表達出來,那麼通過這些規則就可以製作對應的模組了,我們的規則越豐富則效果越接近預期,模組的建立輔助引擎搞定從美術的DCC到正式可用資源之間的橋樑。比如公路這個模組就可以拆分為:直線公路元件,彎曲公路元件,十字路口和三岔路口模型元件,已到達生存公路的目的。
4.關卡布置與引數調整:完成的模組元件可以通過mask圖或者曲線劃定區域在場景裡大量佈置,並通過對應的引數進行調整。
5.最終效果調整:最後必然會存在需要美術或者關卡策劃特別關注和表現的區域,這裡就需要人工進行干預了,由人來對最後的效果進行細化來提升,保證最終的交付效果。這樣的區域也可以提前就MASK圖層建立,防止在自動化生成結果沖掉這些需要特殊表現的區域。
最後以我們熟悉的FPS大世界類遊戲為例來說說實際開發中的階段的劃分:
1.遊戲開發初期:這個時期我們需要快速驗證遊戲的原型,確認遊戲的風格,前期就可以快速的自動生成整個包括植被、道路和村莊佈局的8km*8km的地圖,這樣就可以幫助策劃就可以對玩法和地圖進行快速想法的驗證。
2.堆量和細化中期:這個時期主要是量的產出問題,由於規則建立的靠譜那麼全地圖的樹木、灌木和各種掩體以及所有重新整理點的密度和分佈都是通過幾個引數快速調整的,還可以快速填充野外非建築區域的資源量。
3.全地圖效果後期:這個時期主要是配合測試反饋進行各種細節的調整階段,內容包括了根據反饋調整障礙物、掩體密度,根據優化反饋調整全地圖過於密集的物體,在上線前快速大量新增延期的外包美術物件,根據已有場景物件大量佈置三級物件,如果有需要還可以做對全地圖的所有樹木密度和分佈進行了大規模重新分佈。
技術本身看似美好,但是想要做好也是蠻有挑戰的一件事情,下面幾篇是近幾年來在GDC上分享的很有價值的文章,大家可以一看:
囧囧囧囧:淺析遊戲《無人深空(No Man's Sky)》中使用的程式化生成技術
去冒險的豬:GDC2017-幽靈行動:荒野技術展示
TraceYang:Houdini技術體系過程化地形系統(一):Far Cry5的植被系統分析
從上面那些大作中可以獲知模組化工具的技術積累是非常有必要的,這就要包括積累日常美術製作流程相關的工具,以提高製作效率,積累複雜關卡的生成邏輯來實現更高質量關卡的製作。所有的工具都需要考慮以減少美術製作人員的學習成本為目的,最好能幫助美術在製作時加快預覽效果與實際效果對比和最終資源的生產效率,而做好所有這些真的不是靠一兩個專案就能夠一蹴而就的,它需要一個長期探索與摸索的階段,還需要一直穩定且互信的團隊。
最後說點題外話,如何在遊戲專案中推進一個新的事物,那麼你就需要把基本的道理說透徹,且讓團隊成員都能明白這個道理是對的,如果團隊成員不理解靠強壓推進的方式也是不行的,到後來只會出現相互的抱怨,每個人的角度和立足點畢竟是不同的,還有就是有成功專案去支撐你的觀點肯定能事半功倍,當然你如果有足夠的個人影響力那是另外回事情,那麼事情就能好辦的多。
作者:FrankZhou
專欄地址:https://zhuanlan.zhihu.com/p/51368919
相關文章
- 聊一聊測試流程
- webpack的構建流程Web
- ElementUI的構建流程UI
- Spring Boot構造流程淺析Spring Boot
- webpack構建流程及梳理Web
- MyBatis(十一):MyBatis架構流程淺析MyBatis架構
- threeJs構建3D世界JS3D
- 淺析Vite本地構建原理Vite
- SpringBoot淺析——專案構建Spring Boot
- 淺淺的聊一下 WebSocketWeb
- webpack 流程解析(4): 開始構建Web
- 淺談遊戲體驗構建遊戲
- 從原始碼構建TensorFlow流程記錄原始碼
- 聊一聊系統重構
- 從今天起構建你的JavaScript世界JavaScript
- 淺談C#字串構建利器StringBuilderC#字串UI
- 淺談自動化構建之grunt
- 淺談自動化構建之gulp
- 淺談瀏覽器實時構建瀏覽器
- 即構推出「虛擬世界」解決方案,構建身臨其境的社交世界!虛擬世界
- 淺聊java執行機制Java
- [csi]淺聊ceph-csi元件元件
- 淺聊HTTP快取 (HTTP Cache)HTTP快取
- 如何構建一個高效的開發流程
- solr叢集構建的基本流程介紹Solr
- 由淺入深 docker 系列: (2) docker 構建Docker
- Tech Talk · 雲技術有話聊 | 如何構建雲安全中心?
- 10分鐘瞭解Android專案構建流程Android
- 深入淺出的webpack構建工具---HappyPack優化構建(九)WebAPP優化
- 如何構建虛擬世界的價值體系虛擬世界
- 《最終幻想14》是如何構建世界觀的?
- 區塊鏈將構建完美的契約世界區塊鏈
- 魂系列、惡魔城和開放世界——關卡結構理論和非線性流程設計方法淺析
- 【來聊一聊前端架構之一】前端架構認知前端架構
- 深入淺出的webpack構建工具---DllPlugin DllReferencePlugin提高構建速度(七)WebPlugin
- 淺談Android打包流程Android
- 教育培訓機構網站建設製作流程?網站
- Linux下配置Jenkins+gitlab持續整合構建流程LinuxJenkinsGitlab