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

时间:2017-08-04 11:18:59

标签: ios swift scenekit

我已经为平面使用了着色器修改器,但它不起作用。任何人都可以建议我如何解决它?

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]

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:0)

现在有一个专用的照明模型(SCNLightingModelShadowOnly)仅渲染阴影