跳到主要内容

地形生成

使用 Frontier 模型从 AI 生成的灰度高度图生成大尺度 Unity Terrain,并自动应用到当前场景。输出一个 Unity Terrain GameObject + TerrainData 资产 + 处理后的高度图 PNG,保存到 Assets/TJGenerators/History/

何时用地形而非 3D 模型: 峡谷、山脉、丘陵、平原、高原、海岛、火山、沙丘、海岸悬崖等大尺度地貌用本功能;独立物体(岩石、树、建筑)请用 3D 模型生成

开始

从GUI开始

参考 生成3D模型 的开始部分(通过对话描述地形即可触发)。

从CLI开始

使用 generate_terrain 生成高度图,再用 apply_terrain_heightmap 应用为 Terrain。生成完成后,Terrain GameObject 自动出现在场景中。

输入模式(至少提供其一):

模式参数说明
文生地形prompt地形描述
图引导地形image_path参考图引导地形形状

模型

Frontier(唯一模型)

  • 唯一支持的地形模型,无 generator_id 参数;宽高比固定 1:1(方形高度图),不可配置
  • generate_terrain 关键参数:
    • prompt:地形描述(有 image_path 时可选)
    • image_path:参考图路径(Assets/...),引导地形形状
    • resolution"1K" / "2K"(默认)/ "4K"

后处理选项(apply_terrain_heightmap

use_default_options: true(默认)会应用推荐后处理(中值滤波 + 双边滤波 + 热力侵蚀 + 百分位归一化)。设为 false 可手动调参,常用项:

参数默认说明
height_gamma1.0< 1.0 更多山地;> 1.0 更平坦
remap_output_min0.02抬高可提升"海平面"/基础高度
remap_output_max0.98降低可压平峰顶高度
thermal_erosiontrue模拟自然侵蚀
thermal_erosion_iterations25迭代越多越平滑
bilateral_filtertrue保边平滑(优先于高斯)
terrain_go_name"TJGenerators Terrain"生成的 GameObject 名

优化

提示词优化

地形类型推荐提示词
山脉"rugged mountain range with steep peaks and deep valleys, gradual foothills"
丘陵"gently rolling grassy plains with subtle elevation changes"
海岛"tropical island with central mountain peak, flat coastal area"
峡谷"deep canyon with layered rock formations, narrow river valley at bottom"
火山"dormant volcano with central caldera, smooth sloped sides"
沙丘"sand dunes with smooth flowing curves, gradual ridges, no sharp edges"

技巧:

  • 避免描述植被、建筑、树木——它们会变成意外的高度凸起
  • 添加 "smooth"、"gradual"、"gentle" 让过渡更自然
  • 可加 "top-down orthographic view" 提示模型输出高度图风格
  • 提供 image_path 能显著提升地形形状精度

后处理选择

  • 一般场景:use_default_options=true
  • 更夸张的山地:height_gamma=0.8;更平坦:height_gamma=1.2
  • 保留锐利山脊:bilateral_filter=false + thermal_erosion=false

并行生成

  • 最大 5 个并发生成任务

注意事项

  • ⚠️ 两步流程generate_terrainapply_terrain_heightmap,默认自动完成
  • ⚠️ 后处理耗时:2K 后处理需 60–180 秒,请勿重复提交
  • ⚠️ 宽高比固定 1:1,无 generator_id 参数
  • ⚠️ 输出路径:默认 Assets/TJGenerators/History/;生成后 Terrain 会自动选中,并在缺少平行光时自动补一个
  • ⚠️ Domain Reload:生成期间不要在磁盘写入 .cs 文件,使用 execute_csharp_script 代替