iOS SceneKit 中的纹理接缝

Texture seam in iOS SceneKit

我在 SceneKit 中应用于球体的纹理中出现间歇性的接缝。它总是在球体的 "back" 处,纹理的两个边缘相交的地方。看起来纹理本身并没有完全连接,您可以通过细线看到背景。该问题似乎存在于所有设备和所有最新的 iOS 版本中。我的实验表明,纹理的分辨率似乎是一个因素,但我还没有确定到底是什么影响。

我附上了一张截图来说明,为清楚起见,在白色背景上,但接缝本身并不是白色的,它只是让背景显示出来:

有谁知道为什么 SceneKit 会这样渲染纹理?我有一个相当简单的实现,只需创建一个球体和一个 material 并对其应用漫反射贴图和法线贴图。这是我的代码:

// 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];

有没有人知道什么可能会导致此 "seam" 出现,我该如何摆脱它?我的纹理通常是 1000x500 或 2048x1024,视情况而定,并且在两种分辨率下都出现了接缝。是否有 SceneKit 纹理的理想分辨率,或可能导致此行为的众所周知的分辨率?

答案最终简单得令人沮丧:出于质量原因,我正在重新缩放纹理,这条线是分数分辨率的结果,例如 1025.25f * 2048.5f。

在缩放纹理之前将值舍入为 int 解决了问题。