如何让嗒啦啦制作2D游戏瓦片集

精华修改于03/06716 浏览开发心得 包含 AI 合成内容
效果预览:
TapTap
直接干货(摸索该功能耗资2W积分):
一、系统概述
本项目采用 双网格(Dual-Grid)瓦片系统 实现地形过渡渲染。整套工具链由三部分组成:组件文件作用生成器scripts/dualgrid_tileset_gen.pyPython 程序化生成 128x128 瓦片图渲染器scripts/DualGridTilemap.luaLua 运行时双网格渲染调参面板scripts/TilesetGenPanel.lua游戏内实时调参 UI支持 4 种地形:草地 (grass)、泥土 (dirt)、石路 (stone)、水面 (water),每种地形生成 16 张过渡瓦片(4-bit bitmask 编码所有角落组合)。
二、核心原理:双网格 (Dual-Grid)
基于 Jess::Codes 的双网格方案:
数据格(存储地形类型)     渲染格(偏移半格,采样 4 角)
TapTap
  • 数据格 (Data Grid):world.map[y][x] 存储地形类型(1=草地, 2=泥土, 3=石路, 4=水面)
  • 渲染格 (Render Grid):偏移半格,每个渲染格采样左上 (TL)、右上 (TR)、左下 (BL)、右下 (BR) 四角的地形类型
  • Bitmask 编码:4 个角各占 1 bit,组合成 0~15 的索引,查表取对应过渡瓦片
TapTap
三、生成管线(Pipeline)
每张瓦片依次经过以下处理阶段,每个阶段可独立开关:
SDF 蒙版 → 域扭曲 → 高斯模糊 → 边缘描边 → 纹理合成 → RGB 膨胀
TapTap
步骤 1:SDF 蒙版
生成根据 4-bit 编码(BL=bit0, BR=bit1, TL=bit2, TR=bit3)确定每个角是否填充,使用不同的 SDF(有向距离场)原语生成形状蒙版:
TapTap
步骤 2:域扭曲 (Domain Warp)
用 Perlin 噪声偏移蒙版的采样坐标,使边缘产生有机的不规则感:
  • 每张瓦片的扭曲强度随机 ±30%,避免 16 张瓦片看起来雷同
  • 每张瓦片使用 tile_idx * 100 作为噪声偏移,确保各瓦片扭曲不同
TapTap
步骤 3:高斯模糊
对域扭曲后的蒙版施加高斯模糊,柔化残余锯齿。默认半径 1.0 像素。
步骤 4:边缘描边
在蒙版边界生成手绘风格描边,分内外两层:
  • 内描边:紧贴蒙版内侧,2px 硬线 + smoothstep 衰减,使用深色(如深棕 (58,38,18))
  • 外描边:蒙版外侧细线,使用较浅色调(如浅棕 (78,52,28))
距离计算使用欧氏距离变换(EDT)实现亚像素精度,同时叠加 Perlin 噪声微调描边宽度,产生自然的粗细变化。
索引 0(全空)和 15(全满)无真实边界,跳过描边。
TapTap
步骤 5:纹理合成
为每种地形程序化生成纹理——三层分形噪声叠加着色(大尺度色调 60% + 中尺度细节 25% + 小尺度颗粒 15%),再通过蒙版与描边层 alpha 混合合成最终瓦片。描边区域的 alpha 取蒙版和描边层的较大值,防止描边被蒙版边缘的半透明削弱。
步骤 6:RGB 膨胀
将 alpha=0 的透明像素的 RGB 填充为最近可见邻居的颜色(8 轮迭代膨胀)。这一步解决 GPU 双线性采样时透明区域黑色 RGB 导致的暗边问题。
四、地形配置
每种地形有独立的颜色配置:
TapTap
五、运行时渲染策略
渲染分 4 层,从下到上叠加:
TapTap
关键设计决策
  • 草地为万能基底:所有过渡瓦片都是"目标地形 vs 草地",非草地之间的交界用额外的跨地形瓦片集处理
  • 优先级叠加:低优先级地形先画,高优先级后画自然覆盖
  • 悬崖使用弧线带:用上弧线与下移后弧线围成的月牙形区域绘制,而非整体偏移陆地形状,避免阶梯伪影
