iOS SceneKit 中的纹理接缝

8
我在SceneKit中应用纹理到球体上时,发现有时会出现接缝的情况。这种情况总是出现在球体的“后面”,也就是纹理的两个边缘相遇的地方。看起来好像纹理没有完全连接在一起,你可以透过这条薄线看到背景。这个问题似乎在所有设备和最近的iOS版本中都存在。我的实验表明,纹理的分辨率似乎是一个因素,但我还没有确定它的影响。
我附上了一张截图以说明这个问题,在白色背景下更容易看到,但接缝并不是白色的,只是允许背景显示出来: Planet Seam 有人知道为什么SceneKit会以这种方式渲染纹理吗?我的实现相当简单,只是创建一个球体和一个材质,并将漫反射和法线贴图应用于它。以下是我的代码:
// create planet
SCNNode *baseNode = [SCNNode node];
[baseNode setName:name];

// Planet
SCNSphere *planet = [SCNSphere sphereWithRadius:5];
SCNNode *planetNode = [SCNNode nodeWithGeometry:planet];
[planetNode setName:@"planetNode"];
[baseNode addChildNode:planetNode];

SCNMaterial *material = [SCNMaterial material];
material.shininess = 1;
material.normal.intensity = 0.5;
material.normal.contents = normalMap;
material.diffuse.contents = diffuseMap;

planetNode.geometry.materials = @[material];

有没有人经历过这个“接缝”出现的原因,并且我该如何去除它呢?我的纹理通常是1000x500或2048x1024,具体取决于情况,同时在这两种分辨率下都会出现这个接缝。是否存在SceneKit纹理的理想分辨率,或者有什么公认的可能导致这种情况的原因吗?


1
我快速查看了一下,无法复现你所看到的情况。我从这里获取了一些月球贴图,甚至将它们重采样为1000x500,但是无济于事(因为它们完好无损)。你的纹理是否有一行/列透明像素? - lock
@lock 不是的,但我在代码中动态调整纹理大小(在旧设备和较慢设备上降低大小/质量以减少内存压力),所以可能是那里出现了问题。我会找到这个问题并看看能找到什么解决方法,谢谢。 - Nerrolken
我也无法重现这个问题。你能否上传你的测试项目? - Hashmat Khalil
1
我也遇到了这个问题,后来发现当我的材料大小为2513.274170乘以200.000000时,我可以看到类似的接缝。当我将其四舍五入为2500乘以200时,接缝消失了。 - Damian Martyniuk
1个回答

1
答案最终变得让人沮丧地简单:我为了质量原因重新调整了纹理的比例,而这行代码是分辨率的小数结果,例如1025.25f * 2048.5f。在缩放纹理之前将值四舍五入为整数可以解决问题。

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