1摄影技术与硬件基础
在游玩《黑神话·悟空》的过程中,你是否沉浸在那精美又逼真的三维造景中呢?其实,这些场景的构建并不是哪位设计大师的神来之笔,而是现实生活中真实存在的巧夺天工,是一代代人智慧的结晶。而将这些现实中的亭台楼阁、雕塑佛像,转变为虚拟世界中三维模型的,正是基于实景扫描的三维建模技术。
无人机能以“上帝视角”快速获取地面难以触及的高精度、全覆盖影像数据,特别适合大范围、复杂地形或危险区域的自动化三维重建,是进行实景扫描的重要工具之一。无人机应用于三维建模,离不开“倾斜摄影”和“贴近摄影”技术。
“倾斜摄影”是指挂载摄像头的无人机从垂直及多个倾斜角度同步采集建模对象的影像,能为模型提供丰富的来自实体不同表面的纹理,从而高效构建出贴近真实空间分布和立面细节的立体实景三维网格模型。“贴近摄影”则是在倾斜摄影的基础上,依托高精度定位导航,让无人机紧贴目标表面进行超低空、定距仿射拍摄,专门针对建筑细部构造、地质节理分布等精细结构获取厘米乃至毫米级分辨率的影像。
(a) 有GPS信息的照片 | (b) 2. 无GPS信息的照片 |
图1.1拍摄照片包含GPS信息查看
因此,想通过无人机航拍技术进行对现实场景进行扫描建模,你需要的硬件基础有:
(1)一个可用于航拍,且拍摄照片含有地理位置信息的无人机(可右击照片、属性、详细信息查看,如图1所示);
(2)一台能满足3D建模需求的电脑(本人建模使用笔记本电脑,配置RTX4060独立显卡)。
特别注意,基于无人机实景扫描的三维建模技术不适用于满布玻璃幕墙的建筑!
图1.2无人机实景扫描三维建模技术栈 |
本次扫描对象为安徽省合肥市包河区某仿古建筑,采用DJI Mini3无人机手动拍摄完成,总共拍摄照片778张。图2为本教程进行无人机建模的技术栈。
需要指出的是,DJI Mini3 Pro及其后续更高端产品均支持连续延时摄影,可每间隔2秒自动拍摄,如有需要,可在购买无人机时查看具体机型的功能介绍。
2实景拍摄教学
为了使得扫描模型的纹理质量更佳,确保在自然光线充足时段进行拍摄,天气以多云、阴天为宜,避免阳光曝晒导致扫描模型纹理过曝和背光面阴影明显。在拍摄开始前,确保无人机遥控器电量充足,最少准备三块满电电池以确保无人机续航。
扫描建筑实体时,采用自上而下,由整体到局部的拍摄方法。先将飞机悬停至建筑实体正上方,摄像头采用俯视视角正对屋顶,并通过自旋方式缓缓降落,期间连续按快门进行拍摄,效果如图1.1所示。
(a) 自旋下降拍摄第1张 | (b) 自旋下降拍摄第7张 |
(c) 自旋下降拍摄第14张 | (d) 自旋下降拍摄第22张 |
图2.1自旋下降连续拍摄
接下来, 采用倾斜摄影和贴近摄影相结合的方式,对建筑实施双层环绕航线:先进行整体环绕,获取建筑全貌及周边环境;再收缩航高,围绕顶层屋面及挑檐、二层阁楼及腰檐、一层柱廊及台基,依次进行自上而下的逐层环绕贴近拍摄,重点采集各层屋面瓦作、檐口椽飞、斗拱梁架及墙体立面等关键部位的细部纹理与几何信息。
(a) 整体大俯角拍摄 | (b) 整体小俯角拍摄 |
图2.2整体环绕倾斜拍摄
(a) 屋顶俯拍 | (b) 二层阁楼仰拍 |
(c) 二层阁楼平拍 | (d) 腰檐俯拍 |
(e) 一层柱廊平拍 | |
图2.3局部环绕倾斜拍摄
此外,若要使得建筑内部细节更加全面,在条件允许和确保安全的前提下,可将无人机飞到建筑内部进行环绕拍摄,拍摄视角包括仰视、平视、俯视。
(a) 屋脊细节 | (b) 屋檐细节 |
(c) 阁楼走廊 | (d) 阁楼屋顶 |
(e) 题字牌匾 | (f) 楼梯细节 |
(g) 柱廊屋面 | (h) 柱廊台基 |
(i) 腰檐细节 | |
图2.4环绕贴近拍摄
3生成三维模型
拍摄的照片能够变成三维模型,核心在于计算机视觉中的运动恢复结构(SfM,Structure from Motion)与多视图立体匹配(MVS,Multi-View Stereo)算法。简单来说,当无人机从不同位置和角度拍摄同一目标时,每张照片实际记录了三维空间中的点在二维平面上的投影位置。软件会首先自动识别并匹配各张照片之间相同的特征点,然后根据这些特征点在多张照片中的视差位移,反算出相机在每次拍摄时的精确空间位置和姿态,同时生成稀疏的点云骨架。在此基础上,多视图立体匹配算法会利用密集匹配技术,对每张照片中的每个像素进行深度估计,生成稠密的点云数据,进而通过表面重建算法将点云连接成由无数三角面片构成的网格模型。最后,软件将原始照片中的红绿蓝(RGB)颜色信息映射到对应的三角面片上,经过纹理贴图处理后,就形成了带有真实色彩和光影的实景三维模型。
Reality Capture是一款由Epic Games公司开发的一体化摄影测量软件,可实现将拍摄的照片或激光扫描数据自动、快速地转换成高精度三维模型。下载该软件需要首先在电脑上安装Epic Games Launcher客户端,首次使用需要先注册Epic账号,即可通过客户端免费下载安装使用。
图3.1 Epic Games Launcher客户端启动Reality Capture |
开始建模前,首先确保所有拍摄的照片均保存在一个文件夹中,然后打开Reality Capture界面,在WORKFLOW栏目下点击Add Folder,指定保存照片的文件夹,软件便会自动读取其中的所有照片。然后点击Align Images,软件就会自动提取全部或部分照片生成不同部件(Component)的点云,生成的不同部件及其所采用的照片数可在左侧边栏查看,若对一次生成的部件都不满意,可以再次点击Align Images重新生成,尽可能使软件采用更多的照片以提升点云对实体细部构造的描绘精度。
(a) 对齐图像 | |
(b) 生成部件 | (c) 初始点云轮廓 |
图3.2对齐图像生成点云 | |
在所有生成的部件中选出你认为最合适的那一个,此时上方菜单栏会多出SCENE 3D选项,下方包含VIEW和TOOLS两个栏目,软件生成的初始点云与其生成模型采用的坐标平面往往斜交,不利于模型的生成和移动,需在TOOLS栏目中选择Set Ground Plane进行点云地平面位置的调整,通过控制坐标球调整模型地平面与坐标轴水平面平行(或重合),再单击点云外围的渲染选区框,调整选区框的方向和范围,只有在选区框范围内的点云才会用于生成模型。调整过程中可借助VIEW栏目固定点云视图,提高调整效率,可选择的视图包括Perspective(透视视图)、Parallel(平行视图)、Top(顶视图)、Bottom(底视图)、Left(左视图)、Right(右视图)、Front(前视图)、Back(后视图)。
(a) 打开调整点云方位的开关 |
(b) 调整视图的辅助工具 |
(c) 调整完成示例 |
图3.3调整点云和渲染选区框
调整完成后,回到WORKFLOW栏目,点击Calculate Model右侧下拉箭头,选择Normal Quality,计算一般质量模型即可。这里不建议计算高质量模型,因为更高的质量意味着更高的面数,高质量模型的建模时间和三角面数是一般模型的几倍,后期亦需成倍时间执行平滑和减面。由于模型的生成同样依靠软件计算,其每次计算的结果亦会不尽相同,如有需要,可计算多个模型再从中选择,但这将花费额外的时间。
图3.4计算生成一般品质模型 |
计算完成的模型由一个个三角形面片组成,为了使得模型更加逼真,还需要给模型添加纹理(Texture)。栏目切换至MESH MODEL,首先点击Unwrap选项进行UV参数设置,UV参数是三维模型表面的“贴图坐标”,它决定了二维照片上的每一个像素点,应该贴在三维模型表面的哪个具体位置上。具体参数设置如图所示,建议大场景模型最大纹理数Maximal texture count可修改为100,小场景模型保持50即可。参数修改完成后,点击白色按钮Unwrap即可应用设置。接下来回到MESH MODEL菜单栏,点击Texture即可为模型“上色”。
(a) 先进行UV参数设置再生成纹理 |
(b) 推荐的UV参数设置 |
图3.5生成模型纹理
此时,我们拥有了一个由几亿个三角形面片组成的模型,和在此模型基础上绘制出的高精度纹理。为了在不牺牲贴图精度的同时提高模型加载速度,我们需要对模型进行减面操作。再次来到WORKFLOW工具栏,点击Simplify Tool,建议采用图中所示参数设置,将原本上亿面的模型减少至一千万面(10,000,000)。确定参数无误后,点击simplify即可开始减面。系统会将减面后的模型自动保存为Model2,接下来需要将原本在上亿面模型Model1下绘制出的高精度纹理烘培到Model2表面,首先在左侧边栏选中Model2,点击MESH MODEL栏目下的Unwrap,采用与上方相同的UV参数设置,应用设置后,来到SCENE 3D下的TOOLS栏,点击Texture Reprojection,设置源模型为Model1(高模),结果模型为Model2(低模),其他参数按照图中填写后,点击白色Reproject按钮即可开始纹理烘培。如此一来,我们便将原来的高精度纹理烘培到简化后的由一千万个三角面片组成的模型上,即保证了贴图质量,又减少了模型加载所需的性能。
(a) 找到减面工具Simplify Tool |
(b) 推荐的减面参数设置 |
图3.6高面数模型简化
(a) 设置简化模型的UV参数 |
(b) 打开纹理重投影设置菜单 |
(c) 推荐的纹理重投影参数设置 |
图3.7简化模型纹理烘培
4模型平滑与减面
为了对模型进一步简化,尽可能减少梁、柱、墙、板、地面等原本应当平整的表面上由于拍摄清晰度不够或阴影导致的噪点造成生成模型表面的无意义面数,同时也是防止模型表面的凹凸在UE5等引擎中开启光效后产生不符合实际的阴影,故需要通过ZBrush雕刻工具对模型表面进行平滑处理并进一步减面。
首先以.obj的格式从Reality Capture中导出模型。在SCENE 3D的TOOLS菜单栏下,点击Mesh and PointCloud即可按照不同的格式导出模型,注意在导出设置中必须选择同时导出信息文件,信息文件后缀名为.rcInfo,否则后期模型从ZBrush导入回Reality Capture会导致源文件的高模和处理后的低模位置对不上,无法进行后续的纹理重映射操作,纹理导出选择关闭,仅导出模型即可。
图4.1 Reality Capture导出模型 |
打开ZBrush在右上方找到“导入”按钮,点击导入.obj模型,导入完成后,按住鼠标左键在画板上拖拽出模型,点击左上方“Edit”进入编辑对象模式,即可开始用ZBrush的平滑工具对模型表面进行处理。表3.1展示了ZBrush的基本操作及其快捷键。
图4.2 ZBrush导入模型并进入编辑模式 |
表4.1 ZBrush编辑模式基本操作快捷键
基本操作 | 快捷键 |
旋转 | 按住鼠标右键 |
平移 | Alt + 鼠标右键 |
缩放 | Ctrl + 鼠标右键 |
雕刻笔刷 | 鼠标左键 |
平滑笔刷 | Shift + 鼠标左键 |
剪切笔刷 | Ctrl + Shift + 鼠标左键 |
遮罩 | Ctrl + 鼠标左键 |
撤销操作 | Ctrl + Z |
对模型表面平滑处理后,借助ZBrush内置插件对模型进行再次减面。在上方菜单栏选择Z插件,打开下拉菜单找到“抽取(减面)大师”,首先点击“全部预处理”对平滑后的模型进行计算,接下来通过“抽取百分比”的方式对模型进行减面,一般选择抽取20%至60%之间(即将原本一千万面的模型减面至二百万至六百万面之间),以不使模型结构变形、不丧失基本精度为前提,需要多次尝试找出兼顾模型精度和性能的抽取比例,建议简化后的模型文件大小不超过200MB。减面完成后,回到软件界面右上方找到“导入”按钮,同样以.obj格式导出模型。
图4.3模型减面与导出操作 |
5坐标对齐与纹理烘焙
为了将纹理重新映射到经过ZBrush简化后的新模型上,需要将新模型再次导入回原Reality Capture项目中。打开项目后,来到MESH MODEL菜单栏下,在最右侧找到Import Model按钮,即可将.obj格式的新模型导入。
图5.1 Reality Capture导入模型 |
导入后,首先检查新导入模型与原调整过后的点云轮廓是否重合,确保坐标对齐。然后即可按照与第3章相同的方式,在设置好新模型的UV参数后,以高模为源模型,新导入模型为结果模型,将高模纹理烘培到新模型表面,模型至此制作完成。
6模型展示与应用
本文介绍模型在Sketch-fab和Unreal Engine 5中的两种应用方式。前者通过网页端直接渲染模型,实现模型的快速查看,可向甲方或公众快速展示实景建模的数字化成果;后者则可依托Lumen全局光照、Nanite虚拟几何体和VR/AR功能,将模型置入动态场景中,实现虚拟漫游、天气变化模拟、飞鸟人群动态点缀等,更适用于文旅导览、遗产保护宣教或游戏级视觉体验开发。
6.1 Sketch-fab网页展示
在Reality Capture中构建的模型,可直接通过分享的方式上传至Sketch-fab。
(a) 点击Share进入上传页面 |
(b) 选择上传网站 |
(c) 使用API方式上传 |
(d) 填写账户API |
(e) 填写基本信息并上传 |
图6.1模型分享至Sketch-fab
这里附上本教程案例模型的网页展示链接,欢迎大家贡献访问量:Tower_model - 3D model by Eagle_of_Altair [586be7a] - SketchfabCreated in RealityCapture by Capturing Reality from 615 images. Also the first 3D model scanned by UAV. - Tower_model - 3D model by Eagle_of_Altairhttps://skfb.ly/pLyVO
6.2导入Unreal Engine 5
Unreal Engine 5是Epic Games开发的一款集实时3D渲染、物理模拟与交互逻辑于一体的全能型创作平台,可在Epic Games Launcher客户端中免费下载使用。其核心亮点在于凭借Nanite虚拟几何体和Lumen全动态全局光照两大突破性技术,能够将影视级的超精细模型与动态光影无缝融入实时环境,广泛应用于3A游戏开发、影视预演、建筑可视化及虚拟现实等跨领域创作中。本模型导入的Unreal Engine版本为5.5.4。首先在Reality Capture中通过SCENE 3D中TOOLS菜单栏下的Mesh and PointCloud选项将模型以.fbx格式导出,需要注意的是,为了在Unreal Engine中使用多象限贴图,保存纹理的贴图类型须选择UDIM,纹理贴图保存格式选.jpg,像素格式24-bit BGR,其余参数按照图5.2所示均设置一致方可保存。然后启动Unreal Engine,新建并打开项目,首先在上方编辑一栏进入项目设置,勾选“启用虚拟纹理支持”和“Nanite”并应用。随后,点击左下方“内容侧滑菜单”,在“内容”文件夹下新建一个空白文件夹并进入,进入后在下方空白区域单击鼠标右键,点击“导入到…”,选择从Reality Capture中导出的.fbx格式模型,导入时注意勾选“编译Nanite”,取消勾选“导入材质”和“导入纹理”。然后按照同样的方式将保存为.jpg图片的纹理进行导入,导入时只需点击第一张图片,软件会自动识别文件夹中存在的其他纹理图片并全部导入。接下来再次单击鼠标右键,创建一个新材质球并自主重命名,然后双击这个材质,打开工作流编辑界面,将导入的纹理拖入工作流,并将纹理的“RGB”与材质球的“基础颜色”接口相连,即可将导入的纹理应用到新建的材质球中。然后来到界面上方,打开建模模式,在“属性”菜单中找到并打开“编辑材质”,首先点击材质右侧删除标识清空所有数组元素,然后单击添加元素,通过输入名称搜索包含导入纹理的新建材质球并添加。下一步在选项编辑栏中点击“全选”按钮,选中模型的所有三角面片,紧接着点击材质编辑中的“指定激活材质”,最后点击画面正下方的“接受”以应用材质更改,待加载完毕后,模型及其纹理就成功导入Unreal Engine中了。
图6.2 Reality Capture导出.fbx模型参数设置 |
(a) 打开项目设置 |
(b) 启用虚拟纹理并设置相关参数 |
(c) 启用Nanite |
图6.3 Unreal Engine初始设置
(a) 导入方式 |
(b) 勾选编译Nanite |
(c) 不勾选导入材质和导入纹理 |
图6.4模型导入
(a) 导入纹理(入口与导入模型相同) |
(b) 创建材质球 |
图6.5纹理导入与材质创建
(a) 进入建模模式 |
(b) 打开编辑材质 |
(c) 打开编辑材质 |
(d) 导入模型最终效果 |
图6.6模型材质添加与效果展示
到这里,通过无人机拍摄扫描到构建模型及纹理再到模型减面最后导出到网页端或虚幻引擎的全流程就介绍完啦~如果想要真正学会,真诚建议大家行动起来,先以自己身边的一栋建筑或某个小场景为对象,拍它百八十张照片开始。永远不要等准备好了再行动,先动起来,或许你会发现学习更加充满趣味。
有问题或建议,欢迎大家在评论区留言~