Unity3D导入真实地理数据
之前一直在折腾如何在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 下载数据
登录该网站->找到目的地->选择边界范围->下载。

注意:
- 中的 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 也可以尝试一下。
地形区域建议选择正方形,因为在处理数据过程中,数据会经历多次翻转,长方形的话可能会在导入时长短边对不上导致地形变形(是变得本地人都认不出来的那种)。