在将纹理应用到threejs模型时出现奇怪的线条(“接缝”)

4
我正在将从.ctm文件导入的模型渲染到threejs v71中,并使用带有map的MeshBasicMaterial添加纹理。
原始模型是在Agisoft Photoscan中制作的,导出为.obj文件,然后使用官方的OpenCTM查看器程序将其转换为OpenCTM格式。 .ctm模型本身在这里
虽然看起来正确,但在加载.ctm文件时纹理上出现了奇怪的“接缝”。而使用.obj在three.js中加载没有这些问题。这些是什么,如何去掉它们?
这是一个截图:

enter image description here

这些“接缝”在纹理文件中不存在:

enter image description here

更新:我注意到在ctm查看器中查看.ctm文件时也能看到接缝线,因此这可能是一个OpenCtm转换问题,而不是threejs加载问题。

3个回答

2
令我烦恼的是,这似乎是OpenCTM中一个长期存在的错误。
其他答案可能没有复现问题描述的情况。
编辑:我现在完全理解了这个问题,并有一个解决方法。问题在于大多数程序(Photoscan、Blender)具有“按循环”顶点而不是实际的“按顶点”纹理。这意味着当一个顶点被两个多边形共享时,该顶点可以有多个UV坐标。CTM每个顶点只能有一个UV坐标,这就是在纹理接缝处出现问题的原因。
我的Blender解决方法是:
  • 从岛屿上的接缝
  • 选择接缝上的边缘,选择相似-->接缝。现在所有接缝都应该被选中了
  • 网格-->边缘-->边缘分离
  • 导出到.obj,使用ctmviewer.exe导入并导出到.ctm。
如果你仔细看,接缝仍然是可见的,但不再是明显的多色条带。

可见的接缝很可能是由于硬边缘造成的。如果这是一个实际的边缘分裂,那么在该点还会得到两个独立的法线,从而导致着色时出现接缝。 - pailhead

0
或者你可以直接从纹理图像文件中删除Alpha通道(或在导出时使用JPG格式)。

我在导出时使用JPG格式。你似乎在描述一个不同的问题(你是否在使用CTM?)。 - foobarbecue

0
我在Agisoft Photoscan的模型/纹理上遇到了同样的问题,于是我在Photoshop中打开了纹理,并注意到在所有纹理补丁之间都有透明度。我使用内容感知填充填补了所有空隙,并将纹理保存为没有图层的.tif文件。这对我解决了问题。

我的纹理文件中没有透明度。你似乎在描述一个不同的问题(你是否使用了CTM?)。 - foobarbecue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接