//更新2020.07.15:国外一个地形高度网站,terrain.party,提供了全球任意位置高度图下载,PNG格式的灰度图。拖入Unity更改图片属性:read/write checked。
1下载卫星图
1.1 下载
框选一个矩形区域,弹出一个选择菜单栏
几个关键数据:
Map下拉有卫星图和交通图,第一次选择区域时用卫星图。
zoom表示缩放的精度级别,值越高,像素密度越大,瓦片区块越多。
1.2 拼接
下载好之后需要拼接
zoom要与下载设置的zoom一样!导出之后的ecw文件会有色差问题,这里先不管了。
2裁切卫星图
2.1 裁切导出
下载好ecw格式的文件用mapper打开裁切导出。而worldMachine导入文件的格式支持png、bmp等,如下图
导出后会生成png、pgw与prj(带有坐标信息),这里还需要一个经纬度信息
2.2 生成经纬度信息
把导出好的png再次用mapper打开,生成经纬度信息。
只需要TXT元数据,导出会有两个文件:.jpg和.txt。jpg暂时不用,打开txt能看见经纬度信息。南和西开始代表小值,北和东代表大值。
3下载DEM数据
打开网址http://www.gscloud.cn/search,获取高程数据:GDEMV2 30M 分辨率数字高程数据。
把txt里面的经纬度信息输入,下载。下载好的数据解压,导入mapper中,输出hfz格式选择边界框并继续输入经纬度信息,确定。
把生成的hfz文件导入mapper,测量裁切后地形长宽值。
4导入DEM到WorldMachine
4.1 导入高程数据
新建File Input设备,导入高程hfz数据。设置它的长宽,自然高度
4.2 导入贴图
新建File Input设备,选中Interpret as RGB;点选Place into current view。
5 对公路和河流的侵蚀与遮罩
5.1 侵蚀的问题
制作公路与河流略。用Erosion侵蚀设备对公路和河流边缘地形进行圆润打磨。
对公路和河流的combiner高程输出作为侵蚀输入,这时出现问题了
黄线左右对比,被侵蚀的特别厉害,公路消失了,河流很浅了。
5.2 对侵蚀使用遮罩
对公路和河流layout的shapeMask合并相加,强度最大。
公路和河流的高低差合并,mask遮罩合并反转,侵蚀。
6 设置各种材质
6.1 沟壑材质效果
Erosion flow输出给Equalizer平衡器和Clamp压缩
Combiner对选中的区域反转进行mask遮罩,被遮罩的部分不进行flow效果添加;对flow的颜色用color生成器增强。
6.2 公路或河流材质,突出显示
三个端口,A、B端口是混合类型,C是将要控制的对象shape mask连接。然后选择方法。
这里端口A是整体颜色,端口B是给控制对象要添加颜色,端口C的输入是控制对像的特定输出。然后用上图的算法进行混合。就是把个体与整体的突出分离融合。
然后是河流:
突出河流颜色,新增color生成器与公路combine合并,然后把河流的shape遮罩输入,只对河流部分增加颜色。
7 导出
7.1 导出高度图、位图
导出高度图,需要连接最后一次height Filed output;
导出位图也就是rgb贴图需要连接最后一次bitmap output.
7.2 导出网格优化
导出网格mesh也要连接最后一次heightFiled output,跟导出高度图的连接点相同。
参数说明:从上至下从左至右
Always output all tiles:一般勾选。如果要导出特定坐标的话需要手动选择下面列出的格子。
Tiling Options:
Merge to xxx:勾选,
Share edge x:勾选.共享边缘顶点。
Flip y-axis :翻转坐标Y轴朝向。
Calculate edge :勾选,计算瓦片边缘。
Tile Resolution:单个瓦片分辨率
tiles per : 最终瓦片数量
blending: 瓦片边缘过渡的混合强度
Naming string:命名格式format
7.3 导出splatmap
地形贴图分层显示。
red是flow shape;每个select slope连接heightFiled,然后调整高度,分别连接green、blue。最后输出png格式的bitmap贴图。
7.4 导出有腐蚀效果的splatmap
8 导入unity
depth根据world machine导出时的格式精度;
宽高是整个分辨率;
byte order字节大小端;
flip表示左右手坐标系,wm勾了unity就不勾。保持统一就行
Terrain size:unity中单位为米,根据wm长宽等比例缩,Y值高度也要等比例缩放。
设置splat分层贴图:
核心就是读取和设置TerrainData的alphamap数据
然后读取创建好的splat贴图数据。
注意splat贴图的rgb之和不能大于1,如果手动制作的贴图不能保证,在代码里加几行
这样在每层边缘过渡的时候不会有硬边了。