之前一直在折腾如何在Unity3D 中导入真实地形,第一个想法是用3DMax等工具读取 .dem 文件,然后导出为 .fbx 文件然后在Unity 中导入。原本尝试使用 91位图助手下载和处理高程数据,也可以在 3DMax 中建成地形模型,但是在导入 Unity3D 中总是出现问题。
后来找到这篇文章,发现 Unity 自带导入地形的功能,而且非常好用。 Importing Real World Unity Terrain Heightmap for free with terrain.party
主要原理是用 Terrian 中的Heightmap 功能。废话不多,进入正式步骤。
操作系统:Xubuntu 18.04
Unity3D 版本: Linux 2018
Step1 下载数据
https://terrain.party/
登录该网站->找到目的地->选择边界范围->下载。

注意:
- 中的 8km 为方框边长,可调范围在 8~60 km,
- 拖动方框选择要绘制地形的区域,
- 点击导出 ( Export )
- 在弹出的窗口中输入项目名称,我一般以地名和方框大小值命名。
Step2 处理数据
解压数据后,用 GIMP 打开图片,在 Windows 上据说用 Photoshap 也可以。一般打开第二个图片(Merged)。

使用导出功能导出为 data 文件。


注意文件名的后缀要自己手动写 .data

使用默认导出设置即可。

然后,进入存放 .data 文件的目录。好了,到了秀一下操作的时候了。Unity 中要的是 .raw 文件,而我们现在得到的却是 .data 文件,怎么办?重命名一下即可,是的,重命名。因为 .data 和 .raw 是一种类型的数据,只是名字不同。

把图上的 .data 改成 .raw 即可。
Step3 导入模型
Unity中新建一个地皮(Terrian)

点击“螺母”的按钮进入设置

把上面的 长宽高 从 500 500 600 改做与 .raw 数据一致的。我一开始在网站上下载的就是 8km 的范围,所以这里应该填写 8000,高度值要改做2000(虽然不知道为啥,但是600的模型有问题),所以这里就是改做 8000 8000 2000

然后点击右下角的 【 Import Raw 】 ,选择刚刚导出的 .raw 文件。


确保这里的 X Y Z 也是8000 8000 2000, 这里 Y 对应的是 Height ,其值为2000。1081对应的 Width 和 Height 不要改,是 raw 数据的。
确认无误后点击 【Import】

欧了! 地图太大可能导入需要几分钟的时间才能完全导入。
杂谈
其实一开始提供下载的网站不是很完美,精度太小,但好处是简约免费。其实只要有能把 灰度图 转成 .raw 数据 的工具即可。我记得 Matlab 或者 Python 这类万能的语言有图像处理的功能,如果不想下载 GIMP 或者 Photoshape 也可以尝试一下。
地形区域建议选择正方形,因为在处理数据过程中,数据会经历多次翻转,长方形的话可能会在导入时长短边对不上导致地形变形(是变得本地人都认不出来的那种)。
转载请注:Unity3D导入真实地理数据 - Bugatii100Peagle