You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RealityKit中如何在.nonAR模式的ARView中禁用默认光照?

RealityKit中如何在.nonAR模式的ARView中禁用默认光照?

嗨,我完全懂你遇到的困惑!在非AR模式下使用RealityKit时,哪怕你没手动添加任何光源,框架也会悄悄给场景加上一个默认的方向光,这就是为什么你的球体始终被照亮的原因。而你用的.disableAREnvironmentLighting其实只对AR会话中捕获的真实环境光照生效,对非AR模式下的内置默认光源完全不起作用。

下面给你两个可行的解决方案,亲测有效:

方案一:手动移除默认的方向光

RealityKit在非AR模式启动时,会自动把一个方向光添加到场景的根锚点里,我们只需要找到它并移除就行。你可以在添加完球体锚点后,加上这段代码:

// 遍历场景所有锚点,移除其中的方向光实体
arView.scene.anchors.forEach { anchor in
    anchor.children
        .filter { $0 is DirectionalLight }
        .forEach { $0.removeFromParent() }
}

这样操作后,如果你不打开自定义点光源的代码,屏幕就会变成纯黑;当你启用右边的点光源时,球体就只会被右侧照亮,左侧完全处于阴影中,和你预期的效果一致。

方案二:替换场景的光照环境为纯黑

另一种方式是直接把场景的光照环境设置成纯黑,这样即使有默认光源也无法产生照明效果。你可以这样写:

// 将场景光照环境设置为纯黑
do {
    arView.scene.lightingEnvironment = try EnvironmentResource(named: "BlackEnvironment")
} catch {
    print("加载环境资源失败: \(error)")
}

不过这里需要你提前在项目中添加一张纯黑的图片作为环境资源(命名为BlackEnvironment),这种方法适合需要完全控制场景光照氛围的情况。

最后补充一下:.disableAREnvironmentLighting这个选项的设计初衷是关闭AR模式下设备摄像头捕获的真实环境光照数据,所以在.nonAR模式下它自然不会有任何效果,这也是你之前找不到解决办法的原因~

备注:内容来源于stack exchange,提问作者Alexandre DeFreitas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:29:33