Scenekit的一些纹理有红色色调

Col*_*dog 6 textures scenekit swift

我有一个有很多物体的场景,它们都有不同的纹理.出于某种原因,2个物体具有红色色调,即使它们的纹理没有红色.您仍然可以在纹理中看到图案,它在红色上只有不同的阴影.(在模拟器上,2个物体有黑色和白色纹理,设备色调为红色)有没有人知道为什么会发生这种情况?其他对象工作正常.

mnu*_*ges 7

对于材质属性,例如metalnessroughnessSceneKit支持1通道(灰度)图像.为了节省内存,这些图像保持为灰度纹理,它们不会转换为每个通道中具有相同数据的RGB纹理.

当您将此类图像用于"彩色"材质属性(例如diffuse)时,SceneKit将询问样本的红色,绿色和蓝色分量,但绿色和蓝色将始终为0,图像将显示为红色.

一个不幸的解决方案是在图像编辑应用程序中重新设计纹理,以便将其保存为RBG而不是灰度.

您还可以尝试着色器修改器将灰度转换为RGB:

_surface.diffuse.rgb = _surface.diffuse.rrr;
Run Code Online (Sandbox Code Playgroud)

编辑

启动iOS 11时,您可以textureComponents在使用单通道纹理时使用该属性:

material.diffuse.textureComponents = .red
Run Code Online (Sandbox Code Playgroud)