TapTap
性能优化
  • 只渲染摄像机可见范围内的瓦片(视锥裁剪)
  • 每边扩展 0.5px 消除瓦片间亚像素间隙
  • 图片句柄缓存,只加载一次
  • 热加载:检测刷新标记 → 收集旧句柄 → 下帧删除并重新加载
六、输出产物结构
每种地形生成以下文件:
assets/tileset_generated/
├── .refresh_marker             ← 时间戳标记,触发游戏热加载
├── grass/
│   ├── tile_00.png ~ tile_15.png    16 张 128×128 过渡瓦片
│   ├── grass_texture.png            程序化纹理
│   ├── preview_4x4.png              4×4 总览图
│   └── stages/                      中间阶段图(tile_05 为代表)
│       ├── 1_mask.png               SDF 蒙版
│       ├── 2_warp.png               域扭曲后
│       ├── 3_blur.png               高斯模糊后
│       ├── 4_outline.png            描边层
│       └── 5_final.png              最终合成
├── dirt/       同上结构
├── stone/      同上结构
└── water/      同上结构
源图 128×128,运行时显示缩放到 64×64 设计像素。
七、调参迭代闭环
游戏内面板调整参数
       │
       ▼
保存 tilegen_config.json
       │
       ▼
执行 /generate-tileset 命令(运行 Python 脚本)
       │
       ▼
生成新瓦片 → 写入 .refresh_marker
       │
       ▼
游戏自动检测标记 → 删除旧图片句柄 → 加载新瓦片
       │
       ▼
地图实时刷新(无需重启)
单次迭代周期约 30 秒。面板提供的控制维度:
TapTap
配置文件格式
配置保存在 tilegen_config.json,包含三个顶级字段:
  • terrain:目标地形名(grass / dirt / stone / water)
  • params:管线参数(扭曲、模糊、描边、颜色等)
  • stages:阶段开关(warp / blur / outline,布尔值)
八、文件依赖关系
tilegen_config.json ──→ dualgrid_tileset_gen.py ──→ assets/tileset_generated/
                                                          │
                                                          ▼
                              DualGridTilemap.lua ◄── 运行时加载
                                     │
                                     ▼
                              GameScene.lua (调用渲染)
                                     │
TilesetGenPanel.lua ◄── DevPanel.lua (嵌入调参面板)
       │
       └──→ 保存 tilegen_config.json → 触发生成 → .refresh_marker → 热加载
九、总结
本瓦片集系统的核心设计选择:
  1. 纯程序化生成 — 不依赖美术资源,所有瓦片由 SDF + Perlin 噪声 + 描边管线生成
  2. 双网格过渡 — 16 种过渡状态覆盖所有角落组合,接缝自然
  3. 多层渲染 — 草地基底 + 按优先级叠加的过渡层 + 跨地形过渡 + 悬崖效果
  4. 实时调参闭环 — 游戏内面板修改参数 → 一键生成 → 自动热加载,迭代周期约 30 秒
  5. 抗锯齿处理 — SDF smoothstep 柔边 + 高斯模糊 + RGB 膨胀防暗边瓦片集制作方案
horizontal linehorizontal line
Markdown源文件,可copy直接喂给塔啦啦:
瓦片集制作方案
一、系统架构
本项目采用 双网格(Dual-Grid) 瓦片过渡方案,整套工具链由三个环节组成:
| 环节 | 职责 |
|------|------|
| 程序化生成器 (Python) | 通过 SDF + 噪声管线批量生成 128×128 瓦片图 |
| 运行时渲染器 (Lua) | 双网格采样 + 多层叠加渲染到屏幕 |
| 游戏内调参面板 | 滑块/拾色器实时调整参数,一键重新生成并热加载 |
支持 4 种地形:草地、泥土、石路、水面。每种地形生成 16 张过渡瓦片(4-bit bitmask 穷举所有角落组合)。
二、核心原理:双网格
基于 Jess::Codes 的双网格方法,将地图数据与渲染解耦:
数据格:存储地形类型,每个格子只有一种地形
渲染格:相对数据格偏移半格,每个渲染格采样四角(TL、TR、BL、BR)的地形类型
Bitmask 查表:4 个角各占 1 bit,组合成 0~15 的索引,直接映射到对应的过渡瓦片
16 种瓦片覆盖所有过渡情况
tile_00 — 全基底(0000)
  • 填充角:无(BL=0, BR=0, TL=0, TR=0)
  • SDF 类型:无(直接返回全透明蒙版)
  • 视觉效果:整张瓦片完全透明(alpha=0),露出底层的草地基底纹理
  • 用途:数据格四角全是草地时使用,渲染时实际被第 1 层草地基底覆盖,此瓦片不产生任何叠加
