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

RealityKit中Plane实体地面阴影闪烁:如何单独禁用指定平面阴影?

问题描述

使用带PNG纹理的UnlitMaterial材质Plane作为场景模型放置位置指示器,开启grounding shadow后,该Plane会伴随阴影闪烁、显示异常;禁用grounding shadow则恢复正常,但其他模型需要保留grounding shadow。希望实现单独禁用该Plane的grounding shadow,或解决闪烁问题。

实现代码如下:

let planeMesh = MeshResource.generatePlane(width: 0.8, depth: 0.8)
let planeAnchor = AnchorEntity(plane: .horizontal)
var material = UnlitMaterial(color: .white)
material.color.texture = try! .init(.load(named:"indicator"))
indicatorEntity = ModelEntity(mesh: planeMesh, materials: [material])
planeAnchor.addChild(indicatorEntity)
arView.scene.addAnchor(planeAnchor)
func session(_ session: ARSession, didUpdate frame: ARFrame) {
    guard let result = self.arView.raycast(from: arView.center, allowing: .estimatedPlane, alignment: .horizontal).first else {
        return
    }
    indicatorEntity.setTransformMatrix(result.worldTransform, relativeTo: nil)
}

解决方案

方案1:单独禁用指示器Plane的Grounding Shadow

通过设置实体的阴影投射与接收属性,让指示器不参与grounding shadow的计算:
在创建indicatorEntity后添加以下代码:

// 禁止投射阴影
indicatorEntity.shadowCastingMode = .off
// 禁止接收阴影
indicatorEntity.receivesShadow = false

UnlitMaterial本身不参与光照计算,但grounding shadow属于环境阴影,通过上述设置可让指示器完全避开grounding shadow的影响,同时不干扰其他模型的grounding shadow效果。

方案2:解决闪烁的根本原因(保留Grounding Shadow)

闪烁通常由深度冲突(Z-Fighting)或位置更新与阴影计算不同步导致,可通过以下两种方式解决:

方式一:给指示器添加微小偏移

在更新指示器位置时,将其沿Y轴向上偏移极小距离,避免与AR估算的平面重叠:

func session(_ session: ARSession, didUpdate frame: ARFrame) {
    guard let result = self.arView.raycast(from: arView.center, allowing: .estimatedPlane, alignment: .horizontal).first else {
        return
    }
    var transform = result.worldTransform
    // 添加0.001米的向上偏移,避免深度冲突
    transform.columns.3.y += 0.001
    indicatorEntity.setTransformMatrix(transform, relativeTo: nil)
}

方式二:调整材质渲染顺序

让指示器材质优先于阴影渲染,减少闪烁概率:
在创建material后添加:

material.renderingOrder = -1

内容的提问来源于stack exchange,提问作者Xtuphe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:05:23