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生成三维模型拍摄的照片能够变成三维模型核心在于计算机视觉中的运动恢复结构SfMStructure from Motion与多视图立体匹配MVSMulti-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/pLyVO6.2导入Unreal Engine 5Unreal 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模型材质添加与效果展示到这里通过无人机拍摄扫描到构建模型及纹理再到模型减面最后导出到网页端或虚幻引擎的全流程就介绍完啦~如果想要真正学会真诚建议大家行动起来先以自己身边的一栋建筑或某个小场景为对象拍它百八十张照片开始。永远不要等准备好了再行动先动起来或许你会发现学习更加充满趣味。有问题或建议欢迎大家在评论区留言~