Steam游戏《TownScaper》技术分析!

知乎专栏:人类本质复读机 2020-12-11
TownScaper是今年6月份上线Steam的建造类游戏,不过它的作者已经在twitter做了一年多的游戏开发日志。结合2019年欧洲独立游戏大会的一场演讲,EPC2018一场演讲,输出一下这个游戏的技术要点。

首先作者从业经验非常令人羡慕,在育碧Division干完后就自己出来单干独立游戏。


波函数坍缩

游戏的核心技术是波函数坍缩,本来是一个利用固定种子和连通性筛选迭代像素最后坍缩到稳定的图像内容的自动生成算法。


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

github.com/mxgmn/WaveFunctionCollapse

将2D算法转为3D算法的基础,就是下面这张Cube的匹配图。


完成理论基础建设后,作者设计的房屋建模。


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


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


非结构网格

如果你试玩了上面的Demo,会发现完成了生成算法的屋子都是方方正正的矩形布局。作者非常出彩的在六边形布局的基础上扩展了非结构网格生成算法,让房屋的布局摆脱一板一眼的方正布局。


算法的核心,每个菱形的中心和四个顶点的连接向量,统一到一个轴向上,随机给力,再还原到菱形的角度上。



网格变形

配合非结构网格的方案,每个Cube区块的模型根据当前网格的形状做扭曲。



沙滩和海浪

生成结束后根据生成轮廓线,再平滑,组合生成沙滩mesh,再外扩成海浪mesh


Italian wires

作者开发期心血来潮做了一个类似广场彩旗的细节,在整体风格变得“威尼斯”之后,改成了高空的晾衣绳。


上线之后又加了圆形浮空岛下面加螺旋桨的细节。

庭院

在房屋形成的封闭空间里二次进行波函数坍缩计算,这次模型换成庭院围墙组,2D版算法即可。



Boids

每个鸟落在屋顶的时候一个模型,起飞的时候一个模型,飞行动画是shader写的顶点基于高度的偏移。

鸟群计算用Boids算法


利用房屋模型外表面法线判定飞行范围和落脚位置


植被

灌木利用视错觉而非CG技术制造立体感。

关于凹脸错觉看过这种玩具的人就秒懂。



环境光

通过分层写RT记录空间信息,偏移采样获得颜色。



像素风格化

粗化描边



Moody Clouds

环形缓慢旋转的天空盒


包围盒计算和球面相机

通过已有建筑计算包围六边形,用屏幕中心射线确认相机锚点


保存数据

所有数据序列化成编码,本地复制和网络分享功能就完成了。


总结

26块钱买个技术玩具,不亏。

来源:知乎专栏:人类本质复读机

最新评论
暂无评论
参与评论