Steam游戏《TownScaper》技术分析!

2023-11-04

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算法
 


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


植被

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

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


环境光

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


像素风格化

粗化描边
 


Moody Clouds

环形缓慢旋转的天空盒
 


包围盒计算和球面相机

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


保存数据

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


总结

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Steam游戏《TownScaper》技术分析! 的相关文章

随机推荐

  • pycharm中使用GPU跑程序

    查看机器上GPU情况 命令 nvidia smi 功能 显示机器上gpu的情况 命令 nvidia smi l 功能 定时更新显示机器上gpu的情况 命令 watch n 3 nvidia smi 功能 设定刷新时间 秒 显示GPU使用情况
  • 面试回答 CopyOnWrite 的三重境界,1%的人能答到最后

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 1 读多写少的场景下引发的问题 2 引入 CopyOnWrite 思想解决问题 3 CopyOnWrite思想在Kafka源码中的运用 今天聊一个非常硬核的技术
  • [动态系统的建模与分析]8_频率响应_详细数学推导 G(jw)_滤波器

    运放滤波器 3 反相同相比例放大电路 Multisim电路仿真 运放滤波器 2 运放反馈原理 运放滤波器 1 理想运放 虚短虚断 现代控制理论 11 现代控制理论串讲 完结 pdf获取 信号与系统在工程中 里面的一些工具应该是奠基石 电路
  • 浅析hadoop写入数据api

    对于一般文件 都有满足随机读写的api 而hadoop中的读api很简单用FSDataInputStream类就可以满足一般要求 而hadoop中的写操作却是和普通java操作不一样 hadoop对于写操作提供了一个类 FSDataOutp
  • 惠普打印机136w硒鼓芯片怎么清零_惠普136w打印机怎么清零

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 惠普136w打印机清零的方法如下 1 关闭打印机电源 并把电源线从电源插座拨开 2 按紧打印机的电源键同时插上电源线 3 不松开电源键 按4下进纸键 电源灯显示 黄 橙 4
  • 学习记录-VS踩坑记录

    一 安装VS2015后 CMAKE执行错误 CMAKE C COMPILER NOTFOUND was not found CMAKE CXX COMPILER NOTFOUND was not found 环境 1 公司内网 无法上外网
  • 算法笔记-第四章-第六章

    4 1排序 1 选择排序 思路 总共需要进行N趟操作 每次从i n中选出最小的元素并与第I个元素交换 算法的时间复杂度为O n2 假设有数组A i 0 lt i lt n 1 如下 void selectSort for int i 0 i
  • 【设计模式】软件设计遵循——六大原则

    软件设计遵循 六大原则 1 开闭原则 定义 一个软件实体如类 模块和函数应该对扩展开放 对修改关闭 原则 用抽象构建框架 用实现扩展细节 优点 提高软件系统的可复用性和可维护性 2 里氏替换原则 定义 所有引用基类的地方必须能透明化地使用其
  • matlab函数零点求法,Matlab之函数零点

    Matlab之函数零点 Matlab中求函数零点的函数是fzero 一元函数 fsolve 二元函数 roots 一元多项式 等 fzero fzero可以求任何一元函数的零点 求函数 的零点 x 3 0 1 4 y x 2 sin x x
  • JS判断一个数组中是否有重复值

    首先 该笔记内容是将网上查阅的资料做了一个整合 便于自己快速查阅并解决问题 方法一 先利用ES6语法将数组去重 之后再与原数组比较长度 若长度小于原数组 则说明数组有重复值 Array from new Set arr length lt
  • jsp树形结构

    Dtree生成树形结构 很方便 很适用 下载dtree zip包请到下面地址去下载 http jinchun1223 javaeye com admin blogs 421817
  • [数值计算-16]:最小二乘法的求解1 - 一元二次方程解析法求解

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119978799 目录 第1章
  • java创建一个可自由增长空数组_java集合框架(四)-ArrayList

    一 List接口的实现类ArrayList 数据结构 数组结构 数据结构 数组结构 有序 允许空元素 允许重复元素 查询快 增删慢 不指定容量 则初始容量为10 扩容机制 一般是旧容量的1 5倍 不同步 java util ArrayLis
  • 剑指 Offer 54. 二叉搜索树的第k大节点 思路及心得

    解题思路来自评论区的大佬 Definition for a binary tree node public class TreeNode int val TreeNode left TreeNode right TreeNode int x
  • 第2章-爬虫请求模块

    第2章 爬虫请求模块 一 urllib request模块 1 urlretrieve 2 urlopen 3 Request 二 urllib parse模块 1 urlencode 2 quote 三 urllib请求方式举例 1 GE
  • CNN提取图片特征,之后用SVM分类

    https blog csdn net qq 27756361 article details 80479278 先用CNN提取特征 之后用SVM分类 平台是TensorFlow 1 3 0 rc0 python3 6 这个是我的一个小小的
  • SpringBoot线程池使用详解

    前提摘要 基于Springboot 2 1 4 RELEASE 配置TaskExecutor import java util concurrent ThreadPoolExecutor import org springframework
  • c++实现串口通讯踩坑(argument of type “char *“ is incompatible with parameter of type “LPCWSTR“)

    在C下 可以使用outportb和inportb进行串口通讯 C 没有这两个函数 那就使用createfile吧 通过网上搜到读取打开串口的例子 如下 include
  • 初探Spring Data Elasticsearch

    个人博客 dogbin vip Spring Data Elasticsearch 介绍 Spring Data Elasticsearch 基于 spring data API 简化 Elasticsearch 操作 将原始操作 Elas
  • Steam游戏《TownScaper》技术分析!

    TownScaper是今年6月份上线Steam的建造类游戏 不过它的作者已经在twitter做了一年多的游戏开发日志 结合2019年欧洲独立游戏大会的一场演讲 EPC2018一场演讲 输出一下这个游戏的技术要点 首先作者从业经验非常令人羡慕