天美高階TA:淺談大世界場景自動生成技術
本文首發“TiMi Club 天美俱樂部”微信公眾號
中國遊戲行業發展至今,從專業到分工,正在經歷哪些變化?天美聯合騰訊遊戲學堂,舉辦“遊戲是門技術活兒:專業技能探祕”知乎圓桌活動,本文為圓桌議題“2022 年,有哪些遊戲領域的新技術令你期待?這些技術可能催生出什麼樣的遊戲內容?”下的回答,希望對大家有所幫助。
作者:AllenP
騰訊天美J2工作室高階技術美術
本人是一名負責程式化生成方向的 TA,個人興趣領域主要在大世界場景自動生成方向。
以往的場景生產基本都依賴於美術自由發揮,這樣雖然可以更好地發揮美術的藝術創造力,但需要大量的人工來堆砌資源,而且一旦場景設計做了修改,整個場景的美術資源基本都需要推倒重做,因此傳統場景生產的開發效率和修改成本都比較高。
為了能夠加速場景的生產效率,程式化生成技術就成了不二的選擇,這也是我目前最關注的新興技術之一。
在程式化生成的流程搭建中,程式化 TA 主要負責模組拆分的設計,生成規則的抽樣,生成演算法的實現,以及程式化生成工具流的搭建。
基於資料來源,很多東西都是可以通過程式化生成來製作的,如地形地貌的生成,河流的生成,植被的生成,基建的生成(道路,橋樑,建築,街區),氛圍的生成(如材質受酸雨的腐蝕,建築從上自下的髒跡)等。
簡而言之,程式化生成技術可以在僅需提供少量曲線資料,以及模組資源的情況下,自動化地將整個場景生成出來。
程式化生成具體是如何實現的?主要分為幾個步驟。
01、獲取資料來源
如河流的分佈,湖泊的範圍輪廓,道路的分佈資訊,建築的輪廓資訊等,這部分一般可以使用曲線+屬性的方式來表述。
地形一般是用均勻的網格+高度圖來描述,網格一般是由引擎執行時生成的,因此如何生成地形實際就是如何生成這張高度圖。
如果是基於真實的地圖資料,可以在網上下載對應區域的 DEM 資料(數字高程模型),或者可以通過演算法進行迭代生成,比如使用噪聲圖疊加,熱力侵蝕,水侵蝕等演算法進行擬合。
道路,河流可以由曲線表示它的長度和走向,通過每一段標識的屬性可以獲取名稱,寬度等資料,以及地形的高低走勢,程式化生成出道路的模型,河流模型。生成時還要考慮一些約束對地形的影響,比如在起伏的山林中,道路始終是平整的,並且坡度不能超過一定的閾值。
建築,湖泊部分則可以通過封閉的曲線來獲取其在場景中的位置,通過型別屬性,來確定建築的生成風格,通過高度屬性來獲取建築有多少層等。
曲線資料的來源一般有兩種,一種是基於真實地圖資料的遊戲場景(比如可以通過 OpenStreetMap 下載地圖資料)。另一種方式是通過自己手動編輯曲線的方式來佈置路網。
02、對資料的補齊
除了通過手動編輯補齊外,還有一些自動補齊資料的方法。
比如通過路網資料,我們可以將地圖劃分為多個街區,可以自己設計演算法,對每個街區進行建築的填充,演算法除了可以考慮建築的分佈方式外(如寫字樓,可以採取沿街分佈,獨棟建築可以採取中心分佈),還可以根據街區的型別,去匹配不同型別,不同高度的建築群(如商業區,住宅區),最後由建築間形成的“縫隙”可以獲取到小路的資料資訊。
又比如,可以結合地形的高程資訊,水域的分佈資訊,地貌資訊,城鎮分佈資訊等,生成植被分佈的點雲資料。如果對生成的結果不滿意,也可以手動通過刷範圍的方式,人為地控制植被的分佈區域及種類。
03、將資料通過演算法轉化為 3D 模型
生成方法分為兩種,一種是通過演算法生成獨立的模型,這種方法比較適用於遊戲中特殊模型的生成,如不規則的交匯路口,弧度比較大的護欄等。
另一種是使用預先準備好的資產,根據一定的規則,將模型分佈在對應的點雲資料上。比如草,樹木,路燈這種一個點雲代表一個物體的。又或者是類似於建築模組這種,一組點雲資料代表一個物體的,如圖:
大型建築立面的牆可以用幾種模組拼接生成。這種拼接方式的好處是能夠節省模型、貼圖的資源量,並且在遊戲中可以使用 Instance Draw 的方式進行繪製,從而降低實時渲染的開銷。
04、場景裝飾物的填充和環境氛圍的填充
比如建築的掛件,街道上的路燈,護欄等。這些都可以通過抽樣一些分佈規則,通過自動撒點的方式進行生成。
比如如果設計師希望表達一種偏末世的場景,可以根據地勢的走向,對場景生成一些環境氛圍元素,例如:被水淹過的道路上可以生成一些青苔,建築上可以生成藤蔓,根據不同季節,植被顏色,茂密程度可以有所調整,被海嘯襲擊過的區域植被,地形損毀程度的模擬等。
在大世界的程式化生成方向,最近令我印象比較深刻的內容是由 Epic Games 推出的《黑客帝國覺醒:虛幻引擎 5 體驗》。
這款技術 Demo 介紹了一套完善的、基於 Houdini 的現代城市的程式化生成方案,它不僅考慮瞭如何對真實物件效果的還原,還考慮到了如何使用更省的方式實現效果,從而減少效能及資源量方面的壓力。
比如,在建築生成上,介紹了一套如何生成現代建築的完備方案,包括如何對建築模組進行合理的拆塊兒,如何對建築進行拼接,如何使用 Instance Draw 來降低渲染壓力,以及一些製作時防止模組穿插的小技巧,如對銳角,鈍角類建築轉角模組的處理,通過一個通用的連結角來杜絕模型拼合可能引起的穿幫現象。
比如,在材質製作上,介紹瞭如何實現基於深度的 3D 假室內的效果,不但表現效果可以模擬真實的室內場景,而且從效能方面考慮,用單個材質渲染代替了真實的 3D 室內場的模型渲染,有效降低了效能開銷。
虛幻商店也給到了這個專案的資源包,可以直接檢視該工程的所有資源和程式化生成製作的相關外掛。通過對這個工程進行深度分析,可以幫助我們零距離地瞭解如何用工業化的方式去生產 3A 品質的遊戲,同時也可以自己去實踐如何去生成新的世界。
最後暢想一下這項技術的未來。現在的工業化生產,主要還停留在開發者應用的階段,未來如果把 Houdini 的這一套生成演算法搬到遊戲引擎中,結合實時光照,GI 的特性,可以使這個編輯器功能轉變為玩家 DIY 的遊戲功能,比如實現自由度更大的建造系統,自定義關卡設計等。讓玩家能夠體會到生產高質量場景的快感。
對於 TA 來說個人覺得有幾個方向可以去深入研究:
1. 如何對演算法進行加速,使平常要花費幾分鐘的生成工作,可以在幾秒鐘甚至毫秒時間內完成。比如可以考慮把演算法搬到 ComputeShader 中,利用 GPU 的並行度進行加速,也可以考慮採用多執行緒,分塊等方式將需要計算的超大任務,拆分成更小的任務塊分多次處理。
2. 如何將枯燥的編輯工具,變得好玩。一方面在編輯方式上考慮更加貼合玩家的使用習慣,一方面可以增加一些編輯時的動效,比如畫線時帶上一些拖尾效果,生成物件時增加一些有趣的出場方式等。
對TATD職位感興趣的同學,歡迎加入天美工作室群一起來打造具有世界級影響力的遊戲作品,簡歷定點投放:yatingcai@tencent.com
來源:TiMi Club 天美俱樂部
中國遊戲行業發展至今,從專業到分工,正在經歷哪些變化?天美聯合騰訊遊戲學堂,舉辦“遊戲是門技術活兒:專業技能探祕”知乎圓桌活動,本文為圓桌議題“2022 年,有哪些遊戲領域的新技術令你期待?這些技術可能催生出什麼樣的遊戲內容?”下的回答,希望對大家有所幫助。
作者:AllenP
騰訊天美J2工作室高階技術美術
本人是一名負責程式化生成方向的 TA,個人興趣領域主要在大世界場景自動生成方向。
以往的場景生產基本都依賴於美術自由發揮,這樣雖然可以更好地發揮美術的藝術創造力,但需要大量的人工來堆砌資源,而且一旦場景設計做了修改,整個場景的美術資源基本都需要推倒重做,因此傳統場景生產的開發效率和修改成本都比較高。
為了能夠加速場景的生產效率,程式化生成技術就成了不二的選擇,這也是我目前最關注的新興技術之一。
在程式化生成的流程搭建中,程式化 TA 主要負責模組拆分的設計,生成規則的抽樣,生成演算法的實現,以及程式化生成工具流的搭建。
基於資料來源,很多東西都是可以通過程式化生成來製作的,如地形地貌的生成,河流的生成,植被的生成,基建的生成(道路,橋樑,建築,街區),氛圍的生成(如材質受酸雨的腐蝕,建築從上自下的髒跡)等。
簡而言之,程式化生成技術可以在僅需提供少量曲線資料,以及模組資源的情況下,自動化地將整個場景生成出來。
程式化生成具體是如何實現的?主要分為幾個步驟。
01、獲取資料來源
如河流的分佈,湖泊的範圍輪廓,道路的分佈資訊,建築的輪廓資訊等,這部分一般可以使用曲線+屬性的方式來表述。
由真實地圖的 OSM 資料匯入 Houdini 中形成的路網,河流資料
地形一般是用均勻的網格+高度圖來描述,網格一般是由引擎執行時生成的,因此如何生成地形實際就是如何生成這張高度圖。
如果是基於真實的地圖資料,可以在網上下載對應區域的 DEM 資料(數字高程模型),或者可以通過演算法進行迭代生成,比如使用噪聲圖疊加,熱力侵蝕,水侵蝕等演算法進行擬合。
道路,河流可以由曲線表示它的長度和走向,通過每一段標識的屬性可以獲取名稱,寬度等資料,以及地形的高低走勢,程式化生成出道路的模型,河流模型。生成時還要考慮一些約束對地形的影響,比如在起伏的山林中,道路始終是平整的,並且坡度不能超過一定的閾值。
建築,湖泊部分則可以通過封閉的曲線來獲取其在場景中的位置,通過型別屬性,來確定建築的生成風格,通過高度屬性來獲取建築有多少層等。
曲線資料的來源一般有兩種,一種是基於真實地圖資料的遊戲場景(比如可以通過 OpenStreetMap 下載地圖資料)。另一種方式是通過自己手動編輯曲線的方式來佈置路網。
02、對資料的補齊
除了通過手動編輯補齊外,還有一些自動補齊資料的方法。
比如通過路網資料,我們可以將地圖劃分為多個街區,可以自己設計演算法,對每個街區進行建築的填充,演算法除了可以考慮建築的分佈方式外(如寫字樓,可以採取沿街分佈,獨棟建築可以採取中心分佈),還可以根據街區的型別,去匹配不同型別,不同高度的建築群(如商業區,住宅區),最後由建築間形成的“縫隙”可以獲取到小路的資料資訊。
又比如,可以結合地形的高程資訊,水域的分佈資訊,地貌資訊,城鎮分佈資訊等,生成植被分佈的點雲資料。如果對生成的結果不滿意,也可以手動通過刷範圍的方式,人為地控制植被的分佈區域及種類。
03、將資料通過演算法轉化為 3D 模型
生成方法分為兩種,一種是通過演算法生成獨立的模型,這種方法比較適用於遊戲中特殊模型的生成,如不規則的交匯路口,弧度比較大的護欄等。
另一種是使用預先準備好的資產,根據一定的規則,將模型分佈在對應的點雲資料上。比如草,樹木,路燈這種一個點雲代表一個物體的。又或者是類似於建築模組這種,一組點雲資料代表一個物體的,如圖:
《黑客帝國覺醒:虛幻引擎 5 體驗》建築模組拆分示意圖
大型建築立面的牆可以用幾種模組拼接生成。這種拼接方式的好處是能夠節省模型、貼圖的資源量,並且在遊戲中可以使用 Instance Draw 的方式進行繪製,從而降低實時渲染的開銷。
04、場景裝飾物的填充和環境氛圍的填充
比如建築的掛件,街道上的路燈,護欄等。這些都可以通過抽樣一些分佈規則,通過自動撒點的方式進行生成。
比如如果設計師希望表達一種偏末世的場景,可以根據地勢的走向,對場景生成一些環境氛圍元素,例如:被水淹過的道路上可以生成一些青苔,建築上可以生成藤蔓,根據不同季節,植被顏色,茂密程度可以有所調整,被海嘯襲擊過的區域植被,地形損毀程度的模擬等。
在大世界的程式化生成方向,最近令我印象比較深刻的內容是由 Epic Games 推出的《黑客帝國覺醒:虛幻引擎 5 體驗》。
《黑客帝國覺醒:虛幻引擎 5 體驗》
這款技術 Demo 介紹了一套完善的、基於 Houdini 的現代城市的程式化生成方案,它不僅考慮瞭如何對真實物件效果的還原,還考慮到了如何使用更省的方式實現效果,從而減少效能及資源量方面的壓力。
比如,在建築生成上,介紹了一套如何生成現代建築的完備方案,包括如何對建築模組進行合理的拆塊兒,如何對建築進行拼接,如何使用 Instance Draw 來降低渲染壓力,以及一些製作時防止模組穿插的小技巧,如對銳角,鈍角類建築轉角模組的處理,通過一個通用的連結角來杜絕模型拼合可能引起的穿幫現象。
比如,在材質製作上,介紹瞭如何實現基於深度的 3D 假室內的效果,不但表現效果可以模擬真實的室內場景,而且從效能方面考慮,用單個材質渲染代替了真實的 3D 室內場的模型渲染,有效降低了效能開銷。
虛幻商店也給到了這個專案的資源包,可以直接檢視該工程的所有資源和程式化生成製作的相關外掛。通過對這個工程進行深度分析,可以幫助我們零距離地瞭解如何用工業化的方式去生產 3A 品質的遊戲,同時也可以自己去實踐如何去生成新的世界。
最後暢想一下這項技術的未來。現在的工業化生產,主要還停留在開發者應用的階段,未來如果把 Houdini 的這一套生成演算法搬到遊戲引擎中,結合實時光照,GI 的特性,可以使這個編輯器功能轉變為玩家 DIY 的遊戲功能,比如實現自由度更大的建造系統,自定義關卡設計等。讓玩家能夠體會到生產高質量場景的快感。
對於 TA 來說個人覺得有幾個方向可以去深入研究:
1. 如何對演算法進行加速,使平常要花費幾分鐘的生成工作,可以在幾秒鐘甚至毫秒時間內完成。比如可以考慮把演算法搬到 ComputeShader 中,利用 GPU 的並行度進行加速,也可以考慮採用多執行緒,分塊等方式將需要計算的超大任務,拆分成更小的任務塊分多次處理。
2. 如何將枯燥的編輯工具,變得好玩。一方面在編輯方式上考慮更加貼合玩家的使用習慣,一方面可以增加一些編輯時的動效,比如畫線時帶上一些拖尾效果,生成物件時增加一些有趣的出場方式等。
對TATD職位感興趣的同學,歡迎加入天美工作室群一起來打造具有世界級影響力的遊戲作品,簡歷定點投放:yatingcai@tencent.com
來源:TiMi Club 天美俱樂部
相關文章
- 得物技術淺談自動化生成程式碼幾種方案的演變
- 淺談PHP自動化程式碼審計技術PHP
- 探討大世界遊戲的製作流程及技術——大場景製作技術概況篇遊戲
- 淺談動態追蹤技術
- 淺析人臉識別技術應用場景
- 淺談聚合介面的應用場景
- 淺談技術翻譯
- 快取技術淺談快取
- 【技術面對面】基於場景圖的多物體影像生成技術
- 淺談移動應用的技術選型
- 淺談自動過帳
- 資深技術貼:自動去光照,完美融入遊戲場景的黑科技遊戲
- 曼孚技術分享:資料標註都在自動駕駛哪些場景落地?自動駕駛
- IPSECVPN技術淺談
- 淺談程序隱藏技術
- 淺談自動化測試
- 淺談API HOOK技術(一) (轉)APIHook
- 淺談API HOOK技術(二) (轉)APIHook
- 利用 OpenAI 的文字生成模型,自動生成測試用例的幾個場景示例OpenAI模型
- 【已結束】SegmentFault 思否技術徵文丨淺談 Java 進階之路Java
- 淺談SAP Cloud for Sales 自動化Cloud
- 淺談:Java有哪些受歡迎的使用場景?Java
- 淺談線下場景中的資料分析思路
- 淺談日本伺服器適合的使用場景伺服器
- 淺談微信公眾平臺運用的場景
- 智慧座艙 自動化測試淺談之使用者場景下的語音互動系統測試
- 淺談生成函式函式
- 淺談LocalCache | 京東雲技術團隊
- 淺析WebRTC技術在智慧園區影片管理場景中的應用Web
- SegmentFault 思否技術週刊 Vol.74 — 淺談 Android 進階指北Android
- 家電造車:技術向左,場景向右
- 淺談自動化構建之grunt
- 淺談自動化構建之gulp
- 淺談倉儲UI自動化之路UI
- 淺談10G SGA自動管理
- 騰訊天美六位TA:技術美術這份職業會長期存在嗎?
- 淺談RASP技術攻防之基礎篇
- 淺談.NET技術公司的實習生培養