1

我有一个高分辨率房间的多边形网格,我想提取顶点颜色信息并将它们映射为 UV 贴图,这样我就可以生成房间的纹理图集。

之后,我想重新网格化模型以减少多边形数量并将高分辨率纹理以较低分辨率映射到新网格上。

到目前为止,我已经找到了在 Blender 中执行此操作的链接,但我想以编程方式执行此操作。你知道任何可以帮助我完成任务的库/代码吗?

我想首先我必须分割模型(法线标准可能会有所帮助)然后切割每个网格段,所以只有这样我才能对其进行参数化。关于参数化,LSCM似乎为简单模型提供了很好的结果。一旦有了纹理图集,我认为问题就变成了纹理映射的简单任务。

我的主要问题是分割和网格切割。我为此目的使用CGAL 库,但是该算法太简单而无法切割复杂的形状。关于更好的分割/切割算法的任何提示,该算法对房间大小的模型表现良好?

编辑:

网格包含一个用 RGB-D 相机重建的房间,有 250 万个顶点和 470 万个面。关键是提取高分辨率纹理,重新网格化模型以减少多边形数量,然后将纹理重新映射到它上面。它不是一个封闭的网格,并且由于重建而存在孔,所以我猜测我的任务是否根本无法完成。

我附上网格的捕获。

在此处输入图像描述

4

2 回答 2

4

我建议使用以下 4 步程序:

  • 第 1 步:重新网格化

对于来自计算机视觉的这种类型的网格,您需要一个对孔、重叠、窄三角形等具有鲁棒性的重新网格化器……您可以使用我的 GEOGRAM 软件 [1]。使用以下命令:

vorpalite my_input.obj my_output.obj pre=false post=false pts=30000

其中 30000 是所需点的数量(使其适应输入的复杂性)。注意:我正在停用预处理和后处理 (pre=false post=false),这可能会为这种类型的网格移除过多的网格部分。

  • 第2步:分割remesh

我最喜欢的方法是“变分形状近似”[3]。我喜欢它,因为它易于实现并且在大多数情况下都能给出合理的结果。

  • 第三步:参数化

除了我的 LSCM 方法之外,您还可以使用我们在 [4] 之后开发的 ABF++,这在大多数情况下会产生更好的结果。您也可以尝试 ARAP [5]。

  • 第4步:烘烤纹理

简化网格参数化后,您需要将原始网格中的颜色复制到新网格上。这意味着确定纹理的每个像素在 3D 中的位置,并在原始 3D 网格中找到最近的点。

在我的 Graphite 软件 [2] 中实现了分割、参数化和烘焙(使用旧版本 2.x,新版本 3.x 没有所有纹理功能)。

[1] 地理:http: //alice.loria.fr/software/geogram/doc/html/index.html

[2] 石墨:http ://alice.loria.fr/software/graphite/doc/html/

[3] 变分形状近似 (Cohen-Steiner, Alliez, Desbrun, SIGGRAPH 2004): http ://www.geometry.caltech.edu/pubs/CAD04.pdf

[4] ABF++:http ://alice.loria.fr/index.php/publications.html?redirect=1&Paper=ABF_plus_plus@2004

[5] ARAP:cs.harvard.edu/~sjg/papers/arap.pdf

于 2016-09-07T11:16:53.847 回答
1

为了减少多边形的数量,我更喜欢使用网格抽取。我推荐的工作流程:(输入:具有顶点颜色的高分辨率网格(mesh0))。

  1. 计算 mesh0 的 uv 坐标。
  2. 通过顶点颜色生成纹理图像(textureImage)。因此,您有一个纹理网格(带有 uv 坐标的网格 0,textureImage)。
  3. 对mesh0应用网格抽取,抽取应该考虑到uv坐标。

我在我的站点中有一个关于此工作流程的示例,示例图像:Decimation of texture mesh。或者您可以参考我的网站了解详细信息。

于 2019-05-20T01:38:08.547 回答