2016-10-15 81 views
4

我有一個場景有許多對象,都有不同的紋理。由於某種原因,2個物體對它們有紅色調,即使它們的紋理沒有紅色。你仍然可以看到紋理中的圖案,它只是在紅色上有不同的陰影。 (在模擬器上,2個物體具有黑色和白色紋理以及紅色設備色調)有沒有人知道爲什麼會發生這種情況?其他對象工作正常。Scenekit一些紋理有紅色色調

回答

2

對於材質屬性,如metalnessroughness SceneKit支持1通道(灰度)圖像。爲了節省內存,這些圖像保存爲灰度紋理,它們不會轉換爲每個通道中具有相同數據的RGB紋理。

當您爲「彩色」材質屬性(例如diffuse)使用這樣的圖像時,SceneKit會詢問樣本的紅色,綠色和藍色分量,但綠色和藍色將始終爲0,圖像將會出現紅。

一個不幸的解決方案在於在圖像編輯應用程序中重新構建紋理,以便將其保存爲RBG而不是灰度。

您也可以嘗試着色改性劑從灰度轉換爲RGB:

_surface.diffuse.rgb = _surface.diffuse.rrr; 
+0

我不認爲我的理解。我的紋理已經是RGB。我只是將紋理拖入模型中,就像我對每個對象所做的一樣。 – Colddog

+0

並說我的紋理是RGB,我的意思是它有顏色。 – Colddog

+0

我可能誤解了你的意思,「在模擬器上2個物體有黑白紋理和紅色的裝置陰影」)。你可以發佈圖片的圖片以及它們在場景中的外觀嗎? – mnuages

0

我有一個索引顏色質地爲png同樣的問題。
我解決這個問題的方法是將索引顏色png轉換爲真彩色png。

它可能是一個NSImage的錯誤。當我使用CGImage加載png文件時,它不會導致任何問題。

let url = URL(fileURLWithPath: pngFileName, relativeTo: directoryPath) 

// let reddishImage = NSImage(contentsOf: url) 

let cgDataProvider = CGDataProvider(url: url as CFURL)! 
let cgImage = CGImage(pngDataProviderSource: cgDataProvider, decode: nil, shouldInterpolate: false, intent: CGColorRenderingIntent.defaultIntent)! 
let imageSize = CGSize(width: cgImage.width, height: cgImage.height) 
let correctImage = NSImage(cgImage: cgImage, size: imageSize) 
1

我已經有與加載(灰色).png圖像作爲紋理SCNMaterial相同的問題。

在模擬器上它表現很好。但是在設備上,所有隻有黑色,白色或灰色的圖像呈現紅色基色。

let texture = SCNMaterial() 
texture.diffuse.contents = UIImage(named: "rgb image with only gray") 

我通過創建從給定UIImageUIImage解決了這個問題:

let texture = SCNMaterial() 
var newImage: UIImage? 
if let textureImage = UIImage(named: "rgb image with only gray") { 
    UIGraphicsBeginImageContext(textureImage.size) 
    let width = textureImage.size.width 
    let height = textureImage.size.height 
    textureImage.draw(in: CGRect(x: 0, y: 0, width: width, height: height)) 
    newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
} 
texture.diffuse.contents = newImage 

HTH

+0

這個工程!我在某些設備(iPhone X,我的純白色+ alpha紋理以紅色顯示)而不是其他設備(iPad Pro,它看起來正確)上遇到問題,並且此解決方法解決了此問題。很明顯,原始圖像資源或UIImage加載的內容可能會發生變化,可能會轉換爲單通道圖像而不是RGB,導致僅在某些設備上將其解釋爲紅色。 – Clafou