[程式] 工作流程研究:快速世界建構

作者: dklassic (DK)   2021-03-29 17:02:07
雖然分類在程式好像不算是很正確。
不過相較其他分類應該比較接近程式,就用這個分類了(望
一、前言
開放世界應該對於很多人來說是某種夢想與浪漫。然而小團隊在資源上不太可能器及多大
的規模,自動地圖產生機制的設計又可能太難。
今年二月初因為從手上的專案暫時休息,也算當作一個練習,我決定摸索看看有什麼流程
可以讓廣大世界的製作能夠簡單達成,用最低限度的資源製作某種大規模場景。
雖然這篇裡面用的工具是 Unity,但是純粹工具組跟流程應該是可以適用於任何引擎。
二、目標
在這邊要為目標「使用最低資源製作大規模場景」做更明確的定義,以了解這項實驗的可
用之處與限制:
1.最低資源
不花費任何金錢,甚至以不撰寫任何程式為目標,意即近乎沒有技術知識也能處理。
2.大規模場景
能近乎無人工的情況下製作某種程度上可用的場景,開放世界關卡不是唯一目標。
所以某方面來說這個流程並不會讓你閉著眼睛就做出一款 3A 大作,但有可能作為有效的
基礎,幫助你進行地圖的建設或者是一個大規模背景的製作。
同時因為主要是流程上的探討,基本上不會花時間詳述實作細節,但是所有提到的工具應
該都有不少網路上提供的教學,只是沒有人整併起來整個流程。
三、流程
Open Street Map 是一個由社群之力建構的完全開放任何用途的地圖,這個流程基本上奠
基於 Open Street Map 的資料。由於 OSM 也有 3D 建築形狀的標記,所以就代表我們可
以直接從中取出建築跟道路的資訊。
1.建築
建築資訊可以藉由 Blender 的工具 Blender-GIS[1] 取得。
可以取得的模型大約像這樣:https://imgur.com/qAebT6J
基本大多是純粹的建築描框,甚至有些因為沒有高度標示而只能隨機產生。
使用 Blender-OSM[2] 的話能選擇建築的屋頂形式:https://imgur.com/f6dt7az
如果進一步使用的是 Blender-OSM 付費版[3] 的話,這個版本作者有額外附上建築材質:
https://imgur.com/sKHFBvn
我則因為想要對於建築的表現有更多的控制權,我選擇另外寫了一個 Unity HDRP/URP 用
的可控簡易建築外觀 Shader[4]:
https://imgur.com/VjeNatZ
https://imgur.com/bYxBsOp
應該還算騙(日夜循環影片)
https://imgur.com/kPLgbdY
2.道路
Blender-GIS 跟 Blender-OSM 同樣都可以取得道路資訊,差異是 Blender-GIS 只會取得
曲線,Blender-OSM 會直接給出一個 Mesh,因此先用這邊延續下去。
從 Blender-OSM 可以取得的 Mesh 資訊大約像這樣:https://imgur.com/Nic7wW1
路面資訊會另外根據道路用途標示出來,因此可以多準備幾種不同的材質分開貼上。這邊
再根據 Roman Papush 的道路 Shader 教學[5]製作可以輕易修改的程序產生材質。
https://imgur.com/7akfI8X
https://imgur.com/ZJbUyka
四、成果
https://imgur.com/sd7OSYb
https://imgur.com/t2eAWgN
https://imgur.com/iUyqNi5
https://imgur.com/k8qh7dX
https://imgur.com/uLmufX6(天空是根據 @jannik_boysen 的教學[6]製作的)
這個實驗結果並沒有辦法瞬間完成「某某城市」的 GTA,但作為一個基礎原型應該是相當
充足的。而如果是作為背景,甚至應該已經是完全可用的程度。
五、限制
當然畢竟作為一個完全土炮的流程,限制當然也很多。以下會詳述各項待處理的限制:
1.路口交界
由於 OSM 拉下來的資料只有路,因此不會特別處理掉路與路之間交疊的區域。
2.人行道
以城市來說這個做法還缺少最重要的人行道。可以嘗試在 Blender 裡面藉由布林運算取得
,但是可能會因為路面幾何的問題而無法有效取得。
3.地形
雖然像 Blender-GIS 可以拉衛星地形資料,但因為精度只有 30 公尺所以會造成奇怪的起
伏。因此如果要做為遊戲空間,可能不適合選擇地形起伏大的地區。
4.資料標示不全
由於 OSM 是社群貢獻,因此完整度、正確性會根據地區有極大的差異。
5.OSM 解析不全
由於 OSM 有一些複雜的 Relation 標記,標記物件之間的關係,如果沒有解析正確的話可
能無法有效取得所有有用的資訊。
例如下圖是 Blender-GIS 取得的新宿都廳資料:
https://imgur.com/3mteLBS
但是實際上 OSM 標記的新宿都廳資料更加完整:
https://imgur.com/V4zdDdY
六、結語
隨著政府公開資料越來越多、以及各地社群的貢獻之下,顯然讓 OSM 的完整度對於遊戲、
3D 創作等帶來不少幫助。
其中資料甚至也包含有行人穿越道等項目,如果隨時間更加完整,想必可以帶來更大的幫
助。現階段要能夠進一步使用這些資料產生有效的遊戲關卡還需要更多的努力,不過至少
作為一個乍看之下很精緻的場景似乎已經能做到了。
也期待是不是有人能藉由我分享的流程作出精彩的作品:)
七、參考資源
[1]Blender-GIS-https://github.com/domlysz/BlenderGIS
[2]Blender-OSM(免費版)-https://gumroad.com/l/blender-osm
[3]Blender-OSM(付費版)-https://gumroad.com/l/blosm
[4]我的客製建築 Shader Graph-
https://github.com/dklassic/Unity-Simple-Building-Triplanar-Shader
內部空間 Cubemap 對應是根據這個教學做的:https://youtu.be/dUjNoIxQXAA
[5]Roman Papush 的道路 Shader 教學-https://youtu.be/vhrIEcVSI5M
[6]@jannik_boysen 的教學-
https://medium.com/@jannik_boysen/procedural-skybox-shader-137f6b0cb77c
延伸手段-Houdini Game Dev Tool
Houdini 去年增加了一系列能夠使用 OSM 資料做城市建構的工具,其中個人認為最大的亮
點是內建可以解析路口交界,產生更加自然的路面。有興趣的可以嘗試看看:
作者: allen2207153 (小王)   2021-03-30 10:10:00
作者: ccjjea (冰月)   2021-03-30 11:49:00
感謝分享 讚
作者: poshboy (遊戲設計人,人設計遊戲)   2021-03-31 20:21:00
看起來像是一篇研討會paper形式的文章
作者: dklassic (DK)   2021-03-31 21:03:00
沒那麼誇張啦 XD只是畢竟是要嘗試描述工作流程所以想寫得格式化一點
作者: kuku321 (halipapon)   2021-04-01 02:19:00
其實現在商業製作上來說 比起實作 事前準備這種pipeline的規劃耗時越來越長 工具太多 但要針對目標效率化很難抓
作者: kingroy (手殘總比腦殘好)   2021-04-01 14:38:00
像日本有提供城市的DATA但還是要花時間加工,最近做一個市含準確的高度建築物也花不少時間
作者: newhandfun (新手方)   2021-04-14 01:10:00
感謝分享
繼續閱讀

Links booklink

Contact Us: admin [ a t ] ucptt.com