导入万能的Global Mapper,办三件事
- 获取高程极值
- 导出
jpg
高程图 - 导出
png
材质贴图(jpg
也可以
此处需要注意,材质贴图不局限于png
格式,亲测也可以使用jpg
格式,显示效果暂时没发现重大差别,甚至jpg
在某种程度上更优于png
以下是Debug
日记:
之前处理的最大图像为2048×2048像素大小,一直使用png
格式的材质贴图,先导出全图再在Photoshop
里面裁剪。之后由于NASA
数据过大,为了减少不必要的人力浪费不得不使用4096×4096的像素大小。这导致了新的问题:Photoshop
的切片功能最大只能处理4000像素大小的正方形。于是开始考虑使用Globalmapper
在导出png
时直接切片。(以下简称为出厂切片)
其实导出高程图jpg
的时候就已经实现了出厂切片,对材质贴图进行切片也不难办。但是应用到地形之后,不知道为何,相邻的地形terrain
有色差,深色材质贴图会发蓝,一种深蓝,也可能叫藏蓝,还有一点金属材质的感觉,总之是和相邻地块的贴图颜色和材质不匹配,在地形连接处的显示会很突兀。于是直接选择导出jpg
作为材质贴图,同样是出厂切片即可。应用到地形之后的效果同之前未出厂切片的效果基本一致
Globalmapperの切片
之前一直使用Photoshop
处理切片,没想到Globalmapper
的切片才是yyds
下面使用GM24
汉化版,以高程图导出jpg
灰度图为例:(别忘了修改为灰度8bit
在平铺
标签页中,选择切片布局中的指定单个切片像素大小,输入需要的大小,例如4096
在切片命名中,选中前置数字0到使长度相同和前置字母A使长度相同。
在切片重叠中,保持默认即可。(按0单元大小的百分比)
接下来Globalmapper
会这样操作:把图片放在画布的左上角进行切割。如果长宽不是给定数值的整数倍,则用白色补全,不会舍弃任何有数据的像素。例如,对于一个宽为4097的图,仍然会切割成两份,即使第二份只有一个有数据像素和4095个无数据(白色)像素。
如果图像的某一切片不含有任何有数据像素,则会直接舍弃,不会导出,但仍然占用命名排序
在Globalmapper
处理完一张图片之后,可以点击文件-卸载全部,快捷键ctrl + U
,以快速进行下一张图片的处理,不必重启软件。
导入Photoshop,进行大小和格式处理
RAW
格式的高程图:PS中需要设置先垂直翻转,再导出RAW
,以确保导入Unity地形之后可以呈现出匹配的视角:向右为x
轴正方向,向前为z
轴正方向png
或jpg
格式的材质贴图:无需翻转旋转处理
导入Unity
需要先计算出实际大小,然后根据实际大小比例获得y轴方向比例。这是DEM
数据的特点决定的。
DEM
数据包含了两个很重要的数据,各点的高度和经纬度。但是并没有给我们平面上的实际距离,所以我们需要通过经纬度信息和该星球的半径推算。
根据推算出的平面距离,即Unity中x
和z
轴确定的平面上的距离,再结合DEM
数据直接给出的高度距离,按照比例可以推算出在y
方向上需要确定的Terrain Size
实操
计算高度像素:
首先我们通过Supermap软件获取.tif
文件的经纬度极值信息。
起始经度 | 终止经度 | 起始纬度 | 终止纬度 |
---|---|---|---|
110.872563319902 | 110.902561319902 | 24.9718905328874 | 25.0670785328874 |
先计算比较容易的沿经线方向实际跨度距离:
$$ \frac {(25.0670785328874-24.9718905328874)} {360} \times 2 \times \pi \times R $$
其中R
为火星半径,此处取$3389.5$,单位km
可以得到沿经线方向的长度为$5631$,单位m
对于计算沿纬度方向的长度,需要计算小圆的半径和周长
有公式:
$$ r = R \times cos \theta $$
其中r
为小圆半径,R
为大圆半径即火星半径,$\theta$为纬度
为了更加严谨,$\theta$的取值为纬度平均值
所以可以计算距离:
$$ \frac {110.902561319902-110.872563319902} {360} \times 2 \times \pi \times r $$
得到结果为$1608$,单位m
但是实际上,为了计算Unity中y轴方向的Terrain Size,只需要计算以上两者其中之一即可
通过GlobalMapper可以得知高度跨度为$41$米,则可以列出计算式:
$$ \frac x {41} = \frac {1796} {5631} $$
解得$x$约为13