我有一个包含许多对象的场景,它们都有不同的纹理。出于某种原因,2 个对象具有红色调,即使它们的纹理没有红色。你仍然可以看到纹理中的图案,它只是在红色上有不同的阴影。 (在模拟器上,这 2 个对象有黑白纹理,在设备上有红色阴影)有人知道为什么会这样吗?其他对象工作正常。
最佳答案
对于 metalness
和 roughness
等 Material 属性,SceneKit 支持 1 channel (灰度)图像。为了节省内存,这些图像保留为灰度纹理,它们不会转换为在每个 channel 中具有相同数据的 RGB 纹理。
当您将这样的图像用于“彩色” Material 属性(例如 diffuse
)时,SceneKit 将要求样本的红色、绿色和蓝色分量,但绿色和蓝色始终是0,图像将显示为红色。
一个不幸的解决方案是在图像编辑应用程序中重新处理您的纹理,以便将其保存为 RBG 而不是灰度。
您还可以尝试使用着色器修改器将灰度转换为 RGB:
_surface.diffuse.rgb = _surface.diffuse.rrr;
编辑
从 iOS 11 开始,您可以使用 textureComponents
使用单 channel 纹理时的属性:
material.diffuse.textureComponents = .red
关于swift - Scenekit 一些纹理有红色调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40058359/