【Mesh Lab】通过MeshLab轻量化网格模型

2025-01-10

MeshLab

官网

https://www.meshlab.net/

About this Project — PyMeshLab 用户文档

Mesh Lab 介绍

MMesh Lab是一款免费且开源的3D模型处理软件,它主要用于查看、编辑和处理3D三角网格模型。Mesh Lab提供了广泛的功能,适用于专业人士和爱好者,尤其是在3D打印、逆向工程、考古学、文化遗产数字化等领域有着广泛的应用。

主要功能包括:

  • 模型查看:可以加载各种格式的3D模型,如STL, OBJ, PLY等,并允许用户从不同角度查看模型。

  • 模型编辑:提供了一系列工具来编辑模型,包括但不限于顶点移动、边界的平滑、孔洞填充等。

  • 模型清理:可以帮助清理扫描数据中的噪声,例如去除多余的顶点和面。

  • 模型修复:能够自动或手动修复模型中的问题,比如闭合模型以确保其防水性,这对于3D打印非常重要。

  • 纹理和颜色应用:支持将纹理和颜色应用于模型表面。

  • 格式转换:可以将模型从一种格式转换为另一种格式,便于与其他软件兼容。

  • 测量工具:提供了距离、角度等测量工具,方便进行精确的尺寸校验。

使用场景:

  • 3D打印准备:Mesh Lab可以帮助用户准备模型以进行3D打印,比如修复模型中的小错误、确保模型是封闭的等。

  • 逆向工程:可以用来处理从3D扫描得到的数据,清理和优化这些数据以便进一步的分析或制造。

  • 文化遗产数字化:对于考古学家和历史学家来说,Mesh Lab是一个强大的工具,可用于创建和编辑古迹或文物的3D模型。

模型轻量化操作

一级菜单

二级菜单↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

(右侧注释)简化:二次边塌陷抽取(带纹理)

使用基于二次曲面的边折叠策略简化纹理网格保留UV参数化。灵感来自QSLIM表面

简化算法,该算法成为网格简化的工业标准方法。

参见:

米(meter的缩写))加兰和赫克伯特

使用二次误差矩阵简化带有颜色和纹理的表面(pdf)

IEEE可视化会议录98。


用以上命令打开可以保持UV的轻量化对话框↓↓↓↓↓↓↓↓↓

参数设置部分由上到下(仅供参考):

1. 目标面数


2. 百分比减少(0..1)

"如果此参数不为零,则表示期望的最终网格大小为初始网格大小的特定百分比。"

在使用MeshLab时,这个设置通常用于控制简化或细化网格的过程中,目标网格相对于原始网格的大小比例。例如,如果您设置此参数为50%,则处理后的网格将大约只有原始网格一半的多边形数量。

3. 质量阈值

"用于惩罚不良形状面的质量阈值。 该值的范围是 [0..1],其中 0 表示接受任何类型的面(无惩罚),0.5 则表示对质量低于此阈值的面进行惩罚。"

更详细的解释可以是:

"这个参数设置了一个质量阈值,用来确定哪些面由于其形状质量差而应该受到惩罚。阈值的取值范围是从0到1。如果设置为0,则表示不惩罚任何面,即所有面都会被接受,不论其质量如何。如果设置为0.5或更高,则表示只惩罚那些质量评分低于此值的面。通常,这用于过滤或修正网格中的低质量几何结构,如过尖锐的三角形或其他可能影响渲染效果或物理模拟准确性的形状。"

在MeshLab中,这样的设置对于确保网格模型的质量和优化是非常有用的,因为它可以帮助用户避免使用那些可能会导致视觉伪影或者计算问题的不良面。

4. 纹理权重

"为每个额外的纹理坐标 为每个(选定的) 顶点添加的额外权重"

更详细的解释可以是:

"此参数定义了为每个选定顶点的额外纹理坐标集分配的附加权重。在3D模型中,纹理坐标用于映射图像纹理到模型表面。当一个模型具有多个UV映射(即多套纹理坐标)时,这个参数可以用来增加这些额外UV集的重要性或影响。例如,在进行某些类型的优化或处理时,可能需要考虑不同UV集对结果的影响程度,这时就可以通过调整这个权重值来实现。"

在实际应用中,这个设置可以帮助用户更精细地控制在处理包含多个纹理坐标集的复杂模型时,各个纹理坐标集如何影响最终的结果。这在需要确保特定纹理映射得到优先处理或保持其细节的情况下特别有用。

5. 保留网格的边界

"简化过程会尽量不破坏 网格边界"

更详细的解释可以是:

"在进行网格简化的过程中,算法会尽力保持网格的边界不变。这意味着在减少多边形数量以降低模型复杂度的同时,会特别注意保留原始模型的边缘特征,确保这些边界不会因为简化操作而被移除或改变。这对于维持模型的外观完整性非常重要,特别是在处理具有开放边界或特定轮廓的模型时。"

这种设置对于需要保持模型特定几何特征的应用场景非常有用,比如在简化一个具有开放边缘的模型时,用户可能希望确保这些边缘保持原样,以维持模型的关键视觉特征或功能性边界。

6. 边界保持权重

"在简化过程中边界的相对重要性。 默认值 (1.0) 表示边界与其他部分具有相同的权重。 大于 1.0 的值会增加边界的权重, 从而减少对边界顶点的移除。 允许的值范围是 (0, +∞)。"

更详细的解释可以是:

"此参数决定了在进行网格简化时,网格边界相对于其他内部结构的重要性。默认情况下,当该参数设置为1.0时,意味着在简化过程中边界和非边界部分被同等对待。

如果将这个值设置为大于1.0,那么边界区域将获得更高的保护级别,在简化过程中会尽量保留更多的边界顶点,以维持原始边界形状。这有助于确保模型的开放边缘或轮廓线在简化后仍然清晰可见,不会因为顶点的过度移除而变得模糊或变形。

相反,如果将值设为小于1.0(但大于0),则表示边界在简化过程中不那么重要,可能会有更多的边界顶点被移除,导致简化后的模型边界可能不如原来清晰。

允许的值范围是从0到正无穷大,用户可以根据具体需求调整此参数,以控制简化过程对边界的影响程度。"

这种设置对于需要保持特定边界特征的3D模型特别有用,比如建筑模型、机械零件或者任何有明确轮廓需要保留的对象。

7. 简化顶点的最佳位置

"每个折叠的顶点会被放置在最小化二次误差(quadric error)的位置。 在非常平坦的区域中,这种方法可能会失败(导致产生不良尖刺)。 如果此功能被禁用,则边会被折叠到两个原始顶点中的一个上, 最终的网格将由原始顶点的一个子集组成。"

更详细的解释可以是:

"在网格简化过程中,为了减少多边形数量,一些顶点会通过折叠的方式合并。通常情况下,这些顶点会被移动到一个能够最小化二次误差的位置,这有助于保持模型的整体形状和细节。然而,在处理非常平坦的区域时,这种优化方法可能会出现问题,例如可能产生不自然的尖锐突起或‘尖刺’,影响模型质量。

当这个优化策略被禁用时,系统将不会尝试寻找最优位置来放置折叠后的顶点。相反,它会简单地将边折叠到其两个原始顶点之一上。这意味着最终简化后的网格将仅包含原始顶点的一部分,而不会引入新的顶点位置。这样的做法虽然简化了计算,但可能会导致简化后的模型不如使用二次误差最小化策略时那样保真。"

这种设置允许用户在简化质量和计算复杂度之间做出权衡。对于某些应用,如快速预览或实时渲染,可能更倾向于禁用该功能以提高性能;而对于需要高质量输出的应用,则可能更愿意启用二次误差最小化策略,即使它可能导致更长的处理时间和更大的计算量。

8. 保持法线

"尝试避免面翻转效果,并尽量 保持表面的原始朝向"

更详细的解释可以是:

"在进行网格简化或其他处理操作时,该选项会尽力防止面的方向发生意外变化(即面翻转),并尽可能地维持表面的原始朝向。面翻转是指在处理过程中,某个面的法线方向发生了反转,这可能会导致渲染时出现视觉异常,如表面看起来像是‘内侧’被显示了出来。

