swift - Scenekit 一些纹理有红色调

标签 swift textures scenekit

我有一个包含许多对象的场景,它们都有不同的纹理。出于某种原因,2 个对象具有红色调,即使它们的纹理没有红色。你仍然可以看到纹理中的图案,它只是在红色上有不同的阴影。 (在模拟器上,这 2 个对象有黑白纹理,在设备上有红色阴影)有人知道为什么会这样吗?其他对象工作正常。

最佳答案

对于 metalnessroughness 等 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/

相关文章:

javascript - 在 pixi.js 中初始加载后访问纹理

iOS、swift、scenekit、场景加载事件

ios - 如何在 Scenekit 中更新我的逻辑方法

ios - SceneKit 中支持 Collada/DAE 模型有哪些要求?

ios - DropboxSDK : unable to link error

ios - 如何显示树节点的当前位置

ios - Swift 2 Dictionary<String, AnyObject> 到 Struct getter/setter throwing Cannot subscript value ... with an index of type 'String'

ios - 我是否需要获得 "Always"授权才能进行后台位置更新?

android - 纹理和颜色在 OpenGL ES 中显示不正确

c++ - BMP 纹理不显示