Steam遊戲《TownScaper》技術分析!

遊資網發表於2020-12-11
TownScaper是今年6月份上線Steam的建造類遊戲,不過它的作者已經在twitter做了一年多的遊戲開發日誌。結合2019年歐洲獨立遊戲大會的一場演講,EPC2018一場演講,輸出一下這個遊戲的技術要點。

首先作者從業經驗非常令人羨慕,在育碧Division幹完後就自己出來單幹獨立遊戲。

Steam遊戲《TownScaper》技術分析!

波函式坍縮

遊戲的核心技術是波函式坍縮,本來是一個利用固定種子和連通性篩選迭代畫素最後坍縮到穩定的影像內容的自動生成演算法。

Steam遊戲《TownScaper》技術分析!

https://github.com/mxgmn/WaveFunctionCollapse#notable-ports-forks-and-spinoffs

github.com/mxgmn/WaveFunctionCollapse

將2D演算法轉為3D演算法的基礎,就是下面這張Cube的匹配圖。

Steam遊戲《TownScaper》技術分析!

完成理論基礎建設後,作者設計的房屋建模。

Steam遊戲《TownScaper》技術分析!

每個Cube都不是一個完整的房子,所有完整的房子都是用若干個(4xn)模型塊拼接而成。

Steam遊戲《TownScaper》技術分析!

下面是作者完成3D化的波函式坍縮的Demo地址。

Steam遊戲《TownScaper》技術分析!

非結構網格

如果你試玩了上面的Demo,會發現完成了生成演算法的屋子都是方方正正的矩形佈局。作者非常出彩的在六邊形佈局的基礎上擴充套件了非結構網格生成演算法,讓房屋的佈局擺脫一板一眼的方正佈局。

Steam遊戲《TownScaper》技術分析!

演算法的核心,每個菱形的中心和四個頂點的連線向量,統一到一個軸向上,隨機給力,再還原到菱形的角度上。

Steam遊戲《TownScaper》技術分析!

Steam遊戲《TownScaper》技術分析!

網格變形

配合非結構網格的方案,每個Cube區塊的模型根據當前網格的形狀做扭曲。

Steam遊戲《TownScaper》技術分析!

Steam遊戲《TownScaper》技術分析!

沙灘和海浪

生成結束後根據生成輪廓線,再平滑,組合生成沙灘mesh,再外擴成海浪mesh

Steam遊戲《TownScaper》技術分析!

Italian wires

作者開發期心血來潮做了一個類似廣場彩旗的細節,在整體風格變得“威尼斯”之後,改成了高空的晾衣繩。

Steam遊戲《TownScaper》技術分析!

上線之後又加了圓形浮空島下面加螺旋槳的細節。

庭院

在房屋形成的封閉空間裡二次進行波函式坍縮計算,這次模型換成庭院圍牆組,2D版演算法即可。

Steam遊戲《TownScaper》技術分析!

Steam遊戲《TownScaper》技術分析!

Boids

每個鳥落在屋頂的時候一個模型,起飛的時候一個模型,飛行動畫是shader寫的頂點基於高度的偏移。

鳥群計算用Boids演算法

Steam遊戲《TownScaper》技術分析!

利用房屋模型外表面法線判定飛行範圍和落腳位置

Steam遊戲《TownScaper》技術分析!

植被

灌木利用視錯覺而非CG技術製造立體感。

關於凹臉錯覺看過這種玩具的人就秒懂。

Steam遊戲《TownScaper》技術分析!

Steam遊戲《TownScaper》技術分析!

環境光

通過分層寫RT記錄空間資訊,偏移取樣獲得顏色。

Steam遊戲《TownScaper》技術分析!

Steam遊戲《TownScaper》技術分析!

畫素風格化

粗化描邊

Steam遊戲《TownScaper》技術分析!

Steam遊戲《TownScaper》技術分析!

Moody Clouds

環形緩慢旋轉的天空盒

Steam遊戲《TownScaper》技術分析!

包圍盒計算和球面相機

通過已有建築計算包圍六邊形,用螢幕中心射線確認相機錨點

Steam遊戲《TownScaper》技術分析!

儲存資料

所有資料序列化成編碼,本地複製和網路分享功能就完成了。

Steam遊戲《TownScaper》技術分析!

總結

26塊錢買個技術玩具,不虧。

來源:知乎專欄:人類本質復讀機

相關文章