用Unity 3D生成真实地形
发表于2016-09-07
Unity3D手册中介绍了两种地形制作方法:
在SceneView中使用height tools直接绘制;
使用外部工具制作的heightmaps;
生成真实地形,需要用到heightmaps方法,具体操作如下:
准备一块DEM数据,格式为img或tiff,并准备好Global Mapper和Photoshop两款软件;
在Global Mapper 14.1中文版中“文件”->“打开数据文件”,选择DEM数据文件,比如test.img,然后弹出对话框选“全是”;

打开后如图所示:

打开地形文件后,在工具栏下拉列表中选择“梯度渲晕”,在此列表框后面有一个“启用/取消晕渲”的按钮,我们需要取消渲染;

此时显示的是此dem数据的灰度图,如下:

我们可以导出这幅图;点击“文件”->“输出光栅/图像格式”,弹出对话框内选择JGP,然后点确定,又弹出一个框,还选确定,弹出下一个框。

在此对话框内设置jpg的属性;采样间距可以自己填写,值越小,图片经度越大,若不知道怎么选择可以先按默认值,后期看图片分辨率,根据需要在重设此参数,“图像品质”也可自行选择,而“光栅输出的带设置”中必须选择“灰度(1 8-字节带)”,下面的“生成世界文件”和“生成投影文件”可以不勾选,此文件对导入地形无关;

此时生成了一个“test.jpg”;我们用photoshop进行打开编辑;打开图片后选择“图像”->“画布大小”;单位选择像素,长宽值填写值需要是2的指数次幂比如1024或2048(我用的Unity版本中导入的图片大小貌视不能大于2048,否则会出错),这时我将宽度和高度均设置为2048(这里需要将长宽设置成一样值),点击确定;

导出raw文件;选择“文件”->"存储为",格式中选择raw,“保存”生成一个test.raw的文件;

打开Unity,在"Terrain"->"Create Terrain"中创建地形,然后点击“Terrain”->"Import Heightmap - Raw",导入刚生成的raw文件;
点击“设置”:

“Import Raw”在这儿:

在弹出对话框中进行设置,Depth选择8bit,Width选择2048,Height输入2048,ByteOrder根据自己的情况选择Mac或Windows,地形x,z先默认2000,y是高度,表示地形最高处的高度,我写200,直接点击“Import”即可以导入该地形;

如果原来地形有地貌,可以在Globalmap中使用地貌导出一张jpg文件作为Unity中可导入的纹理,按地形大小贴到导入的这块地形上。

这里的x,y要和之前地形的x,y大小保持一致才可以完整贴到地形上。

最终效果如下(还不错哈):

(PS:如果导入图片后发现图片和地形位置不对应可以在ps里对图片进行翻转和旋转等操作,进行调整):
