我已经建立了一个最小的SceneKit项目,其中包含一个场景,其中包含默认飞机,该飞机带有一个透明的平面,用作阴影接收器。我已经复制了此设置,所以有两架飞机和两个透明的阴影平面。
有一种定向光可以投射阴影,并且其shadowMode
属性设置为.deferred
。当两个阴影平面重叠时,更靠近相机的平面会“切出”距离相机更远的平面上的阴影。
我知道这是由于飞机的材质的.writesToDepthBuffer
属性设置为true所致。但是,没有这个,延迟的阴影将不起作用。
是否可以在多个重叠的平面上显示阴影?我知道我可以使用SCNFloor
显示多个阴影,但我特别希望在多个平面上具有不同Y位置的阴影。考虑一下ARKit中检测到多个平面的情况。
我在这里GitHub上建立了一个最小的项目。
答案 0 :(得分:0)
使阴影平面的两个Y值足够接近将解决cutoff
问题。
答案 1 :(得分:0)
在SceneKit中,这是具有阴影投影的两个不同平面的常规行为。为了获得强大的阴影,仅使用一个3d对象(如果需要不同的地板高度,则可以使用平面或自定义形状的几何图形)作为阴影捕捉器。
如果您有多个3D对象,并且将Writes depth
选项设置为On
,请对每个对象使用Rendering order
属性。具有更高渲染顺序的节点最后渲染。 Rendering order
的默认值为零。
例如:
geoNodeOne.renderingOrder = -1 /* Rendered first */
geoNodeTwo.renderingOrder = 50 /* Rendered last */
但是在您的情况下,
Rendering order
属性为is useless
,因为一个阴影投影平面会阻挡另一个平面。
要建模自定义形状的几何图形,请在3D建模应用程序(例如Maya或3dsMax)中使用Extrude Tool
: