swift - 是否可以在 ARKit 中的透明 SCNFloor 上投射光?
问题描述
我想放置一个 SCNLight 节点并将灯光投射到透明的 SCNFloor?这将在真实表面上产生光投影的效果。类似于 shadowOnly 投射阴影的光照模型。这可能吗?
解决方案
是的,您可以通过投射白色(或渗色)阴影而不是黑色阴影来做到这一点。为此,您必须使用在后处理过程中呈现的延迟阴影类型。
考虑一下,您必须在场景中使用两个单独的灯光 - 第一个用于投射白色阴影,第二个用于照明投射这些白色阴影的对象。您可以在实现categoryBitMask属性的照明方案中包含和排除对象。
// SETTING A SHADOW CATCHER
let plane = SCNPlane(width: 10, height: 10)
plane.firstMaterial?.isDoubleSided = true
plane.firstMaterial?.lightingModel = .shadowOnly
let planeNode = SCNNode(geometry: plane)
planeNode.eulerAngles.x = -.pi / 2
scene.rootNode.addChildNode(planeNode)
// SETTING A LIGHT
let lightNode = SCNNode()
lightNode.light = SCNLight()
lightNode.light?.type = .directional
lightNode.light?.intensity = 50
lightNode.light?.color = UIColor.black
lightNode.eulerAngles.x = -.pi / 2
scene.rootNode.addChildNode(lightNode)
// DEFERRED SHADOWS
lightNode.light?.castsShadow = true
lightNode.light?.shadowMode = .deferred // important
lightNode.light?.forcesBackFaceCasters = true // important
lightNode.light?.shadowRadius = 10
lightNode.light?.shadowColor = UIColor.white
推荐阅读
- c++ - 命令行参数,cant 或两个变量
- wordpress - 应针对 woocommerce 中的 2 个不同类别应用两组不同的折扣
- python - 切菜板算法
- ruby - 检索步骤定义文件中的标记字符串
- ios - 将 IPA 上传到 App Store 时出错
- java - JDK8 RMI 服务器在 JDK9 或 JDK10 中不工作 - ClassNotFoundException
- c# - 调用线程必须是 STA 线程,因为许多带有 livechart 的 UI 组件都需要它
- generics - 有没有办法用不同的生命周期来表达“相同”的泛型类型?
- javascript - 错误:错误的 Twitter 流式传输请求:401 使用 Twit
- java - 如何编写具有多个连接的 Spring Data JPA 规范?