我已经为平面使用了着色器修改器,但它不起作用。谁能建议我如何解决它?
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]
最佳答案
SceneKit: What's New WWDC 2017 的 session 解释了如何做到这一点。
- 对于平面,使用带有
constant
的 Material 作为其lightingModel
.这是最便宜的。 - 此 Material 将具有
writesToDepthBuffer
设置为true
和colorBufferWriteMask
设置为[]
(空选项集)。这样飞机将写入深度缓冲区,但不会在屏幕上绘制任何内容。 - 设置灯光的
shadowMode
至deferred
这样在渲染对象本身时就不会应用阴影,而是作为最终的后期处理。
关于ios - 我们可以在 SceneKit 中的透明平面上渲染阴影吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45505471/