簡體   English   中英

SceneKit:是否可以在透明對象上投射陰影?

[英]SceneKit: Is it possible to cast an shadow on an Transparent Object?

我想在OSX上的SceneKit中在一個完全透明的平面上投下陰影。 我幾個小時以來一直在努力解決這個問題而且沒有任何解決方案。

我的目的是生成具有透明背景的幾個對象的屏幕截圖,以及不可見平面上的陰影。

你對我如何用蘋果SceneKit做這個有什么建議嗎?

我是否必須編寫自己的着色器,我可以使用着色器修改器進行此操作還是可以使用內置函數?

更新:

我為需要的人找到了另一種解決方案:

  1. 在3D模型下創建一個白色平面,注意平面的顏色必須是純白色。
  2. 將平面材質的混合模式設置為SCNBlendModeMultiply
  3. 將平面材質的光模型設置為SCNLightingModelLambert

這是有效的,因為任何顏色乘以白色(1,1,1)都會返回自身而朗伯光模型不會考慮定向光,因此平面將始終是看起來像透明的背景顏色。 此解決方案的另一個好處是您不需要更換燈光的陰影渲染模式。

對於習慣Xcode檢查員的人。

在此輸入圖像描述 在此輸入圖像描述


根據SceneKit:什么是新的

首先,在模型下添加一個平面。 然后阻止它寫入colorBuffer。 其次,將燈光模型的陰影渲染模式更改為延遲。 請注意,您必須使用可投射陰影的燈光。 飛機的材料檢查員

light的屬性檢查員

郭小姐,你的解決方案有效。 這里的解決方案是代碼:

光源配置:

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)

我對你的問題沒有答案,但我有一個解決方法:

  1. 渲染場景並將圖像保留在內存中
  2. 更改對象中的所有材質以獲得純黑色,無鏡面反射
  3. 將飛機和天空更改為全白色材質,亮起白色
  4. 將場景渲染到另一個圖像
  5. 在第二個圖像上,應用CIColorInvertCIMaskToAlpha核心圖像過濾器
  6. 使用Core Image將Alpha Mask應用於第一個渲染。

您將獲得具有正確Alpha通道和透明陰影的圖像。 您需要調整材料和燈光以獲得所需的結果。

陰影可能會變得更亮,並且唯一的方法是將其渲染為另一個圖像,並在Mask to Alpha步驟之后用黑色填充它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM