本文基于 Tiled 的 Wangset 规范,以 corner 类型为主讲解如何标注 tileset、让编辑器自动选出正确的边角 tile。
一、什么是 Wangset
手动拼 tilemap 时,每次都要自己判断某个位置该用"左上角 tile"还是"上边 tile"——一旦地形形状复杂,就很容易选错。
Wangset 解决这个问题:你只需要一笔刷下去,系统根据周围邻居自动选出正确的 tile。
核心思路是给每个 tile 标注它的每个角/边属于哪种地形颜色,绘制时系统计算当前格子的周围情况,再去 wangset 里找最匹配的 tile。
→
二、三种类型
| 类型 | 使用的 bit | 适合的地形 |
|---|---|---|
| corner | 4个角(NW/NE/SE/SW) | 填充型:城墙、草地、水域 |
| edge | 4条边(N/S/E/W) | 线条型:道路、河流、栅栏 |
| mixed | 全部8个 bit | 复杂过渡,需要更多 tile |
大多数情况用 corner 就够了。 corner 类型虽然只标角,但通过角的组合,间接表达了所有的边和拐角情况。
三、peering bit:每个 tile 被分成 5 个区域
在地形编辑器里,点击一个 tile,可以看到它被划分成 5 个可点击区域:
核心规则:每个角标注的颜色,表示"与我相邻的那三个格子,在这个角附近的地形是什么"。
四、bitmask 计算原理
corner 类型中,系统把当前格子周围的 4 个角分别赋予二进制权重,叠加得到一个 0–15 的数字,直接当 tile 查找索引:
bitmask = NW×8 + NE×4 + SW×2 + SE×1
例:只有左上和右上两个角是目标地形
bitmask = 1×8 + 1×4 + 0×2 + 0×1 = 12
→ 查表取第12号 tile(上边过渡)
4 个 bit → 2⁴ = 16 种组合,对应 16 张 tile,覆盖所有过渡情况。
五、对应关系:16 张 tile 各代表什么形状
注意第 6 和第 9 号(对角线激活):它们实际上是"内角“情况,即从大片草地中挖出一个水洼,在草地的内角处出现。
六、实际标注流程(以 Tiled 为例)
- 在 Tileset 编辑器右键 → 新建 Wangset,选类型
corner - 添加地形颜色(例如:
草地= 绿,水域= 蓝) - 逐张点击 tile → 对每个角点击选择它属于哪种地形
- 打开 Terrain Brush,选中草地颜色,在地图上直接刷即可
标注技巧:
- 纯草地 tile:四角全标
草地(index=15) - 纯水tile:四角全标
水域(index=0) - 上边过渡 tile(下半草、上半水):NE+NW 标草地,SE+SW 标水(等等……)
注意方向容易搞混:NW/NE/SW/SE 是从邻居看过来的角,不是从本 tile 自身视角。标角时问自己:“这个角附近,和我相邻的格子是什么地形?”
七、和其他方案的对比
| 方案 | tile 数量 | 原理 | 适用场景 |
|---|---|---|---|
| 手动 | 任意 | 人脑判断 | 精细控制 |
| Corner Wangset | 16 张 | bitmask 查表 | 自然地形填充(推荐) |
| Edge Wangset | 16 张 | bitmask 查表 | 道路/河流等线状地形 |
| Mixed Wangset | 最多 256 张 | 8 bit bitmask | 精细边角分离过渡 |
| Blob Set (RPG Maker 式) | 47 张 | 特殊规则 | 平台跳跃/侧视图 |
Wang Set (16 tiles) vs Blob Set (47 tiles):Wang 用了镜像/旋转技巧,用更少的 tile 覆盖同等情况;Blob Set 则显式枚举每一种,适合侧视角或需要特殊边缘处理的场景。
八、多地形 Wangset
当 Wangset 里有 3 种地形颜色时,每角有 3 种可能 → 3⁴ = 81 张 tile。
4 种颜色 → 4⁴ = 256 张。
实际项目中通常的做法是:
- 每两种地形之间单独建一个 2 色 Wangset(各 16 张)
- 而不是把所有地形塞进一个多色 Wangset
这样美术工作量和复杂度都更可控。