SceneKit:是否可以在透明对象上投射阴影?

Man*_*lum 2 macos shadow scenekit

我想在OSX上的SceneKit中在一个完全透明的平面上投下阴影.我几个小时以来一直在努力解决这个问题而且没有任何解决方案.

我的目的是生成具有透明背景的几个对象的屏幕截图,以及不可见平面上的阴影.

你对我如何用苹果SceneKit做这个有什么建议吗?

我是否必须编写自己的着色器,我可以使用着色器修改器进行此操作还是可以使用内置函数?

ooO*_*lly 9

更新:

我为需要的人找到了另一种解决方案:

  1. 在3D模型下创建一个白色平面,注意平面的颜色必须是纯白色.
  2. 设置平面材质的混合模式SCNBlendModeMultiply.
  3. 将飞机材料的轻型模型设置为SCNLightingModelLambert.

这是有效的,因为任何颜色乘以白色(1,1,1)都会返回自身而朗伯光模型不会考虑方向光,因此平面将始终是看起来像透明的背景颜色.此解决方案的另一个好处是您不需要更换灯光的阴影渲染模式.

对于习惯Xcode检查员的人.

在此输入图像描述 在此输入图像描述


根据SceneKit:什么是新的.

首先,在模型下添加一个平面.然后阻止它写入colorBuffer.其次,将灯光模型的阴影渲染模式更改为延迟.请注意,您必须使用可投射阴影的灯光. 飞机的材料检查员

light的属性检查员


小智 5

郭力,您的解决方案有效。解决方案在代码中:

光源配置:

light.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.4)
light.shadowMode = .deferred
Run Code Online (Sandbox Code Playgroud)

对于地板(即对象下方的SCNFloor):

material.diffuse.contents = UIColor.white
material.colorBufferWriteMask = SCNColorMask(rawValue: 0)
Run Code Online (Sandbox Code Playgroud)

  • 大!您还应该确保飞机不会投射阴影。 (2认同)