我们可以在SceneKit中的透明平面上渲染阴影 [英] Can we render shadow on a transparent Plane in SceneKit
本文介绍了我们可以在SceneKit中的透明平面上渲染阴影的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经为Plane使用了着色器修改器,但它不起作用。任何人都可以建议我如何解决它?
I have used shader modifiers for Plane but its not working. Can anyone suggest me how to solve it?
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 :WWDC 2017的新内容会议解释了如何做到这一点。
The SceneKit: What's New session from WWDC 2017 explains how to do that.
- 对于飞机,使用
常量
lightingModel
。这是最便宜的。 - 此资料将包含
writesToDepthBuffer
设置为true
和colorBufferWriteMask
设置为[]
(空选项集)。这样平面将在深度缓冲区中写入,但不会在屏幕上绘制任何内容。 - 设置灯光
shadowMode
到deferred
,以便在渲染对象本身时不应用阴影,而是作为最终的后期处理。
- For the plane, use a material with
constant
as itslightingModel
. It's the cheapest one. - This material will have
writesToDepthBuffer
set totrue
andcolorBufferWriteMask
set to[]
(empty option set). That way the plane will write in the depth buffer, but won't draw anything on screen. - Set the light's
shadowMode
todeferred
so that shadows are not applied when rendering the objects themselves, but as a final post-process.
这篇关于我们可以在SceneKit中的透明平面上渲染阴影的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文