tile_01 — 左下单角(0001)
  • 填充角:BL(bit0=1)
  • SDF 类型:凸圆弧,圆心在左下角 (0, size),半径 r
  • SDF 公式:sdf = sqrt((x-0)² + (y-size)²) - r,sdf < 0 为填充区
  • 视觉效果:从左下角延伸出一个四分之一圆形的目标地形区域。弧线从瓦片左边中点沿凸弧弯向瓦片底边中点,弧线外侧为草地,内侧(靠近角落处)为目标地形
  • 边界形状:向右上方凸出的圆弧,覆盖左下角约 π/4 扇形区域
tile_02 — 右下单角(0010)
  • 填充角:BR(bit1=1)
  • SDF 类型:凸圆弧,圆心在右下角 (size, size),半径 r
  • SDF 公式:sdf = sqrt((x-size)² + (y-size)²) - r
  • 视觉效果:从右下角延伸出四分之一圆形目标地形。弧线从瓦片底边中点沿凸弧弯向瓦片右边中点
  • 边界形状:向左上方凸出的圆弧,覆盖右下角约 π/4 扇形区域
tile_03 — 底部双角(0011)
  • 填充角:BL+BR(bit0=1, bit1=1),相邻组合
  • SDF 类型:水平直线,位于 y = size - r(即瓦片纵向中点)
  • SDF 公式:sdf = (size - r) - y,y > size-r 时 sdf < 0(填充)
  • 视觉效果:瓦片下半部分完全填充目标地形,上半部分为草地,分界线为一条水平直线
  • 设计理由:如果用两个凸圆弧取并集,中间会出现"掐腰"凹陷,因此相邻双角改用直线确保边缘平直
tile_04 — 左上单角(0100)
  • 填充角:TL(bit2=1)
  • SDF 类型:凸圆弧,圆心在左上角 (0, 0),半径 r
  • SDF 公式:sdf = sqrt((x-0)² + (y-0)²) - r
  • 视觉效果:从左上角延伸出四分之一圆形目标地形。弧线从瓦片顶边中点沿凸弧弯向瓦片左边中点
  • 边界形状:向右下方凸出的圆弧,覆盖左上角约 π/4 扇形区域
tile_05 — 左侧双角(0101)
  • 填充角:TL+BL(bit2=1, bit0=1),相邻组合
  • SDF 类型:垂直直线,位于 x = r(即瓦片横向中点)
  • SDF 公式:sdf = x - r,x < r 时 sdf < 0(填充)
  • 视觉效果:瓦片左半部分完全填充目标地形,右半部分为草地,分界线为一条垂直直线
tile_06 — 左上+右下对角(0110)
  • 填充角:TL+BR(bit2=1, bit1=1),对角组合
  • SDF 类型:全填充后对空白角做圆形布尔减法。空白角为 TR=(size,0) 和 BL=(0,size),各以半径 r 画圆扣除
  • SDF 公式:cut_sdf = max(r - dist_to_TR, r - dist_to_BL),cut_sdf > 0 表示被扣除(透明)
  • 视觉效果:瓦片上出现两块分离的目标地形——左上角和右下角各有一个凸圆弧区域,中间被草地隔开,形成对角分布的"双岛"图案
  • 几何特征:两个凸弧在瓦片中心附近几乎相切(因为 r = size/2,两圆心距离 = size×√2 ≈ 1.41×size,两圆半径之和 = size,所以有间隙)
tile_07 — 缺右上角(0111)
  • 填充角:TL+BL+BR(bit2=1, bit0=1, bit1=1),缺 TR
  • SDF 类型:凹圆弧,圆心在缺失角 TR=(size, 0),半径 r
  • SDF 公式:sdf = r - sqrt((x-size)² + (y-0)²),sdf > 0 表示在凹槽内(透明)
  • 视觉效果:瓦片大部分被目标地形填充,仅右上角有一个内凹的四分之一圆形缺口露出草地。弧线从瓦片顶边中点沿凹弧弯向瓦片右边中点
  • 与单角的对称关系:tile_07 与 tile_08(右上单角)互为"正反形"——tile_08 在右上角填充凸弧,tile_07 则在右上角挖出同样大小的凹弧
