2017-08-04 74 views
2

我已经使用平面的着色器修改器,但它不工作。任何人都可以建议我如何解决它?我们可以在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] 
+3

[SceneKit:是否可以在透明对象上投射阴影?](https://stackoverflow.com/questions/30975695/scenekit-is-it-possible-to-cast-an -shadow-上的透明物体) –

回答

6

从WWDC 2017 SceneKit: What's New会议介绍了如何做到这一点。

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