当前位置: > 游戏模型设计 > 游戏场景模型 >

Meshroom教程:初学者的网络空间
栏目分类:游戏场景模型   发布日期:2019年05月11日 10:17:19   浏览次数:


目标

在本教程中,我们将解释如何使用Meshroom从一组照片中自动创建3D模型。在指定系统要求和安装后,我们将从摄影测量的图像采集方面提出一些建议。然后,我们将概述Meshroom UI,并通过创建项目和启动3D重建过程来介绍基础知识。之后,我们将看到如何通过应用自动抽取操作直接在Meshroom中对结果网格进行后处理,并继续学习如何重新构造修改后的网格。我们将通过展示如何在Meshroom中迭代地使用所有这些来总结。

最后,我们将提供一些有关将3D模型上传到Sketchfab的提示,并总结有用的链接以获取更多信息。

第0步 - 系统要求和安装

Meshroom软件版本是独立的便携包。它们被上传到项目的GitHub页面上要在计算机上使用Meshroom,只需为您的操作系统下载适当的版本(支持Windows和Linux),解压缩存档并启动Meshroom可执行文件。

关于硬件,需要Nvidia GPU(计算能力至少为2.0),用于密集的高质量网格生成。建议使用32GB的RAM进行网格划分,但如果不符合此要求,则可以调整参数。

Meshroom在允许的MPLv2许可下以开源方式发布。

第1步 - 图像采集

拍摄质量是该过程中最重要和最具挑战性的部分。它对最终网格的质量产生巨大影响。

拍摄总是妥协,以适应项目的目标和限制:场景大小,材料属性,纹理质量,拍摄时间,光量,变化的光线或物体,相机设备的质量和设置。

主要目标是获得没有运动模糊且没有深度模糊的清晰图像。因此,您应该使用三脚架或快门速度来避免运动模糊,减小光圈(高f值)以获得较大的景深,并降低ISO以最大限度地降低噪点。

第2步 - Meshroom概念和UI概述

Meshroom被设想用于解决两个主要用例:

  • 以最少的用户操作轻松从多个图像中获取3D模型。
  • 为高级用户(例如:专家图形艺术家,研究人员)提供可以根据他们的创意和/或技术需求进行修改的解决方案。

出于这个原因,Meshroom依赖于节点系统,该系统将所有摄影测量管道步骤暴露为具有参数的节点。上面的高级界面允许任何人使用Meshroom而无需修改任何内容。

Meshroom用户界面

第3步 - 基本工作流程

对于第一步,我们将仅使用高级UI。让我们使用“文件>另存为...”将这个新项目保存在我们的磁盘上。

由Meshroom计算的所有数据将最终位于此项目文件旁边的“MeshroomCache”文件夹中。请注意,项目是可移植的:您可以随后移动“.mg”文件及其“MeshroomCache”文件夹。缓存位置显示在窗口底部的状态栏中。

接下来,我们将图像简单地放入左侧的“图像”区域中,将图像导入到该项目中。Meshroom分析其元数据并设置场景。

Meshroom依靠相机传感器数据库来确定相机内部参数并将它们组合在一起。如果您的图像缺少元数据和/或使用Meshroom未知的设备拍摄,则会显示一个明确的警告来解释该问题。在所有情况下,流程都会继续,但结果可能会降低。

完成后,我们可以按“开始”按钮并等待计算完成。彩色进度条有助于跟踪流程中每个步骤的进度:

  • 绿色:已经计算好了
  • 橙色:正在计算中
  • 蓝色:提交计算
  • 红色:出错了

第4步 - 可视化并导出结果

通用摄影测量管道可以看作有两个主要步骤:

  • SfM:运动结构(稀疏重建)
    • 使用所有摄像机的姿势(位置和方向)和内部校准来推断刚性场景结构(3D点)。
    • 结果是一组具有稀疏点云的校准相机(采用Alembic文件格式)。
  • MVS:MultiView-Stereo(密集重建)
    • 使用来自Motion-from-Motion的校准相机生成密集的几何表面。
    • 最终结果是纹理网格(OBJ文件格式,带有相应的MTL和纹理文件)。

一旦“Motion-from-Motion”的结果可用,Meshroom就会自动加载它。此时,我们可以看到哪些摄像机已在“图像”面板中成功重建(带有绿色摄像机图标)并可视化场景的3D结构。我们还可以在“图像”面板中选择图像,以在3D查看器中查看相应的相机,反之亦然。

图像选择在“图像”和“3D查看器”面板之间同步。

3D Viewer的交互大致类似于Sketchfab的:

  • 单击并移动以围绕视图中心旋转
  • 双击几何体(点云或网格)以定义视图中心
    • 替代方案:Ctrl +单击
  • 中鼠点击进行平移
    • 替代方案:Shift + Click
  • 向上/向下滚轮放大/缩小
    • 替代方案:Alt +右键单击并向左/向右移动

计算完整个管道后,3D查看器底部的“加载模型”按钮可以加载和可视化纹理化的3D网格。

从3D查看器可视化和访问磁盘上的媒体文件

在该过程结束时没有导出步骤:生成的文件已在磁盘上可用。您可以右键单击媒体并选择“打开包含文件夹”以检索它们。通过在“Texturing”上执行此操作,我们可以访问包含OBJ和纹理文件的文件夹。

第5步 - 后处理:网格简化

现在让我们看看如何使用节点系统向这个默认管道添加新进程。此步骤的目标是使用自动网格抽取创建模型的低多边形版本。

让我们转到“图形编辑器”并右键单击空白区域以打开节点创建菜单。从那里,我们选择“MeshDecimate”:这将在图形中创建一个新节点。现在,我们需要为它提供高多边形网格作为输入。让我们通过单击并从MeshFiltering.output拖动到MeshDecimate.input来创建连接。我们现在可以选择MeshDecimate节点并调整参数以满足我们的需求,例如,通过将最大顶点数设置为100,000。要开始计算,请按主“开始”按钮,或右键单击特定节点并选择“计算”。

创建MeshDecimate节点,连接它,调整参数并开始计算

默认情况下,一旦计算开始,图形将变为只读,以避免任何会损害计划过程的修改。

只需双击即可在3D查看器中显示生成3D媒体(点云或网格)的每个节点。一旦计算出MeshDecimate节点,就这样做。

  • 双击节点以在3D查看器中将其可视化。如果结果尚未计算,则一旦可用,它将自动加载。
  • Ctrl +单击媒体的可见性切换以仅显示
    图表编辑器中的此媒体备选:Ctrl + DoubleClick在节点上
  •  

第6步 - 在Retopology之后重新构建

对原始的高多边形网格进行变换只是创建定制3D模型的第一步。现在,让我们看看如何重新构造这个几何体。

让我们回到图表编辑器并执行以下操作:

  • 右键单击 “纹理”节点>“ 复制”
  • 右键单击连接MeshFiltering.output⇒Texturing2.inputMesh> 删除
  • 创建从MeshDecimate.output到Texturing2.inputMesh的连接

通过这样做,我们设置了一个纹理化过程,该过程将使用抽取的结果作为输入几何。我们现在可以根据需要调整纹理参数,然后开始计算。

使用第二个纹理节点重新构造抽取的网格

外部retopology和自定义UV
此设置还可用于重新投影在Meshroom外部修改过的网格上的纹理(例如:retopology / unwrap)。唯一的限制是与原始重建保持在相同的3D空间中,因此不会改变比例或方向。

然后,我们不是将它连接到MeshDecimate.output,而是直接从节点“属性编辑器”(Attribute Editor)中的Texturing2.inputMesh参数中编写网格的文件路径。如果此网格已具有UV坐标,则将使用它们。否则,它将根据所选的“展开方法”生成新的UV。

纹理还接受外部网格的路径

第7步 - 从SfM起草Meshing

MVS包括为每个摄像机创建深度贴图,将它们合并在一起并使用这些大量信息来创建曲面。这些深度图的生成目前是流水线中计算密集度最高的部分,需要支持CUDA的GPU。我们现在将解释如何直接从SfM输出生成快速粗糙的网格,以便快速预览3D模型。为此,我们将再次使用节点系统。

让我们回到默认管道并执行以下操作:

  • 右键单击 DepthMap> 从此处复制节点(“ >> ”图标)以在图形中创建分支并保持以前的结果可用。
    • 替代方案:Alt +单击节点
  • 选择并删除(右键点击 > 删除节点德尔)深度图和DepthMapFilter
  • 连接PrepareDenseScene.input⇒Meshing.input
  • 连接PrepareDenseScene.output⇒Texturing.inputImages

从StructureFromMotion设置草稿网格化

使用此快捷方式,网格划分直接使用来自SfM的3D点,这绕过了计算密集型步骤,并大大加快了管道末端的计算速度。这也提供了一种在没有Nvidia GPU的情况下获得草图网格的解决方案。

缺点是这种技术只能在高度纹理化的数据集上工作,这些数据集可以在稀疏点云中产生足够的点。在所有情况下,它都不会达到默认管道的质量和精度水平,但在采集期间生成预览或在照片建模之前获得3D测量非常有用。

第8步 - 迭代地工作

我们现在总结一下,通过解释我们目前学到的知识如何用于迭代工作并从数据集中获得最佳结果。

1.首先计算和分析Motion-from-Motion

这是在开始剩余的过程之前检查重建是否可能成功的最佳方法(右键单击 > 在StructureFromMotion节点上计算)。重建摄像机的数量和稀疏点云的纵横比/密度是很好的指标。在管道的早期阶段,有几种策略可以帮助改善结果:

  • 通过在FeatureExtraction节点上将“Describer Preset”设置为“high”(或者对于小数据集甚至是“ultra”),从输入图像中提取更多关键点。
  • 通过在FeatureExtraction,FeatureMatching和StructureFromMotion节点上的“描述符类型”中选中“akaze”来提取多种类型的关键点。

2.使用SfM的草图网格来调整参数

通过提供密集重建的快速预览,网格化SfM输出还可以帮助配置标准网格化过程的参数。我们来看看这个例子:

使用默认参数,我们可以从Meshing2预览重建区域包含我们并不真正想要的环境的某些部分。通过增加“SfM空间估计的最小观测角度”参数,我们排除了强角度约束(Meshing3不支持的点这会导致在过程结束时没有背景元素的较窄区域(Meshing4与默认网格划分)。

3.试验参数,创建变体并比较结果

节点系统的主要优点之一是能够在管道中创建变化并进行比较。我们可以复制它(或整个分支),处理此副本并比较变体以保持最佳版本,而不是更改已经计算并使其无效的节点上的参数。

除了我们在本教程中已经介绍过的内容之外,Meshroom Wiki还详细介绍了驱动每个步骤的精度和性能的最有用的参数

相关热词: Meshroom

相关内容
     
游戏模型设计 3dmax模型制作 次世代模型 游戏模型百科 游戏模型贴图