制作3D地形(四):创建模型
前言:详细介绍如何使用高程数据在 Blender 中创建3D立体地形模型,涉及材质、表面细分和置换等相关概念...再一次温馨提示:主界面右侧的属性对话框中选项会根据当前的选中对象(物体、其他物体、光源、摄像机)的不同而发生变化,并且一部分相关设置只会作用于被选中的物体。第一步 更换渲染引擎
渲染引擎(Rendering Engine)是 Blender 程序非常复杂且重要的组成部分之一,我们的模型、阴影等效果之所以是这模样都是模型渲染引擎的功劳。点击 Blender 主界面右边相机模样的图标(橙色框中部分),可以打开渲染器属性界面,在这里可以修改渲染引擎相关属性;Blender 默认的渲染引擎是 Eevee,我们需要将其更换为 Cycles。你可以简单的认为 Cycles 引擎牛逼一些。
将 Render Engine 更换为 Cycles 后,紧接下面的 特性集(Feature Set) 也修改为 试验特性(Experimental)。实验特性一般是一些最新的、较为先进的特性,也可能有各种问题,管他呢,用就完了,之后用到的部分设置只有在开启实验特性后才有。
第二步 修改平面
选中主界面中的立方体,使用 Delete 键删除,然后快捷键 Shift+a 调出模型添加界面,依次点击网格(Mesh)、平面(Plane),可以在主界面中央添加一个平面模型。详细操作在《第三章》讲过,如果不清楚可以回第三章看看,有图文说明。添加模型后,点击右边
图标打开物体属性窗口,其中的位置XYZ( LocationXYZ)用于调整平面在坐标系上的位置,缩放XYZ(ScaleXYZ)用于调整模型的大小。
有的读者可能会发现,模型属性中没有一个可以明确设置大小的选项,只有位置、角度、比例(缩放),那这是为什么呢?其实这里是模型的设置选项,模型是可大可小的,出图大小主要和摄像机属性相关,所以这里自然就没有大小设置的选项啦。如何限制出图大小后面再讲。尽管不用在意模型大小,这里依然有一个东西必须修改,那就是平面(plane)模型的比例,通过修改 缩放XYZ 来控制比例,比例需要和 TIFF 图片相匹配。mountain.tif 文件的分辨率尺寸为 2364 X 1871,所以我们可以将 缩放XYZ 为下面这样:
缩放比例:2.364比1.871第三步 添加材质(Material)
1.什么是材质?先说什么是材质?是一个比较抽象和复杂的概念,我就直接抄别人的吧!Daniel Huffman https://somethingaboutmaps.wordpress.com/about/ 做了一个解释:In the real world, substances such as wood, stone, glass, etc. look different from each other because they have different colors, different surface textures, different roughnesses, etc. Blender is designed to simulate these variations by letting us assign different material properties to our objects. This is a big contributor to the realism of 3D models: the rendering engine calculates the scatter & bounce of light differently for different objects based on the properties they’ve been assigned. Each object in Blender is made of what the system calls a material. Materials are just collections of properties that tell Blender how light should interact with the object — basically, what sort of real-world substance the object should pretend to be made from.--Daniel Huffman, a lovly cartographer.我翻译成中文给大家看看吧,如果逻辑有问题那就是谷歌的锅:在现实世界中,木材,石材,玻璃等物质看起来互不相同,因为它们具有不同的颜色、不同的表面纹理、不同的粗糙度等。Blender 旨在通过让我们分配不同的材质属性来模拟这些差异。这对 3D 模型的真实性做出了重要贡献:渲染引擎根据分配给它们的属性,针对不同的对象,以不同的方式计算光的散射和反弹。Blender 中的每个对象均由系统称为材质的东西组成。材质是属性的集合,这些属性告诉 Blender 光线应该如何与对象相互作用、对象与对象之间应该如何作用,简单来说就是让系统去模拟现实世界中的物质是由什么组成的。
没有任何材质的模型,呈现灰灰的模样2.材质添加在右边的材料属性对话框中,点击新建创建材质;
然后 Blender 会生成一个名为材质.001(Material.001)的材质文件。然后在下面可以看到非常多的材质属性选项,还可以看到材质预览。虽然下面的可修改选项多,但是我们用的少啊,所以学习成本不高。
材质属性选项界面第四步 使用着色器编辑器创建凹凸面
材质不仅可以描述物体对象的粗糙度、颜色、光反射情况外,也可以通过表面的灰度值,模拟凹凸效果。首先进入着色器编辑器界面;
1.编辑器工作基本原理着色器编辑器是节点式、流式的编辑工具。这种节点式的操作流程利于理解同时符合逻辑,又能处理构建复杂的工作、效果流。
两个节点(Node)上图中有两张矩形的“卡片”,一张“卡片”就是一个节点(Node);每个节点中都有很多可调整项,每个节点都有输入和输出端,节点左侧的小圆点是输入端,右边的是输出端。节点在对输入内容进行处理加工后再从输出端输出。输入和输出端不是只有一个,或许有多个。下图红色的“材质输出”这个节点看上去没有输出,实际上它是自动将内容输出给了 Blender 去处理,所以隐藏了。
2.创建凹凸纹理左上方点击添加(Add)->纹理(Texture)——>图像纹理(Image Texture),如此可以创建一个新节点,当然请忘记这个繁琐操作,你应该直接使用快捷键 Shift+a 来快速添加节点。
点击“图像纹理”节点中的打开选项,选择你从我这里下载的或者你自己已经处理完成的 tif 文件 mountain.tif;
然后就是节点连接操作。点击“图像纹理”节点右边的黄色小圆点,上面写着颜色,然后拖拽线条,连接到“材质输出”节点左侧名为置换(Displacement)的小圆点。
点击渲染图像,你可以得到一张简单使用不同的灰度值对比来表现凹凸地形的渲染图;这种表现地形的方式同 ArcGIS 、QGIS 等都是一样的,是一种假的地形。不是真正的3D模型,依然是平面的,它仅仅是通过图像的灰度值来模拟不同地形的凹凸程度,从而实现地形起伏的效果。它没有真正的反射光、漫反射,所以还需要进一步的操作。
第四步 使用着色器编辑器创建立体模型
在凹凸面的基础上生成真正的3D模型。1.表面细分表面细分,英文:Subdivision Surface,也可以叫曲面细分。表面细分会增加模型的细节程度(增加模型的多边形数),模型的顶点数量会增多。减少球体的顶点会让其表面越来越棱角分明,而增加节点会越来越光滑。表面细分被大量用于建模、用于创建复杂的表面。通常来说,顶点越多,三角面也越多,模型越精细,可以满足更为细致的地形表现。
上:表面细分后;下:表面细分前在确保模型在选中的状态下(模型在选中状态下四周有橙色描边),点击右侧
图标打开修改器属性对话框。点击添加修改器(Add Modifier)->表面细分(Subdivision Surface)。
之后可以看到以下这个表面细分选项界面;同时非常重要的一点就是在细分类型中选择简单型,然后勾选中自适应细分(如果没有的话,可能就是你没有开启渲染引擎的试验特性)。自适应细分模型现在不会立即发生改变,只有当渲染需要的时候才会细分出成千上万个顶点。选中自适应细分后,Blender 程序会根据具体的图形、模型包括相机的距离姿态来自适应的更改表面的细分程度。这有助于细微处细节的提升同时提升整体的渲染性能,缩小渲染时长,毕竟一张图直接渲染一天也是很有可能发生的事情。
2.置换终于来到最后一步!置换:将灰度凹凸面置换成真正的立体模型。回到着色器编辑器界面,左上方点击添加(Add)->矢量(Vector)——>置换( Displacement),添加“置换”节点。
将下图“置换”节点左边的高度小圆点(Height)与橙色的“图像纹理”节点相连;“置换”节点右边的置换(Displacement)小圆点与“材质输出”节点相连。
然后点击打开右侧的材质对话框,就是这个红黑色的的小球
,点击后向下滑动找到设置,最后将仅凹凸(Bump Only)修改为仅置换(Dispacement Only)。
现在 Blender 不会再通过不同的灰度值来模拟地形了,而是真正使用数以万计的顶点(三角面)来搭建地形,从而实现逼真的地形效果。再次渲染图像,然后你的电脑会直接起飞,你会发现渲染速度变慢,用时变长,这是正常的也是好事,这说明你的电脑忙着表面细分、搭建3D立体模型、计算光线的反射、阴影等。地形模型渲染效果如下:
第五步 优化
显然,目前的成果还是不太正常。渲染出来的效果可以说是非常疯狂了,像“疯狂山脉”?不仅模型的高度非常夸张,在四周的边缘处可以看到这种拉伸状的阴影,恩~我也不知道叫什么,就先叫阴影吧。
拉伸状的阴影1.调整高度可以通过修改“置换节点”的缩放条来降低地形起伏的疯狂程度,我把缩放从1修改为0.16。不过之后我不会使用0.16这么小的值啦,尽管设置成这个数值的话,渲染出来的山脉比较符合实际的高度比例,但是在美术方面的表现就不太够,阴影也不够突出,所以我之后的渲染成果一般是使用的0.4这个数值。不过还是看个人的喜好还有实际数据的高度情况,如果你选择地图的高度较低、没有太多的起伏的话,可以适当调大这个值;如果整体的山脉本来就很高,很有立体感的话,就没有必要设置那么高了。2.去除拉伸状“阴影”而图像边缘的拉伸状阴影可以将“图像纹理”节点中的重复(Repeat)更改为扩展(Extent)。
再次渲染出图,这次的地形起伏就没有那么疯狂了,图像的边缘也没有拉伸状的阴影。
成果图最后
看完这章节你可以掌握:什么是材质?如何添加材质;使用 Blender 创建简单的凹凸纹理;表面细分的意义;通过置换构建真正的3D模型;模型简单的优化:降低高度,去除四周的拉伸阴影。这一章向前迈进了一大步,成功创建了3D地形模型,但是我们可以看到,这个效果还是一般,最重要的是:清晰度不够;所以在下一章节中,会着重介绍摄像机-光源-颜色,如此之后,成果图的颜值和细节会进一步提高。同样渲染时间也会蹭蹭的往上涨。好了到这里本章节就结束了,下一节再见!现在我们已经接近这个效果了,还剩四分之一的路程:
离这个成果还有一半的路程:
资料下载:提供原始高程数据以及处理好后的高程数据;1 原始高程数据:原始未投影 TIFF 数据。2 成果高程数据:完成所有处理步骤,可直接建模的 TIFF 数据。Blender 文件(后续章节会提供);系列教程PDF文档。