如何在SceneKit的sceneView中正确添加定向光以生成阴影?

3

我正在学习ARKit。我在增强现实场景中放置虚拟对象,但遇到了一些问题!

我正在使用Github上的这个演示项目。

1-如何为SceneKit的全部(单独)节点添加一个定向光,并随着相机位置移动定向光?以便我的添加的阴影也可以随着光线方向移动。

如果我转换对象,则阴影会按预期工作。但如果我旋转对象,则阴影不应在平面上移动。它们移动是由于光源在固定位置。

2-阴影看起来只在平面上添加一个对象的情况下才正常。但是如果我在平面上添加两个或更多对象,则在SceneView中添加了更多的定向光源。现在每个对象都有一个以上的阴影。我希望将其限制为一个阴影。

enter image description here enter image description here

我已在SceneKit编辑器中添加了光线和阴影平面(非编程方式)。以下是我的SceneKit编辑器的截图。

enter image description hereenter image description here

3-我已经阅读并确认只有将定向光属性设置为deffered时才会添加阴影。但是在这种情况下,如果我从sceneView的根节点调用remove all nodes,则应用程序会崩溃。我的删除节点代码如下。

self.sceneView.scene.rootNode.enumerateChildNodes { (node, stop) -> Void in
    node.removeFromParentNode()
    print("removed ", node.name as Any)
}

您可以观看我的应用程序视频以获得更清晰的了解。应用程序视频,现在它如何工作 我的要求是为每个对象添加一个阴影。当我旋转和平移对象时,阴影应该看起来很真实。
我也尝试将花瓶的光从scn文件中删除,并添加一个仅包含光的单独light.scn文件。将这两个(花瓶和光)节点添加到sceneView中。但是没有出现阴影。
1个回答

0
  1. 方向光仅通过其方向(在Xcode中从节点中发出的那个红色光矢量)从着色器中解释。光源的位置并不重要。方向光通常用于模拟阳光。

  2. 我实现了一个类似的项目,这是我的尝试。当我初始化SCNScene时,我从单独的SCN文件中向场景添加了一个定向光。我的设置如下:

    • castsShadow: true
    • mode: deferred(如果我从场景中删除对象,我的应用程序不会崩溃:/)

实际上,这就是让它在我的项目中工作的全部内容。关于你的平面有一件事:我认为你没有在平面上禁用castsShadow。因此,用户可以看到平面。

编辑: 我能够重现崩溃。当移除方向光时会发生崩溃。这就是为什么我的项目中应用程序不会崩溃的原因。所以你可以像我一样,在viewDidLoad()中添加方向光。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接