1) 栅格数据获取,本文使用的是互联网公开可下载的90米山西省的DEM数据。


2) 栅格投影
使用GeoScene Pro中数据管理工具-投影和变换-栅格-投影栅格,将原始的DEM投影变换成web墨卡托影像,就是我们常用的wkid 102100。
3)像素拉伸
这一步对栅格数据的处理要满足两个条件。blender可读取的通常是16位无符号的整型数据,也就是说如果你的dem包含小数或者负数,需要进行转换处理;当前dem的像素范围是从199到3059,在blender中是以像素值为高度来进行拉伸的,像素范围小会导致渲染出来的3D图高度跳跃,不够平滑,将像素范围拉伸到0-65535,既能满足数据类型的要求,也保障后续的三维立体平滑效果。
像素拉伸的思路是通过线性变化来实现的,比如本文使用的dem里,199代表0,3059代表65535,将199-3059的值变换到0-65535范围内的值,同时还需要把NoData值给赋0,0值表现在blender里就是我们制图区域外的底板;下面公式里还有一个5000,这个值可以自行修改,它代表的意义其实是为了在blender里制图的时候把我们的制图内容和底板拉开高度,计算公式如下:INT( CON( ISNULL( “DEM” ), 0, ( ( “DEM” – MIN) / ( MAX – MIN ) * ( 65535 – 5000 ) + 5000 ) ) )处理完后,我们会得到这样一个栅格数据,基本上本次栅格数据处理工作就结束了。

查看到该栅格数的属性,我们看到基本的栅格信息如下,注意下行列数5233*8884,之后在blender里会有特殊的用处。
4)栅格导出
我们需要把处理好的数据导出成tiff格式,可以在Geoscen Pro中左侧目录里使用通过数据-导出-栅格,也可以使用数据管理工具-栅格-栅格数据集-复制栅格。

以导出栅格为例,在导出参数设置里,注意不要构建金字塔和计算统计数据,像素类型选择16位无符号,输出格式选择tiff,选择保存到本地文件夹里。
至此,栅格数据处理工作基本结束,接下来Blender接过接力棒。
5)blender制图
启动Blender我们会看到下面的欢迎页面,点击主窗口里欢迎窗口之外的区域快速进入3D视图。

视图窗口里现在能看到三个元素,我用框给标记出来了,红色框里的是相机,绿色框里是模型,黄色框里是光源,我们制图也需要用到这三个元素,但是当前我们先全部清掉,重头开始,点击键盘字母a,选中所有视图内的元素,点击delete,清除所有元素。

接下来我们要先启用Blender的一项功能,来支持我们将dem图片作为plane导入。Edit-Preferences,Add-ons搜索plane,勾选 Import-Export:Import Images as Planes

做完上述步骤后,在File-Import-Images as Planes,导入我们之前处理好的dem数据。
此时我们看到的是一个灰色的平面,此时我们需要先修改一下场景的渲染引擎,在右侧属性设置里,将渲染引擎设置为Cycles,Feature Set设置为Experiments。
选中dem对象,点击右下角小扳手按钮Modifier Properties,添加Subdivision Surface,算法选择Simple,勾选Adaptive。
这一步稍作解释,我们添加到场景里的dem目前呈现出来是只有四个节点的矩形,blender制作的时候实际上让地形起伏的是通过上下移动节点实现的,四个节点的数量显然是不够的,设置成adaptive会使Blender根据我们的dem动态来增加和减少节点数量绘制地形效果。回到主视图,我们需要切换一下视角,点击视图窗口右上角工具条中如黄色框里按钮。
此时的效果变成了这样

我们现在给场景添加光源,选择太阳光

此时,场景里看起来是这样的,图片没那么黑了

现在我们的场景里有了拍摄的对象,光源,还缺个相机,相机拍摄可以放在最后,我们先把三维模型构建好。对三维模型的构建,需要在shader Editor里完成,可以从多个地方进入到这个窗口里,红框里是三个进入到Shader Editor的地方。


从序号2的入口进入,在场景里选中dem就可以在Shader Editor窗口里,看到当前的处理流程,我们三维制作的主要战场就在这里了。添加Diffuse BSDF和Displacement两个节点,删除原先的Principled BSDF节点。

连接dem的color属性作为Diffuse BSDF的color输入和Displacement的Height输入,然后将BSDF的输出作为Surface输入,Displacement的输出作为Material Output的Displacement输入值。
右侧面板,选择materials properties面板,setting下,Displacement选择Displacement Only。
场景里已经可以看到变形很夸张的地形起伏了,我们调整Shader Editor里Displacement节点的Scale的值为0.05来改变起伏效果,根据效果来确定。

起伏的地形已经有了,接下来是颜色的渲染,在Shader Editor中将dem的Color Space的属性改为Linear,并增加一个色带的节点。

接下来就是色带的设置,这个面板主要分上下两个部分,上面一个是色带和分隔点设置,下面的颜色是对应分隔点的颜色。增加多个颜色分隔点,可以让地形的颜色渐变更加平滑,本次共设置了5个颜色分隔点,默认自带两个,增加了三个分隔点,点击上方的加号可以增加。


Colormap最终设置如下:

接下来需要修改我们的太阳光,选中场景中的太阳光,右侧属性面板切换到Object Data Properties里设置参数如下:
选中太阳光,切换到Object Properties,设置参数如下:
太阳光的设置,主要是设置光线的强度,光源的位置,光源来自的角度方向,需要自己根据效果来调整参数,本处的参数仅供参考。此时看到三维场景里的效果如下:
接下来我们需要添加我们虚拟照相馆最后一项元素——相机,

添加相机后就可以从相机视角来查看最终输出的图像,在工具条View-Camera-Active Camera,此时从相机看到的对象角度和范围都不是我们想要的,后面我们会调整。

选中相机,在右侧下方属性面板中,选择Object Data Properties,设置Type为Orthographic,意思为选择正交相机,Orthographic Scale也需要设置。
切换到右侧属性面板Output Properties面板,设置输出图片的像素值,默认是1920*1080,山西的dem的形状显然不一样。这里我们需要用到之前在ArcGIS Pro/GeoScene Pro里处理完后栅格的行列数:5233*8884,假设我们想输出的图片宽1000px,那么高度为:1000*8884/5233=1697px,

选中相机,右下角属性面板中切换到Object Properties,设置Location和Rotation,让相机与3D地形垂直,并在其上。
此时,相机位于dem地形正上方,从相机视图看与dem吻合。


到现在为止,我们的准备工作都做好了,我们需要“拍照”了,点击菜单里的Render-Render Image或者直接按快捷键F12,进行最终出图的查看,这也是最消耗电脑资源的步骤,会弹出一个新窗口,一个一个切片地渲染,效果如下。
点击Images-Save As保存最终成果到文件夹里即可。

最终的效果如下:

至此,3D地形地图的制作效果就完成了,如果你不满意当前的效果,可以根据Render的效果返回去调整太阳光的强度和角度来制作你认为好的效果,重新渲染保存。