2020-05-05
项目需要把真实地形导入Unity。
获得真实地形的方法可以是去一些免费地理网站上获取,比如网上说的很多的tarrain.party,
我们这里用激光雷达扫描地形,得到点云数据,生成DEM(数字高程模型)的图片。
-
首先得到一张DEM(数字高程模型)的图片。比如我这里是用lidar360软件处理激光雷达获得的点云数据,依次noise filter, classify, produce DEM (bitdepth = 32)。 注意得到的图片的格式和位深度。
(我这张是32位的图,数值很大,显示出来是一片白)
-
用matlab预处理图片。imfinfo 方法可以获得图片信息,包括位深度。由于Unity2019支持8或16位的图片,需要处理为8或16位。
我的这张DEM,由matlab 的info得知是32位位深的图片。
这里预处理我把整个图片的灰度范围拉伸到0~2^16。 你也可以不拉伸,只要保证转化为16位或8位的图片即可。
处理完就能正常显示了:
matlab preprocess: (bitdepth = 16)
inputPath='DEM.tif';
outputPath = 'MatlabDEM.png';
outputFormat = 'png';
Info=imfinfo(inputPath);
tiff32 = imread(inputPath);
minValue = min(min(tiff32));
maxValue = max(max(tiff32));
tiffToGround = tiff32 - minValue;
tiffstretch = tiffToGround * 2^16 / (maxValue - minValue);
tiff16=uint16(tiffstretch);
imwrite(tiff16,outputPath,outputFormat,'bitdepth',16);
- Open with photoshop, save as raw (Byte order: IBM(PC) )
用Photoshop打开matlab预处理后的图片,另存为raw格式,
如果是8位的话不需要选byte order, 默认单通道
如果是16位的话记得选单通道,并根据自己电脑选byte order,比如我的Windows是选IBM(PC)。(别的设备选什么我也不知道,可以查查资料,也可以都试试) -
import in Unity, depth = bit16, resolution leave it, byte order: windows
在Unity里新建一个terrain, 点下图图标
往下翻,找到import raw:
选择刚才的raw文件,
位数8还是16是根据自己刚才设置的情况
byte order 如果是windows电脑就选windows
导进来就OK了