tile_08 — 右上单角(1000)
  • 填充角:TR(bit3=1)
  • SDF 类型:凸圆弧,圆心在右上角 (size, 0),半径 r
  • SDF 公式:sdf = sqrt((x-size)² + (y-0)²) - r
  • 视觉效果:从右上角延伸出四分之一圆形目标地形。弧线从瓦片右边中点沿凸弧弯向瓦片顶边中点
  • 边界形状:向左下方凸出的圆弧,覆盖右上角约 π/4 扇形区域
tile_09 — 右上+左下对角(1001)
  • 填充角:TR+BL(bit3=1, bit0=1),对角组合
  • SDF 类型:全填充后对空白角做圆形布尔减法。空白角为 TL=(0,0) 和 BR=(size,size),各以半径 r 画圆扣除
  • SDF 公式:cut_sdf = max(r - dist_to_TL, r - dist_to_BR)
  • 视觉效果:右上角和左下角各有一个凸圆弧区域,中间被草地隔开,形成另一条对角线方向的"双岛"图案
  • 与 tile_06 的关系:两者互为镜像——tile_06 是 TL+BR 对角,tile_09 是 TR+BL 对角,旋转 90° 可互相变换
tile_10 — 右侧双角(1010)
  • 填充角:TR+BR(bit3=1, bit1=1),相邻组合
  • SDF 类型:垂直直线,位于 x = size - r(即瓦片横向中点)
  • SDF 公式:sdf = (size - r) - x,x > size-r 时 sdf < 0(填充)
  • 视觉效果:瓦片右半部分完全填充目标地形,左半部分为草地,分界线为一条垂直直线
tile_11 — 缺左上角(1011)
  • 填充角:TR+BL+BR(bit3=1, bit0=1, bit1=1),缺 TL
  • SDF 类型:凹圆弧,圆心在缺失角 TL=(0, 0),半径 r
  • SDF 公式:sdf = r - sqrt((x-0)² + (y-0)²)
  • 视觉效果:瓦片大部分被目标地形填充,仅左上角有一个内凹的四分之一圆形缺口露出草地。弧线从瓦片左边中点沿凹弧弯向瓦片顶边中点
  • 与单角的对称关系:tile_11 与 tile_04(左上单角)互为正反形
tile_12 — 顶部双角(1100)
  • 填充角:TL+TR(bit2=1, bit3=1),相邻组合
  • SDF 类型:水平直线,位于 y = r(即瓦片纵向中点)
  • SDF 公式:sdf = y - r,y < r 时 sdf < 0(填充)
  • 视觉效果:瓦片上半部分完全填充目标地形,下半部分为草地,分界线为一条水平直线
tile_13 — 缺右下角(1101)
  • 填充角:TL+TR+BL(bit2=1, bit3=1, bit0=1),缺 BR
  • SDF 类型:凹圆弧,圆心在缺失角 BR=(size, size),半径 r
  • SDF 公式:sdf = r - sqrt((x-size)² + (y-size)²)
  • 视觉效果:瓦片大部分被目标地形填充,仅右下角有一个内凹的四分之一圆形缺口露出草地。弧线从瓦片右边中点沿凹弧弯向瓦片底边中点
  • 与单角的对称关系:tile_13 与 tile_02(右下单角)互为正反形
tile_14 — 缺左下角(1110)
  • 填充角:TL+TR+BR(bit2=1, bit3=1, bit1=1),缺 BL
  • SDF 类型:凹圆弧,圆心在缺失角 BL=(0, size),半径 r
  • SDF 公式:sdf = r - sqrt((x-0)² + (y-size)²)
  • 视觉效果:瓦片大部分被目标地形填充,仅左下角有一个内凹的四分之一圆形缺口露出草地。弧线从瓦片底边中点沿凹弧弯向瓦片左边中点
  • 与单角的对称关系:tile_14 与 tile_01(左下单角)互为正反形
tile_15 — 全填充(1111)
  • 填充角:全部(BL=1, BR=1, TL=1, TR=1)
  • SDF 类型:无(直接填充全部像素为 alpha=255)
  • 视觉效果:整张瓦片完全填充目标地形纹理,无过渡边界,无描边
  • 用途:数据格四角全是同一目标地形时使用,呈现纯粹的地形表面
