本文作者:qiaoqingyi

代码可以制作3D动画么?(怎么用代码制作动画)

qiaoqingyi 2023-08-15 170

前言:为了能在建模软件 Blender 中成功建立起3D模型,需要对高程数据进行预处理。

高程数据,你也可以叫 DEM(数字高程模型)数据。这种数据有多种表现形式,同样也有多种储存方式,或者说格式;最常见的就是以灰度值来表示高程的灰度栅格数据 TIFF,后缀为 tif 的格式。

后文说的高程数据都是指高程灰度图栅格数据。

Blender 就是通过读取高程数据中各像素的灰度值来获取相应的高度信息,然后建立起3D模型。

Blender 仅读取灰度值,对其空间坐标信息不敏感,读入到 Blender 中的空间坐标信息就没了,所以不一定非要 TIFF 数据才行,只要是灰度栅格图像,比如 PNG 和 JPEG 格式,在保证像素类型正确的前提前,都是可以通过 Blender 建立3D模型的。

根据具体的情况和相应的场景可能需要不同的格式,不过一般使用 TIFF 格式的就可以了。

数据处理分为以下4个部分,其中最后两个部分是重中之重,所有的操作同时提供 ArcGIS 和 QGIS 两种处理方式:

数据获取;

合并-裁剪-投影-重采样;

范围拉伸;

转换像素类型。

理论非常简单,但是制作出的地形模型好坏的关键就在于数据处理。

第一步 数据获取

制作3D模型需要高程数据,现在获取高程数据的有效途径非常多,读者可以根据自己的需要选择合适分辨率的高程数据;

如果你想制作小比例尺大范围的地图,最好选择较大空间分辨率的高程数据,比如1千米x1千米分辨率;

而如果你想制作大比例尺较为精细的地图的话,就可以选择10米x10米、甚至更小空间分辨率的高程数据。

展开全文

特别提醒一点,小心使用保密数据,尽量不用;你能在网上下载到的数据想怎么折腾都可以。

网上有很多关于高程数据的获取指南,各位可以根据自己的实际情况获取相应的数据。

笔者目前使用较多的是下面这个网站:

http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm

该网站可以下载全球的高程数据,其中中国区域高程数据的空间分辨率一般都是90米,最重要的是下载速度还行;打开网址可以看到很多小格子,点击格子就可以下载这个格子范围内的 DEM 数据,非常的直观。

解压后数据格式是 HGT 格式,可以直接用 ArcGIS 或者 QGIS 打开。

网站界面截图第二步 合并-裁剪-投影-重采样

其实这四个操作都是可选的,因为并不是所有数据都需要全部走一遍这些流程,因为你完全可以使用一个已经处理好、同时已经设置了投影系的 tif 数据。

并不是所有读者都有 GIS 相关背景经验,可能有的读者仅仅是兴趣使然,所以为了不落下每一个人,这里还是讲一下如何合并-裁剪-投影-重采样,对此非常熟悉的读者朋友可以跳过这一小节,直接进入第三步。

2.1 合并

通常来说,高程数据都是一块一块的矩形;所以你很有可能需要通过将多个矩形合并起来获取目标范围区。

将周围的高程数据添加进来,将其合并(也叫镶嵌)成一个整块。

4块高程数据(未镶嵌)

工具位置

ArcGIS 可以使用镶嵌至新栅格工具,该工具位于数据管理工具-栅格-栅格数据集-镶嵌至新栅格。

QGIS 可以使用 Merge 工具可以镶嵌栅格;该工具来自于 GADL 包。位于QGIS 右侧工具栏,GDAL-Raster miscellaneous-Merge。或者在上方工具栏中快捷打开:

2.2 裁剪

工具位置

ArcGIS 中使用裁剪工具;位于数据管理工具-栅格-栅格处理-裁剪;

QGIS 中依然在上方的 Raster 菜单中,依次点击 Extraction- Clip raster by mask layer即可。

2.3 投影

在 Blender 读取高程数据之前应该确保高程数据已经正确设置好了投影。不然 Blender 读取的形状就是扁的,因为这个扁扁的形状才是投影前高程数据的真实情况。

那为什么 ArcGIS 中就显示正常呢?因为 GIS 软件会自动做一个投影显示。所以设置投影系是必不可少的一步操作。

左:投影前的真实形状,形状更扁;右:投影后

工具位置

ArcGIS 中的投影工具在数据管理工具-投影和变换-栅格-投影栅格;

QGIS 的投影工具在菜单栏上方的 Raster-Projections-Warp。

2.4 重采样(修改像素空间分辨率)

代码可以制作3D动画么?(怎么用代码制作动画)

重采样:根据一部分像素的信息赋值给其他像素信息的过程。

这里的重采样应该叫修改像素空间分辨率,只不过也是用重采样的方式实现而已。

