Swift 从远处投下阴影

Swift 从远处投下阴影,swift,scenekit,augmented-reality,arkit,shadow,Swift,Scenekit,Augmented Reality,Arkit,Shadow,我有一个AR应用程序,其中我从用户那里计算了当前的太阳位置。我把这个位置缩小到10000米的距离,所以当我在场景中移动时,它会“保持”在原位。现在,我想将此节点的阴影投射到场景中的其他节点上。我尝试了几种类型的闪电,但没有一种成功。有些人根本没有投下阴影,有些人表现得很奇怪。从如此遥远的节点创建光源以在不可见的地板节点上投射阴影的最佳方法是什么?我是否也应该向场景添加环境光灯光?它可以添加到摄影机节点,还是应该在其他位置?使用定向光进行太阳模拟(太阳具有平行光线,对我们来说是来自非常远光源的主光

我有一个
AR
应用程序,其中我从用户那里计算了当前的太阳位置。我把这个位置缩小到10000米的距离,所以当我在场景中移动时,它会“保持”在原位。现在,我想将此节点的阴影投射到场景中的其他节点上。我尝试了几种类型的闪电,但没有一种成功。有些人根本没有投下阴影,有些人表现得很奇怪。从如此遥远的节点创建光源以在不可见的
地板节点上投射阴影的最佳方法是什么?我是否也应该向场景添加
环境光
灯光?它可以添加到摄影机节点,还是应该在其他位置?

使用
定向光进行太阳模拟(太阳具有平行光线,对我们来说是来自非常远光源的主光线),并使用
环境光
光模拟假次光线(如果不使用全局照明)

提示:方向
灯的位置可以是任何位置(在下面的代码中,它甚至在平面
y:-5000
下),最重要的是方向方向

另外,
directive
灯光没有
falloff
参数,也就是所谓的
二次灯光衰减

不要错误地使用此布尔值:

lightNode.castsShadow = true
而不是这个:

lightNode.light!.castsShadow = true
布尔值
lightNode.castsShadow
确定SceneKit是否将节点的内容渲染为阴影贴图

如果您希望在手动创建的
directive
light中启用阴影,这里有一个屏幕截图:


有时,如果将灯光连接到相机,您会获得一些好处。在这种情况下,法线与光线平行的对象曲面将被照亮。

谢谢,我稍后再试。我想我是在试验平行光,问题是它只能在近距离投射阴影,如果能在10万米的距离投射,对我来说会更容易。无论如何,如果有必要的话,我会缩短这个距离,并在相机移动时不断更新。这是可行的,但我还有一个问题。使用SceneKit时没有阴影,但在ARKit中效果很好。你能想出一个原因吗?这就是我创建地板的方式:let floor=SCNFloor()floor.firstMaterial!。colorBufferWriteMask=[]floor.firstMaterial!。readsFromDepthBuffer=真地板。第一个材质!。writesToDepthBuffer=true floor.firstMaterial!。lightingModel=.constantPlease,将其作为另一个问题发布。我来回答。发布时请告诉我。我发布了新问题:
lightNode.castsShadow = true
lightNode.light!.castsShadow = true