Bitmask 映射
由于生成器和渲染器的 bit 排列不同(生成器 BL/BR/TL/TR,渲染器 TL/TR/BL/BR),中间通过一张 16 项映射表转换。
三、生成管线(6 步 Pipeline)
每张瓦片依次经过以下处理阶段,每个阶段可独立开关:
SDF 蒙版 → 域扭曲 → 高斯模糊 → 边缘描边 → 纹理合成 → RGB 膨胀
步骤 1:SDF 蒙版
根据 4-bit 编码,用有向距离场(Signed Distance Field)生成形状蒙版。按填充角数选择不同 SDF 原语:
| 填充角数 | SDF 原语 | 视觉效果 |
|---------|---------|---------|
| 1 角 | 凸圆弧 | 从角落延伸的圆形过渡 |
| 2 角(相邻) | 直线 | 水平或垂直分割线,避免"掐腰" |
| 2 角(对角) | 全填充 - 圆形布尔减法 | 两个空白角用圆弧扣除 |
| 3 角 | 凹圆弧 | 缺角处的内凹弧线 |
边缘使用 smoothstep 产生约 5% 瓦片宽度的柔和过渡带,避免硬边锯齿。
步骤 2:域扭曲 (Domain Warp)
用 Perlin 噪声偏移蒙版采样坐标,使边缘产生有机的不规则感。关键设计:
每张瓦片的扭曲强度在基础值上随机浮动 ±30%,避免 16 张瓦片雷同
每张瓦片使用不同的噪声偏移量,确保各自独立
| 参数 | 默认值 | 含义 |
|------|-------|------|
| warpstrength | 3.5 | 扭曲像素距离,越大越不规则 |
| warpscale | 0.04 | 噪声采样频率,越大边缘波动越细碎 |
步骤 3:高斯模糊
对域扭曲后的蒙版施加高斯模糊,柔化残余锯齿。默认半径 1.0 像素。
步骤 4:边缘描边
在蒙版边界生成手绘风格描边,分内外两层:
内描边:紧贴蒙版内侧,约 2px 硬线条 + smoothstep 衰减,使用深色调(如深棕色)
外描边:蒙版外侧的细辅助线,使用较浅色调
距离计算使用欧氏距离变换(EDT)实现亚像素精度,同时叠加 Perlin 噪声微调描边宽度,产生自然的粗细变化。
索引 0(全空)和 15(全满)无真实边界,跳过描边。
| 参数 | 默认值 | 含义 |
|------|-------|------|
| innerband | 7~9 | 内描边带宽(像素) |
| outerband | 4~5 | 外描边带宽(像素) |
步骤 5:纹理合成
为每种地形程序化生成纹理——三层分形噪声叠加着色(大尺度色调 60% + 中尺度细节 25% + 小尺度颗粒 15%),再通过蒙版与描边层 alpha 混合合成最终瓦片。
描边区域的 alpha 取蒙版和描边层的较大值,防止描边被蒙版边缘的半透明削弱。
步骤 6:RGB 膨胀
将 alpha=0 的透明像素的 RGB 填充为最近可见邻居的颜色(8 轮迭代膨胀)。这一步解决 GPU 双线性采样时透明区域黑色 RGB 导致的暗边问题。
四、地形配色方案
每种地形有 3 组颜色可独立配置:
| 地形 | 基色 | 内描边色 | 外描边色 |
|------|------|---------|---------|
| 草地 | 黄绿 (124,161,76) | 深棕 (58,38,18) | 浅棕 (78,52,28) |
| 泥土 | 土黄 (140,105,65) | 深褐 (72,48,25) | 中褐 (95,68,38) |
| 石路 | 灰色 (135,130,120) | 深灰 (60,55,48) | 中灰 (85,80,72) |
| 水面 | 蓝色 (65,120,170) | 深蓝 (30,60,95) | 中蓝 (45,80,120) |
所有颜色通过配置文件或游戏内拾色器修改,支持 #RRGGBB
格式输入。
五、运行时渲染策略
渲染分 4 层,从下到上叠加:
| 层级 | 内容 | 说明 |
|------|------|------|
| 第 1 层 | 草地基底 | 用 tile_15(全填充草地)铺满可见区域 |
| 第 2 层 | 地形-草地过渡 | 按优先级 泥土(1) → 石路(2) → 水面(3) 逐层叠加 |
| 第 3 层 | 跨地形过渡 | 非草地地形之间的交界(如石路-水面用专门的 sw 瓦片集) |
| 第 4 层 | 悬崖效果 | 水面边缘的弧线带状悬崖 + 高光线模拟立体感 |
关键设计决策
草地为万能基底:所有过渡瓦片都是"目标地形 vs 草地",非草地之间的交界用额外的跨地形瓦片集处理
优先级叠加:低优先级地形先画,高优先级后画自然覆盖
农田复用泥土过渡:农田和泥土共享同一套过渡瓦片,减少资源量
悬崖使用弧线带:用上弧线与下移后弧线围成的月牙形区域绘制,而非整体偏移陆地形状,避免阶梯伪影
性能优化
只渲染摄像机可见范围内的瓦片(视锥裁剪)
每边扩展 0.5px 消除瓦片间亚像素间隙
图片句柄缓存,只加载一次
热加载:检测刷新标记 → 收集旧句柄 → 下帧删除并重新加载
六、输出产物结构
每种地形生成以下文件:
assets/tileset_generated/
├── .refresh_marker             ← 时间戳标记,触发游戏热加载
├── grass/
│   ├── tile_00.png ~ tile_15.png    16 张 128×128 过渡瓦片
│   ├── grass_texture.png            程序化纹理
│   ├── preview_4x4.png              4×4 总览图
│   └── stages/                      中间阶段图(tile_05 为代表)
│       ├── 1_mask.png               SDF 蒙版
│       ├── 2_warp.png               域扭曲后
│       ├── 3_blur.png               高斯模糊后
│       ├── 4_outline.png            描边层
│       └── 5_final.png              最终合成
├── dirt/       同上结构
├── stone/      同上结构
└── water/      同上结构
源图 128×128,运行时显示缩放到 64×64 设计像素。
七、调参迭代闭环
游戏内面板调整参数
       │
       ▼