什么叫空间分辨率?一个像素所表示的实际地理大小就是空间分辨率。比如这个教程使用的高程数据空间分辨率是90米,那么这就代表一个像素映射现实生活中一个90米长、90米宽的方形区域。

如果想要制作整个中国的3D模型,90米分辨率就太精细了,整个数据量就非常庞大,直接让电脑死机,所以可以通过重采样为1千米或者10千米。

单独的重采样工具不是所有 GIS 软件中都有,GIS 软件中一些和栅格相关的工具通常会自带修改空间分辨率的选项,所以可以顺便设置好空间分辨率大小;比如使用 QGIS 时我就喜欢使用栅格投影工具来顺便修改空间分辨率。

该教程提供的高程数据空间分辨率大小合适,不需要修改。

工具位置

ArcGIS 中的单独重采样工具在数据管理工具-栅格-栅格处理-重采样;ArcGIS 10.3版本有4种方法。

QGIS 的话我是直接使用投影工具来解决,因为 QGIS 本身没有独立的重采样工具,在 QGIS 主界面上面的菜单栏中选择 Raster-Projections-Warp即可。

将投影工具中的投影选项空着,只需要设置好 Output file resolution in target georeferenced units 这个选项,就可以在不修改投影的前提下修改空间分辨率。

第三步 范围拉伸

范围拉伸,英文:rescale。

范围拉伸是指把高程数据的范围扩大,普通的高程数据一般就在0到4000左右,教程提供的高程数据范围是42到2283,那么为什么要拉伸?有以下两个重要原因:

适配 Blender;如果以42到2283这样的范围导入 Blender,最终的成果建模是非常平坦,就像一张白纸,就像下面这样,看的见嘛?快瞅瞅:

保留细节;一般来说,高程数据的像素数据类型是浮点型,是小数形式,而 Blender 支持整数,所以需要转换。如果不拉伸直接转换,小数会被四舍五入成整数,数据丢失,反映到模型上就是细节丢失、没有连续性。

由于这两个原因,所以我们必须先对高程数据进行拉伸。

那么具体拉伸到多大呢?Daniel Huffman 大神提供了答案 👍 :

( 像 素 值 最 低 值 ) ( 最 高 值 最 低 值 ) ( 像 素 值 − 最 低 值 ) ÷ ( 最 高 值 − 最 低 值 ) ∗ 65535

工具位置

ArcGIS 中使用栅格计算器,工具栏中依次打开 Spatial Analyst 工具-地图代数,最后打开栅格计算器工具执行栅格拉伸操作。

然后输入以下计算表达式:

( " m o u n t a i n . t i f " − F l o a t ( 42 ) ) ÷ ( F l o a t ( 2283 ) − F l o a t ( 42 ) ) ∗ F l o a t ( 65535 )

你每一个输入的整数最好使用 ArcGIS 提供的关键字 Float 括起来,否则输出的数据就有可能自动四舍五入到整数位,最后导致的结果要么是0要么是65535(是否会四舍五入到整数取决于高程数据当前的像素类型,不过保险起见,都统一加上 Float 吧)。

QGIS 使用 Raster Calculator。点击主界面上方菜单栏中的 Raster-Raster Calculator。

然后输入以下计算表达式:

( " m o u n t a i n @ 1 " − 42 ) ÷ ( 2283 − 42 ) ∗ 65535

Note:①这里没有考虑高程数据范围涉及到负数(海底)的情况。②可能会遇到高程数据中有空值 Nodata,请注意。

简单理解,像素类型描述了图像的最小储存单元所使用的格式。

查看像素类型

在创建3D模型时,Blender 只能支持特定的像素类型,那就是16位无符号整型;所以现在要做的就是把像素类型装换为6位无符号整型。

16位无符号整型,英文:16 unsigned int 或者 16 bit unsigned;无符号表示正数,从0开始到216的整数。

从0到2的16次方正好有65536个数(包括0),那么最大数就是65535,这就是公式最后乘数字65535的原因。

工具位置

ArcGIS 可以使用复制栅格工具来修改像素类型:数据管理工具-栅格-栅格数据集-复制栅格;然后像素类型选择:16_BIT_UNSIGNED

QGIS 可以使用 translate 工具:上方菜单栏依次点击 Raster-conversion-translate;然后在 Output data type 中选择 UInt16。

最后

本章节你可以了解到:

使用高程灰度图栅格数据可以在 Blender 中创建3D地形模型;

高程数据的基本预处理操作(包括 ArcGIS 和 QGIS);

高程范围拉伸的重要性和操作;

Blender 建模需要像素类型为16位无符号整型的栅格图像。

好的,学完这章,距离下面的成果又近了一大步!

转载自:GIS荟

版权归原作者所有,如有侵权请告知删除

如果亲觉得我们的文章还不错的话,那就请分享转发一下吧!

地信论坛

bbs.3s001.com

微信ID: bbs3s001

阅读
分享