1

一段时间以来,我一直在尝试为 RealityKit 中的对象添加逼真的地面阴影。对于我的用例,我不会使用 Reality Composer,也不会(根据这个问题)使用水平平面的锚实体(我的用户将点击以放置一个对象,并且该点击可以与水平平面对齐ARMeshAnchor,因为我们在应用程序中支持 LiDAR)。

当我在 iOS 上通过 QuickLook 测试我的 USDZ 模型时,我看到 iOS 在我的模型下方添加了一个阴影,虽然并不完全真实,但与没有阴影相比,它看起来更“放置”在表面上。

在尝试添加我的模型时,我正在采取以下步骤;

self.model = Entity.load(named: "model.usdz")

当用户点击屏幕时,我执行光线投射并将模型添加到构建的锚点;

func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
   for anchor in anchors {
      if anchor.name == "tapped" {
         let anchorEntity = AnchorEntity(anchor: anchor)
         anchorEntity.addChild(self.model!)
         arView.scene.addAnchor(anchorEntity)
      }
   }
}

当模型添加到轻敲点时,没有地面阴影。作为测试,我尝试添加定向光,相信它的位置可能会在物体上投射光,因此会产生阴影。我像这样创造光;

class Lighting: Entity, HasDirectionalLight {
    required init() {
        super.init()
        self.light = DirectionalLightComponent(color: .white, intensity: 5000, isRealWorldProxy: true)
    }
}

我添加了一个全局var lightEntity = AnchorEntity(). 然后,在我的viewDidLoad方法中,我试图像这样设置灯光;

let spotLight = Lighting().light
let shadow = Lighting().shadow
lightAnchor.components.set(shadow!)
lightAnchor.components.set(spotLight)
arView.scene.anchors.append(lightAnchor)
self.model = Entity.load(named: "model.usdz")

虽然我可以看到有光照射在物体,但它似乎并没有造成任何阴影。

4

1 回答 1

1

如果您的应用支持 LiDAR ,您可以使用

arView.environment.sceneUnderstanding.options.insert(.receivesLighting)
于 2021-06-26T14:54:10.997 回答