本文基于 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 为例)

  1. 在 Tileset 编辑器右键 → 新建 Wangset,选类型 corner
  2. 添加地形颜色(例如:草地 = 绿,水域 = 蓝)
  3. 逐张点击 tile → 对每个角点击选择它属于哪种地形
  4. 打开 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

这样美术工作量和复杂度都更可控。


参考资料