Tokyo Night Drifter 是一個特別的專案,相較於其他幾天幾週內隨便玩的專案,這個專案最後用了一整個月製作。
先來看成果:
大概這樣,看著這兩張圖可能每個人對成果的好壞會有不太一樣的想法,不過這還是必須看以什麼目標為出發點。例如說以一個「盡量不寫程式、盡量毫無技術需求」的前提下,做為一個快速世界建構的工作流程研究,其實應該還是算不錯的。
那接下來就開始詳細解說一下這個費時一整個月的專案到底做了什麼,學到了什麼,以及為什麼似乎投入了很長一段時間之後卻沒有趁勢把它做完。
緣起 🔗
上一篇提到了 2021 年 2 月的我很隨興地做了一個以「在台北開公車跑公車路線」為主題的小專案。在專案的收尾時,一時興起的我試著查了一下東京都的 Open Street Map 資料標記,發現標記的完整度驚為天人。
有多驚為天人呢?這是台北市的 OSM 標記:
明眼人應該都看得出來雖然其實以志工活動來說也標得挺不錯了,但實際上空缺處還是很多,實用起來會變成各個街區都充滿著空檔的狀態。
相較之下東京的完整度如何呢?大概像這樣:
簡單來說,整個東京都的 OSM 標示快接近 100% 完整。
總之見獵心喜的我想說在這個疫情期間,也許很適合來做一款虛擬觀光遊戲來斂財。
如果是賽車遊戲迷的話,我想或多或少應該都很希望能玩到一款設定在日本的賽車作品。甚至不一定是為了競速,而是為了單純可以在虛擬的東京中享受夜景與純粹駕車的快樂。
也因此純粹的「設定在東京的賽車遊戲」其實是不夠的,真正想要的目標是「設定在東京的開放世界駕車遊戲」。
目前最接近這個夢想的是《Assetto Corsa》的模組「Shutoko Revival Project」,實作了總長 150 公里的首都高速公路。
另一個則是在開發階段很久的「Night Runner」,不過雖然有限展示畫面都看起來有對味,但目前對於遊戲形式、內容的了解都還不多。
總之以一個毫無技術力,當時才剛出發不到一年的我來說,要做出上兩款的內容都是不可能的。我需要能夠做出性質上不一樣的作品才有意義。
目標 🔗
總之設定目標的時候還是要考慮自己的能力限制,雖然必須要做出比其他人厲害的作品才能被看見,但是無意義地喊著要做出規格更好的作品只是自殺行為。
2021 年 3 月的我的能力範圍長這樣:
- 有累積十個月的 Unity 知識
- 才剛開始有比較完整的系統撰寫經驗
- 對於 Shader 一無所知
- 看過不少關於開放世界開發的 GDC 演講
感覺怎麼做其實都像是自殺行為,不過整體來說快速地沿用台北公車架構丟出一個在看不出來是東京的東京街頭駕車的作品已經可以輕鬆做到了:
我嘗試對自己的能力發展做了猜測,並且選擇了這樣的規格:
- 不可能走寫實,必須要走某種形式的風格化美術
- 必須做到東京街頭的完全開放世界,畢竟資源管理需求極少,理論上應該辦得到
- 要盡量在完全不寫額外程式的情況下完成
- 總期限是一個月
無論如何訂下明確的死線,測試挑戰就是可行的了,接著再開始根據有限的知識選擇邁向完成的途徑。
因應尤其是美術技術力的缺乏,我嘗試訂定這樣的視覺目標:
- 為了不要彰顯缺點,必須選擇只有夜晚
- 比起呈現細節,更重要的是呈現氣氛
- 必須想辦法著重在光線的變化表現
- 景深可以解決剩下的問題
用 Shader Graph 展開 Shader 的挑戰 🔗
這時候就麻煩了,顯然我必須要想辦法呈現某種程度的建築窗戶光影表現,於是我先想起了一個很常被提到的名詞 Triplanar Mapping。
在許多遊戲製作地形時,都提到這種可以輕鬆確保任何物件在任何位置都能顯示成理想樣貌的手段。於是我試著塞了一個 Triplanar Shader 的材質到建築上作為發光的窗戶表現:
似乎有一點點樣子了,但唯一的問題是:Triplanar 的做法會從全方向進行投影。
所以側面看起來還行,但實際上這些建築的頂部也有著這樣的東西:
這就不太理想了。
總之那時候我想起了一個我曾經看過的教學,是關於「怎樣使用 Shader Graph 製作道路標線」。於是覺得是時候了,用 Shader Graph 出發挑戰 Shader 的製作吧!
前面的建築後來搭配 Normal 判定就可以避免造成頂部出現,並且整理出了大全套建築外觀 Shader。
總之以上面的教學為基礎,我先後順利地做出:
- 可以動態調整的道路標線
- 頂部不會發光的建築
- 根據道路標線的一些作法延伸出可以動態調整大小的建築窗戶
- 可以隨機選擇窗戶的顏色與亮度
- 可以動態調整的窗框
- 在指定樓層可以顯示的廣告招牌
- 可以動態變化的廣告招牌
- 乍看之下像車流的光點
- 可以根據鏡頭相對位置改變光點顏色
- 可以隨時間閃爍的大樓警示燈
加起來長這樣:
然後這個專案就開發到此結束,接下來解釋暫時沒辦法往下做的幾個原因。
專案的缺陷 🔗
基本上作為玩具應該已經算是個酷酷的成果了,但是作為商業專案還有幾個重大原因無法繼續前進:
路口道路標示問題難以解決 🔗
這非常致命。
現實世界的路面是個很複雜的事情,OSM 等等資料作為平面地圖顯示沒問題,但是要顯示成有效的物理空間就有很大的問題了。例如說好一點的情況下可以做出這樣的成果:
儘管不是沒有槽點,但應該算是看起來堪用的成果對吧?
但現實不是這麼美好的,有時候我們會遇上五岔路口,於是就變成這樣:
完全亂七八糟 XDDDDDDD
這個問題甚至對於 3A 級專案也是的重大問題。《蜘蛛人》的 GDC 演講提到說他們面對紐約少有的五岔路口也感到非常的困擾,為了解決相關困擾,做法就是直接把五岔路口封閉掉一條街口。
即便是蘋果當年在發表會上大放厥詞的先進地圖表現,實際上也能看到標線做得亂七八糟,道路外區域更是充滿奇怪的缺角:
甚至到了《微軟飛行模擬器》也有相關的問題。
即便能夠成功產生出乍看之下還行的虛擬世界,實際上有著滿滿的問題:
但當然《微軟飛行模擬器》大部分時間不應該有人盯著這些地方看,所以做為以假亂真的目的來說,也算是相當有用了。
對於我這個初出茅廬的新手來說,除了暫時不該繼續鑽研下去這種無底洞以外,也至少可以嘉許自己算是也做出了同等「高空中可以以假亂真」的產物了,也許該出一款《窮人的飛行模擬器》。
現實車輛的物理模擬極其複雜 🔗
畢竟想要玩家有帶入感,不再能只仰賴普通的球體式車輛物理模擬。
但實際開始寫下來,如果單純嘗試在 Unity 以 Wheel Collider 驅動車輛,來實作車子的移動系統的話,應該會發現第一個問題是一旦轉彎就會容易翻覆。
這是個「現實世界車輛物理問題」,換個講法,要認真往下做,就必須要在遊戲空間內逐一解決現實世界車輛會遭遇到的問題。
Plateau 計畫 🔗
日本交通省在 2021 年 3 月 25 日公布了全國各大都市的官方建築測量資料,其計畫名為 Plateau,要將全國土的 geodata 都建立起來。
對的。
就恰好在我研究的尾端,日本政府公布了各大都市的建築測量資料,跟 OSM 的資料比又準又齊全。等於是形成了一個全新的低標資料來源,如果要用來製作成有效的商業作品的話,應該要重新以這個資料為基礎來挑戰。
後來我以那個新公布的東京建築資料去玩了一個完全覆寫 Unity 光線系統的 Shader 表現測試,還算玩得挺開心的。
而雖然這個議題是多個 3A 工作室都挑戰過,並且認為難以處理的主題,但在這段時間中,我也認為有找到一些可以繼續挑戰下去的方向,在精準的規劃下有機會繼續執行並或許可以獲得成功。
真正的寶物是學會了 Shader 的強大之處 🔗
雖然當時沒有成功做出 Tokyo Night Drifter 來斂財,但是以這個專案為契機,我首次嘗試了對 Shader 的研究。
我發現了能輕易純粹使用 Shader 製作出各種視覺表現不錯的成果,僅僅是一些雜訊,都能被拿來展現多種不同的視覺要素:
這個一個月未完成的專案,讓我知道了 Shader 充滿了無限的可能,後續就會被用上。
下集預告? 🔗
下一篇開始就會脫離流水帳,進入主題性解釋《自動混亂》設計邏輯的部分。一方面是因為這些設計不再像初期是一期一期的挑戰,而是以 2021 年 5 月到現在,這段拿著新架構重新出發的期間分散地完成。
不過因為這邊開始就必須更系統性地撰寫,沒辦法像之前一樣回想當時的製作狀況就能輕鬆寫出來。所以要開始拖稿拖比較久了。
總之我們下次見!