我想在OSX上的SceneKit中完全透明的平面上投下陰影。自從幾個小時以來,我一直在努力解決這個問題,並沒有找到任何解決方案。SceneKit:是否可以在透明對象上投射陰影?
我的目的是生成一個透明背景的幾個對象的屏幕截圖,只是在一個不可見的平面上的陰影。
你對我有什麼建議嗎?我可以用蘋果SceneKit做這個嗎?
我是否必須編寫自己的着色器,我可以使用shadermodifiers進行這項工作,還是可以使用內置的函數?
我想在OSX上的SceneKit中完全透明的平面上投下陰影。自從幾個小時以來,我一直在努力解決這個問題,並沒有找到任何解決方案。SceneKit:是否可以在透明對象上投射陰影?
我的目的是生成一個透明背景的幾個對象的屏幕截圖,只是在一個不可見的平面上的陰影。
你對我有什麼建議嗎?我可以用蘋果SceneKit做這個嗎?
我是否必須編寫自己的着色器,我可以使用shadermodifiers進行這項工作,還是可以使用內置的函數?
我沒有回答你的問題,但是我有一個解決辦法:
CIColorInvert
和CIMaskToAlpha
核心圖像濾鏡您將得到一個帶有正確Alpha通道和透明陰影的圖像。您需要調整材料和燈光才能獲得想要的結果。
陰影可能在邊緣變得更亮,唯一的方法是將其渲染爲另一個圖像,並在「Mask to Alpha」步驟後將其填充爲黑色。
UPDATE:
我找人替代解決方案誰需要:
SCNBlendModeMultiply
。SCNLightingModelLambert
。這是可行的,因爲任何顏色乘白色(1,,1,1)返回自己而蘭伯特光模型將不考慮定向光,所以飛機將永遠是背景顏色,看起來像透明。這種解決方案的另一個好處是你不需要改變燈光的陰影渲染模式。
對於習慣Xcode檢查員的人。
首先,在你的模型下添加一個平面。然後阻止它寫入colorBuffer。 其次,將您的燈光模型的陰影渲染模式更改爲延遲。請注意,您必須使用可投射陰影的燈光。
油性郭,你的解決方案的工作。這裏的解決方案是在代碼:
光源的配置:
light.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.4)
light.shadowMode = .deferred
而對於地板(即SCNFloor你的下面。):
material.diffuse.contents = UIColor.white
material.colorBufferWriteMask = SCNColorMask(rawValue: 0)
太棒了!你還應該確保你的飛機不能投射陰影。 – ooOlly
任何運氣找到實際的辦法做這個? – jfisk
你解決了嗎? – ooOlly
有同樣的問題,有人解決了嗎? – larva