如何在ARView中显示AR Quick Look同款地面阴影?
QLPreviewController和ARView里USDZ模型阴影差异的原因及解决办法
为啥ARView默认没阴影?
QLPreviewController是苹果现成的模型预览工具,自带了一套打包好的渲染环境——模拟了地面、固定打光,还有默认的阴影渲染逻辑,就是为了让模型一打开就有好看的展示效果,不用开发者额外折腾。
而ARView的核心是贴近真实AR场景:
- 它的阴影默认要靠AR识别出来的真实地面/平面才能显示,刚打开AR还没检测到平面的时候,肯定没阴影;
- 就算检测到平面了,ARView也没默认开启模型的阴影投射开关,得手动调整。
不用自定义,怎么在ARView里调出阴影?
按这几步操作就行:
- 准备阴影接收面:要么等ARView自动识别出真实地面,要么手动添加一个虚拟平面作为阴影接收层
- 给模型开启阴影权限:加载完USDZ模型后,找到对应的实体,开启投射和接收阴影的属性:
// 假设加载好的模型实体是modelEntity modelEntity.castsShadow = true modelEntity.receivesShadow = true // 手动添加虚拟平面的代码示例 let planeEntity = ModelEntity(mesh: MeshResource.generatePlane(width: 2, depth: 2)) planeEntity.receivesShadow = true // 把平面放在模型下方合适位置,比如y=-0.1处 planeEntity.position = SIMD3<Float>(0, -0.1, 0) arView.scene.addAnchor(AnchorEntity(children: [planeEntity])) - 打开ARView的阴影渲染开关:
arView.renderOptions.insert(.enableShadows) // 可调整光照强度让阴影更明显 arView.environment.lighting.intensity = 1200
要是这么设置后还是觉得和QLPreview里的阴影效果差距大,那可能就得自定义阴影(比如用半透明纹理模拟软阴影),但大部分场景下,原生配置足够满足需求。
内容的提问来源于stack exchange,提问作者Programmer54
相关产品推荐
相关产品推荐

