我们可以在SceneKit中的透明平面上渲染阴影吗?

我用平面着色器修改器,但它不工作。 任何人都可以build议我如何解决它?

let myShaderfragment = "#pragma transparent;\n" + "_output.color.a = 0.0;" let myShaderSurface = "#pragma transparent;\n" + "_surface.diffuse.a = 0.0;" material.shaderModifiers = [SCNShaderModifierEntryPoint.fragment : myShaderfragment, SCNShaderModifierEntryPoint.surface : myShaderSurface] 

来自WWDC 2017的SceneKit:What's New会议解释了如何做到这一点。

  1. 对于飞机,使用具有constant的材质作为其lightingModel 。 这是最便宜的一个。
  2. 这个材质将把writesToDepthBuffer设置为truecolorBufferWriteMask设置为[] (空选项设置)。 这样飞机将写入深度缓冲区,但不会在屏幕上绘制任何东西。
  3. 将光源的shadowMode设置为deferred以便在渲染对象本身时不应用阴影,而是作为最终的后期处理。