启用此功能有助于确保模型在处理后仍然能够正确显示,特别是在需要保持特定表面外观的应用场景中。例如,在动画制作或虚拟现实应用中,保持正确的表面朝向对于确保模型与环境和其他对象正确交互非常重要。

通过尽量保持表面的原始朝向,可以减少由于面翻转引起的问题,从而保证模型的质量和一致性。这对于维持网格的视觉连贯性和物理属性(如碰撞检测、光照效果等)尤其重要。"

这种设置对于需要维护模型表面特性的应用非常有用,比如当处理具有明确内外边界的封闭模型,或者当模型的表面属性(如纹理映射、材质应用)依赖于其正确的朝向时。

9. 平面简化开启

"添加额外的简化约束, 以提高网格平面部分的简化质量。"

更详细的解释可以是:

"在进行网格简化时,可以通过添加额外的约束条件来特别关注并优化网格中平面部分的质量。这意味着在简化过程中,算法会更加谨慎地处理那些被认为是平面的区域,确保这些部分在简化后仍然保持平滑和平整,避免出现不必要的几何失真或细节丢失。

这些额外的约束可以帮助保护平面区域的关键特征,例如建筑物模型中的墙壁、地板等大面积的平坦表面。通过确保这些区域的高质量简化,可以维持模型的视觉准确性和功能性,特别是在需要精确表示平面结构的应用场景中,如建筑可视化、工程设计等。

具体来说,这样的约束可能会限制顶点折叠的方式,确保不会因为简化而引入新的几何错误,或者会优先考虑保留平面区域的原始形状和边界,从而得到一个既简化又不失真的网格模型。"

这种设置对于需要保持特定平面结构完整性的3D模型非常重要,它有助于确保简化后的模型仍然能够忠实反映原始模型的平面特征,而不影响其整体质量和用途。

10. 仅简化选定的面

"简化操作仅应用于选定的面集。 请注意目标面数!"

更详细的解释可以是:

"在进行网格简化时,此设置确保简化操作只影响用户选定的那一组面,而不是整个网格。这意味着您可以有选择性地对模型的特定部分进行简化,而保留其他部分不变。这对于局部优化网格或保持某些区域的高细节度非常有用。

重要提示: 在执行简化之前,请务必注意您设定的目标面数。目标面数是指简化后该选定区域应该包含的面的数量。如果设定的目标面数过低,可能会导致过度简化,从而丢失重要的几何细节;相反,如果目标面数过高,则可能无法达到预期的简化效果。因此,合理设定目标面数对于获得理想的简化结果至关重要。"

这种设置为用户提供了一种灵活的方式来控制哪些部分需要简化以及简化的程度,同时提醒用户在设置目标面数时要谨慎,以避免不必要的细节丢失或简化不足。这对于处理复杂模型、提高性能或者准备用于特定应用(如实时渲染或3D打印)的模型时特别有用。


通过 Python 脚本使用 Meshlab

MeshLab 可批量导入网格,但是没有批量导出。(至少暂时没找到)可能需要额外写程序

在 MeshLab 中使用 Python 脚本是通过 PyMeshLab 实现的,PyMeshLab 是一个用于与 MeshLab 交互的 Python 库。它允许用户以编程方式应用 MeshLab 的滤镜和功能,而无需手动操作 MeshLab GUI。

PyMeshLab 安装和配置指南-CSDN博客

安装 PyMeshLab

首先,您需要安装 PyMeshLab 库。可以通过 pip 安装最新版本:

pip install pymeshlab

使用 PyMeshLab 编写脚本

接下来,您可以编写 Python 脚本来加载、处理和保存3D网格。以下是一个简单的示例,展示了如何加载一个网格文件,应用简化滤镜,并将结果保存到新文件中。

确保您已经安装了 PyMeshLab 并且 Python 环境配置正确后,可以通过命令行或任何 Python IDE 来运行相关脚本。


一些代码在此链接中:

【金山文档 | WPS云文档】 通过“Mesh Lab”对模型进行轻量化

https://kdocs.cn/l/cqjkb9Zgbw9j

【语雀】通过“Mesh Lab”对模型进行轻量化

https://www.yuque.com/orange_shawn/bxzspq/xlozlyyrgp5b3ucf



减面效果参考



阅读101
分享
写评论...