简介:面向建筑设计、城市规划与景观可视化领域的设计师及进阶学习者,一份PDF教程系统讲解如何利用数字化地形图,借助GPCADX V1.0、SketchUp、Photoshop与Lumion四款软件协同制作高质量仿真地形。教程以完整实例串联各环节:先在GPCADX中转换高程信息并生成三维地形表皮;再用mesh2HeightMap插件柔化地形并输出灰度图;随后在Photoshop中按比例方格网校正长宽比;最后导入Lumion创建空白场景,逐步添加材质、纹理与植被,形成逼真的仿真地形。资源为单份PDF文档,大小3.16MB,共1个文件,页面紧凑、步骤明确,适合已掌握基础软件操作并希望提升地形建模效率的设计师。目前已有122人学习下载。跟随教程步骤可避开格式转换、比例失衡等坑点,掌握GPCADX生成高程点、SU柔化地形与控制外围矩形尺寸、Photoshop填充灰色边框保持比例等关键技巧,最终制作出比例准确、视觉真实的Lumion仿真地形,显著缩短制作周期并增强方案表现力。
1. 数字化地形图与Lumion仿真地形:从高程数据到可漫游的现实地块
接到过一个景观投标项目,场地在南方某个丘陵片区,甲方只给了一张测绘院打出来的地形图扫描件和一段 CAD 里的稀疏等高线。当时团队里有同事直接在 Lumion 里用手推地形,推了整整一个下午,推出来的山脊线跟现状地形的塌陷点位完全对不上。后来我们换了思路:把数字化地形图当作数据源,先用 GIS 软件做数据清洗和坐标转换,再让三维软件生成网格,最后进 Lumion 贴材质、种树、做水面。整个流程跑下来,同一块地只花了半天时间,而且高程误差控制在半米以内。这篇教程就是把这条工作流拆开讲清楚——数字化地形图到底怎么变成 Lumion 能识别的仿真地形,中间需要哪几个软件接力,每一步踩过的坑是什么。适合景观设计师、规划可视化人员和刚接触 Lumion 地形制作的从业者,也适合那些已经会建模但始终觉得地形线条不对的老手。
2. 先搞清地形数据与软件分工:DEM、等高线和坐标系选型
2.1 数字化地形图的三种常见来源与精度取舍
不是所有地形图都适合直接丢进 Lumion。根据我的实际使用经验,数字化地形图的来源大致分三类,精度和工作量差别很大。
第一类是公开的 DEM 数据,比如 SRTM 30 米分辨率、ALOS 12.5 米分辨率的栅格高程数据。这类数据的优点是免费、覆盖范围大、下载方便,适合做城市尺度或片区尺度的方案推演;缺点是细节差,山体轮廓在 Lumion 里放大到近景时会显得圆滑失真,小沟小坎基本看不出来。第二类是测绘部门提供的等高线数据,通常是 DWG 格式或者带有高程属性的矢量线。这类数据精度高,能真实反映地形起伏,是工程项目的首选,但拿到手之后往往需要人工检查断线、缺线,清理成本不低。第三类是无人机倾斜摄影生成的 DSM,精度最高,能连建筑和树木一起拍下来,但数据量大、网格极碎,进 Lumion 前必须做大幅度的抽稀简化。
我的建议是:能用等高线就不用 DEM,能用高分辨率 DSM 就不用低分辨率 DEM。如果只有 DEM,也一定要先确认它的空间分辨率到底是多少,别把 30 米分辨率的 SRTM 放大到局部去欺骗自己。分辨率不够,后续做出来的山体在 Lumion 里就是一块豆腐。
2.2 多个软件的分工:谁做清洗、谁做网格、谁做渲染
Lumion 本身不是一个好的地形数据软件,它更擅长把现成的模型和地形变得好看。所以制作仿真地形的核心思路是:用 GIS 软件处理原始数据,用三维软件处理网格,最后用 Lumion 做表达。
我常用的软件链路是 QGIS + Global Mapper + Blender + Lumion。QGIS 负责读取 DEM 或矢量等高线,做投影转换、裁剪和格式输出;Global Mapper 负责把栅格高程直接转换成网格对象,导出 OBJ 或 DXF;Blender 负责清理 Global Mapper 导出的多余面片、合并顶点、减面、附地表贴图;Lumion 负责最终渲染和放配景。如果你不想装 Global Mapper,QGIS 里也有插件可以导出 XYZ 点云,然后在 Blender 或 CloudCompare 里生成网格,但流程更长,操作难度也更高。
| 工具 | 核心用途 | 关键导出格式 |
|---|---|---|
| QGIS | 数据裁剪、重投影、高程栅格检查 | GeoTIFF、XYZ |
| Global Mapper | 栅格转网格、点云抽稀、坐标系转换 | OBJ、DXF、STL |
| Blender | 减面、法线修复、UV 贴图 | FBX、DAE、OBJ |
| Lumion | 材质、配景、光照、渲染 | 无导出需求 |
这套链路里每个软件只做自己擅长的一件事,出问题时能快速定位是哪一步的问题,而不是在 Lumion 里反复试错。
2.3 统一坐标系:CGCS2000、WGS84 与本地投影
做地形制作的人最容易忽略的就是坐标系问题,但这恰恰是模型在 Lumion 里乱飞、错位、变形的最主要原因。国内测绘项目经常给的是 CGCS2000 坐标系的平面投影数据,也就是带中央经线的高斯-克吕格投影,坐标值通常很大,比如 X 是 500 多公里,Y 是 3000 多公里。Lumion 和 Blender 完全不认识这类投影坐标,它们默认把模型的空间坐标当作普通的米制坐标来用。
常见做法是先在 QGIS 里把数据统一重投影到 WGS84 经纬度坐标系,也就是 EPSG:4326,让整个项目在同一个地理坐标参照下工作。导出 OBJ 或 FBX 时,Global Mapper 和 Blender 会自动把经纬度坐标换算成相对的 XYZ 值,模型在 Lumion 里才能稳定落在一个相对范围内。如果你手头只有 CGCS2000 数据,不要直接导入 Global Mapper,务必在 QGIS 里先转换一次。否则地形会沿着经线方向被拉歪,而且几乎无法在 Lumion 里手动纠正。
3. 用 QGIS 把原始地形处理干净:裁剪、重投影与导出 GeoTIFF
3.1 QGIS 裁剪 DEM 并重投影的最小操作流程
拿到原始 DEM 栅格文件之后,第一步不是急着转网格,而是先做裁剪和重投影。这一步的目的是把研究范围之外的无用数据删掉,防止文件体积过大,同时把坐标系统一到 WGS84,为后面进入 Global Mapper 做准备。
在 QGIS 里的操作路径是:先加载 DEM 文件,工具栏找到 Raster → Extraction → Clip Raster by Extent。在弹出的对话框里设置目标范围,可以直接选择当前图层范围,也可以加载一个矢量面图层作为裁剪边界。我一般建议用矢量边界裁剪,比如用项目的地块红线,这样裁剪出来的栅格边缘不会有大片无值区域。
裁剪完成后再做重投影:Raster → Projections → Warp,目标 CRS 选择 EPSG:4326,重采样方式选择 Bilinear。Bilinear 比 Nearest Neighbour 的灰度过渡平滑,能明显减少后续网格上的台阶感。最后 Raster → Conversion → Translate,把文件导出为 GeoTIFF 格式,输出数据类型一定要选 Float32,不要选 Byte,因为 Byte 只能存 0 到 255 的整数,会彻底抹掉高程的小数精度。
3.2 用 GDAL 命令行做批量处理与参数说明
如果你手头有多个 DEM 分幅文件,比如一场洪水前后的两期数据,或者在 QGIS 界面里反复点按钮点得心烦,我建议直接用 GDAL 命令来做。QGIS 底层的所有栅格工具都是由 GDAL 驱动的,命令行方式不仅更快,而且可以记在文本里反复执行。
gdalwarp -t_srs EPSG:4326 -r bilinear \ -cutline AOI.geojson -crop_to_cutline \ -dstnodata -9999 -co COMPRESS=LZW \ input_dem.tif output_wgs84.tif这段命令的逻辑很简单:-t_srs指定输出坐标系,-cutline指向你的裁剪边界矢量文件,-crop_to_cutline表示让输出栅格严格贴合边界范围,-dstnodata把超出边界的区域统一设为 -9999,也就是无值标记,-co COMPRESS=LZW让输出文件采用无损压缩,文件体积会显著变小。input_dem.tif是原始 DEM 文件,output_wgs84.tif是最终输出文件。整个命令并不需要打开 QGIS 图形界面,只要在安装了 GDAL 的终端环境里执行即可。
执行完命令后,我习惯性地再用一条命令检查输出是否正确:gdalinfo output_wgs84.tif。重点看里面的 Size 是不是目标范围的宽高,Pixel Size 是不是和原始 DEM 分辨率一致,以及 Coordinate System 是不是 EPSG:4326。
3.3 导出前后必须核对的三项检查
栅格数据在进入三维流程之前,一定要肉眼检查三个地方,否则后面的模型会出现各种莫名其妙的毛病。
第一是检查无值区域。很多 DEM 在陡坡、山谷或雷达阴影处存在空洞,这些空洞在转成网格之后会变成巨大的凹陷或尖刺。处理方式是先用裁剪把研究范围限定在数据质量好的区域,再在 QGIS 里用 Raster Calculator 把这些无值区域替换成周围平均值,或者干脆保持无值,在网格生成前用 Global Mapper 的填充空洞功能统一处理。第二是检查高程单位和栅格分辨率。有些海外 DEM 的高程单位是英尺,导入之后地形会被拉伸得完全失真。第三是通过 QGIS 工具栏的 Identify 工具点击栅格上的几个特定点位,记下对应高程值,再和测绘地形图上的高程点核对一遍。这一步只需要三分钟,但能避免后面整个网格都建立在错误数据上。
4. 多软件接力:从高程网格到 Lumion 能用的地形面片
4.1 在 Global Mapper 里把 DEM 转成高程网格的标准做法
QGIS 处理完的 GeoTIFF 已经是一个干净的高程栅格,接下来要做的是把它转换成可编辑的三维网格。这里我最常用的是 Global Mapper,因为它在处理 DEM 转网格方面非常稳定,而且能直接控制网格间距、简化率等关键参数。
具体操作流程是:打开 Global Mapper,File → Open Data,选择上一步导出的 GeoTIFF。软件默认会把栅格显示成带高程明暗的平面图。然后选择菜单栏的 Analysis → Create Contours,可以先看一下等高线有没有明显跳变。确认无误后,直接把图层导出为 OBJ 格式:File → Export → Export 3D Format,格式选择 OBJ。导出选项里有一个很关键的参数叫 Mesh Spacing,这个值决定网格的顶点间隔,单位是米。
Mesh Spacing 的取值直接决定网格精度和文件大小。如果设置 2 米,生成的面片会非常多,Lumion 会明显卡顿;如果设置 20 米,山体细节几乎全部丢失。我的经验是:Lumion 漫游场景里较长的地块用 10 到 15 米间距,靠近建筑的重点区域可以用 5 米间距,进入 Blender 后还能通过减面把稀疏区域的网格删掉。导出时还要关闭 3D Point 和 3D Polyline 选项,只保留网格面片,否则文件里会混入大量无关线条,Blender 里清理起来很麻烦。
4.2 在 Blender 里清理网格并附上地表贴图
Global Mapper 导出的 OBJ 网格在 Blender 里打开后,第一件事是切到右上透视图查看网格结构。地形的面数如果在一百万面以上,需要先减面。我一般用 Blender 的 Decimate 修改器,把 Ratio 设置到 0.05 到 0.1 之间,也就是只保留原来面数的 5% 到 10%。如果地形主体是坡地、丘陵这种起伏平缓的特征,5% 的量就够;如果场地里有明显的陡坎、护坡,Ratio 建议保持 0.1 以上,否则坎面会被减成圆角。
import bpy obj = bpy.context.active_object bpy.ops.object.modifier_add(type='DECIMATE') obj.modifiers['Decimate'].ratio = 0.08 bpy.ops.object.modifier_apply(modifier='Decimate') bpy.ops.mesh.normals_make_consistent(inside=False)这段 Python 脚本的作用是:给当前选中的地形对象添加 Decimate 修改器,把网格缩减到原始面数的 8%,然后应用修改器,最后统一法线方向,确保每个面片的法线都朝外。法线朝外在 Lumion 里至关重要,否则地形表面会出现部分区域发黑、部分区域像镜子一样反光的怪现象。
贴地表纹理的方法也值得说一下。将视图切换到顶视图(键盘数字键 7),选中网格对象,进入编辑模式,全选所有面,然后按 U 键选择 Project from View (Bounds)。这样会把一张正射影像或卫星影像按顶视角投影到网格表面,让贴图和地形大致对应。之后在材质栏新建一个 Material,把影像文件作为 Base Color 贴图接上去,Lumion 显示出来的地形就有真实地表纹理了。
4.3 Lumion 导入地形模型的三种方式与参数建议
Lumion 支持导入 FBX、DAE、OBJ 等常见格式,但我不建议直接把 OBJ 丢进 Lumion,因为 OBJ 没有材质层级,后期修改会很痛苦。我更习惯在 Blender 里导成 FBX,导入时注意两个参数:单位设置为米,向上轴向设置为 Y 轴。
导入 Lumion 之后有三种组织方式。第一种是把地形当作普通模型直接摆进场景,材质在 Lumion 里重新指定。这种方式最省事,适合做鸟瞰图和方案比选。第二种是在 Lumion 里关闭自带地形系统,完全以导入的地形模型作为承载画面,这样能避免两个地形之间互相遮挡、覆盖。第三种是混合模式,先用导入模型定标高,再用 Lumion 内置地形在模型上方补充一些柔和的自然起伏,这种做法适合需要刷草地、地表细节的近距离人视点场景。无论选哪种,我建议在 Lumion 里把地形模型的名字改成“TERRAIN_BASE”,方便后期灯光和场景图层管理。
5. 制作 Lumion 仿真地形的避坑清单:5 个最常见的翻车现场
5.1 地形像镜面:法线丢失导致的反光异常
现象:地形导入 Lumion 后表面大面积发黑,拖拽视角时会看到不规则的亮斑,像一块破碎的镜面。原因是在 Blender 里没有统一法线方向,部分面片的法线朝向地面内部,Lumion 的光照计算就把这些面当作背光面处理。解决方式是在 Blender 编辑模式下全选网格,执行 Mesh → Normals → Recalculate Outside,然后重新导出 FBX。如果依然有局部发黑,检查是否有重叠面或零面积面,这些面要单独删除。
5.2 导入后地形“飞”到天上或穿入地底
现象:地形模型在 Lumion 里没有落在地面高度,而是悬在半空或者深陷地下。原因通常是单位不一致和坐标偏移。比如 Blender 里默认单位是米,但 Global Mapper 导出的 OBJ 可能被识别成英尺;或者模型原点距离世界中心太远,在 FBX 导出时发生了坐标换算误差。解决方式是导入 Blender 后立刻检查场景单位,Object → Apply → All Transforms,把旋转和缩放清零,确保模型中心靠近世界原点再导出。这个操作是玄学吗?不是,纯粹是大部分三维软件对远距离坐标的处理方式不一样。
5.3 高程精度丢失:地形“退化”成一片片台阶
现象:Lumion 里看地形轮廓,山体和自然坡地完全看不出光滑过渡,而是像一层层堆叠的梯田。原因有两个:一是导出 GeoTIFF 时选了 Byte 类型,高程小数被全部截断;二是 Global Mapper 导出的 Mesh Spacing 过大,采样点之间距离太远。解决方法是回到 QGIS,把导出格式改成 Float32;再检查 Global Mapper 里 Mesh Spacing 的数值,确保至少比 DEM 分辨率大 3 到 5 倍,但不能大过需求精度。另外,从 Blender 导出 FBX 时不要勾选三角化选项,否则面片数量会翻倍,而精度并不会提升。
5.4 模型边缘出现大型三角形塌陷
现象:地形边界处总是有几个巨大的三角形,有的陷进地里,有的向外延伸几百米,完全破坏构图。原因是裁剪边界上存在 nodata 区域,栅格在这些位置没有有效的高程值,转网格时 Global Mapper 把无值强行补成 0 或者某个默认值。解决办法是在 QGIS 里做裁剪时,用矢量边界-crop_to_cutline严格裁掉边界外部区域,同时在 Global Mapper 导出前使用 Fill Void 工具把残余的空洞按周围平均值填充。不要心存侥幸觉得 Lumion 里镜头不拍边界就无所谓,阴影计算和反射时这些破面照样会露馅。
5.5 导入模型后 Lumion 卡成 PPT
现象:场景里只放了一个地形,但旋转视角时画面严重掉帧,拖动相机一步一顿。原因是网格面数超出了 Lumion 的实时显示能力。Lumion 对单模型的面数上限并不是一个固定值,而是和显存、场景复杂度、是否开启阴影都有关系。解决思路是在 Blender 里减面时使用 Planar Decimate 模式,这种模式只删除完全平坦区域的面片,能最大限度保留坡度和坎地细节。另外,在 Lumion 里把地形模型的阴影距离调低,阴影质量从 Ultra 降到 High,肉眼基本看不出差别,但帧率能回升很多。
6. 把仿真地形做真的几个细节技巧:水面、地表材质与自检验收
地形模型进了 Lumion,工作还没有结束。仿真地形和渲染图片之间还差几个细节,其中我认为最关键的是水面高度和地表材质。
先做水面。在 Lumion 里新建一个水体对象,把它的高度位置和 DEM 上的水域水面标高高对齐。这个标高不能凭肉眼在场景里拖,而要回到 QGIS 里用栅格计算器统计水面边界的平均高程。如果做的是河流,就用河流中心线上的若干高程点取平均值;如果做的是湖泊,就取湖岸闭合线的高程中位数。得到数值后,在 Lumion 里直接把水面的 Z 值改成这个数字,再微调 0.1 到 0.3 米作为岸线淹没余量。这样水体和岸边的衔接才会自然,不会出现水悬在半山腰的怪象。
地表材质也值得单独调一下。Lumion 自带的地形材质默认带较强的高光,导致在太阳底下草地像涂了一层油。我会把草地的 Roughness 拉到 0.8 以上,Specular 调到 0.2 以下,让整体表面呈哑光状态。对裸露土坡和岩石表面,不建议直接用纯色贴图,最好叠加一层 Blender 里导出时保留的 AO 贴图,通过 Overlay 混合会让地形更有层次感。
| 材质类别 | Roughness | Specular | 备注 |
|---|---|---|---|
| 草地 | 0.8 | 0.2 | 避免油光感 |
| 裸土 | 0.9 | 0.1 | 叠加法线贴图增强细节 |
| 岩石 | 0.7 | 0.3 | 配合高分辨率置换贴图 |
| 沥青/道路 | 0.5 | 0.5 | 控制整体反射 |
最后做一步自检:在 Lumion 里开启真实太阳角度,选择一个已知日照方向的时间,然后把模型阴影的长短和实际场地照片对比。如果阴影方向偏差太大,说明模型朝向没有对齐北方。再放一两个等高线特征点对应的临时物体,检查它们是否贴在地形表面。这两项检查都通过之后,这个仿真地形才算是真正能拿出去见人的。
我自己现在的习惯是:每做一个新项目都把 QGIS 的处理流程保存成项目模板,下一次换一块地只需要加载新 DEM 和新的裁剪边界。回到开头那个丘陵项目,我们后来用这套流程连续做了三期方案,再没有哪一次是手工推地形推到晚上十一点的。希望帮到你。
本文还有配套的精品资源,点击获取