保存 tilegen_config.json
       │
       ▼
执行 /generate-tileset 命令(运行 Python 脚本)
       │
       ▼
生成新瓦片 → 写入 .refresh_marker
       │
       ▼
游戏自动检测标记 → 删除旧图片句柄 → 加载新瓦片
       │
       ▼
地图实时刷新(无需重启)
单次迭代周期约 30 秒。面板提供的控制维度:
| 控制项 | 方式 |
|-------|------|
| 地形选择 | 草地/泥土/石路/水面 4 选 1 |
| 管线参数 | 5 个滑块(扭曲强度/缩放、模糊半径、描边内/外带宽) |
| 阶段开关 | 3 个 toggle(域扭曲、高斯模糊、描边可独立关闭) |
| 颜色配置 | 3 组拾色器(基色、内描边色、外描边色) |
| 中间预览 | 每个阶段的输出图可单独查看、点击放大 |
配置文件格式
配置保存在 tilegen_config.json
,包含三个顶级字段:
terrain:目标地形名(grass / dirt / stone / water)
params:管线参数(扭曲、模糊、描边、颜色等)
stages:阶段开关(warp / blur / outline,布尔值)
八、文件依赖关系
tilegen_config.json ──→ dualgrid_tileset_gen.py ──→ assets/tileset_generated/
                                                          │
                                                          ▼
                              DualGridTilemap.lua ◄── 运行时加载
                                     │
                                     ▼
                              GameScene.lua(调用渲染)
                                     │
TilesetGenPanel.lua ◄── DevPanel.lua(嵌入调参面板)
       │
       └──→ 保存 tilegen_config.json → 触发生成 → .refresh_marker → 热加载
九、设计总结
| 设计选择 | 理由 |
|---------|------|
| 纯程序化生成 | 无需美术资源,可无限调整变体 |
| 双网格方案 | 16 种过渡自动覆盖所有角落组合,比 47-tile Wang Tile 简单得多 |
| SDF + smoothstep | 数学上精确,任意分辨率缩放不失真 |
| 域扭曲 | 用最小计算成本获得有机不规则边缘 |
| 内外双层描边 | 模拟手绘轮廓线风格,无需人工绘制 |
| RGB 膨胀 | 解决 GPU 采样透明边缘暗边的工程问题 |
| 草地万能基底 | 简化组合数:N 种地形只需 N-1 套过渡瓦片 + 少量跨地形瓦片 |
| 热加载闭环 | 调参 → 生成 → 预览全在游戏内完成,迭代效率极高 |
猜你想搜
taptap 制造 瓦片集生成教程
39
27
15