顶点颜色到UV地图 - >重新网格 - >纹理映射

时间:2016-05-31 08:20:33

标签: mesh texture-mapping cgal uv-mapping texture-atlas

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

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

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

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

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

修改

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

我附上了网格的捕获。

enter image description here

2 个答案:

答案 0 :(得分:2)

我建议使用以下4个步骤:

  • 第1步:重新网格

对于这种来自计算机视觉的网格,你需要一个对洞,重叠,瘦三角形等具有鲁棒性的remesher ......你可以使用我的GEOGRAM软件[1]。使用以下命令:

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

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

  • 第2步:细分重新网格

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

  • 第3步:参数化

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

  • 第4步:烘焙纹理

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

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

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

[2] graphite: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

答案 1 :(得分:0)

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

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

我的网站上有一个有关此工作流程的示例,示例图像:Decimation of texture mesh。 或者,您可以参考my site了解详情。