Swift 有可能在ARKit的透明地板上投射光线吗?

Swift 有可能在ARKit的透明地板上投射光线吗?,swift,augmented-reality,scenekit,arkit,Swift,Augmented Reality,Scenekit,Arkit,我想放置一个SCNLight节点并将灯光投射到透明的SCNFloor上?这将给出真实曲面上的灯光投影效果。类似于投射阴影的仅阴影照明模型。这可能吗?是的,您可以通过投射白色(或出血颜色)阴影而不是黑色阴影来实现。为此,必须使用在后处理过程中渲染的阴影类型 请考虑,必须在场景中使用两个单独的灯光–第一个用于投射白色阴影,第二个用于投射这些白色阴影的照明对象。您可以从照明方案实现属性中包括和排除对象 // SETTING A SHADOW CATCHER let plane = SCNPlane(w

我想放置一个SCNLight节点并将灯光投射到透明的SCNFloor上?这将给出真实曲面上的灯光投影效果。类似于投射阴影的仅阴影照明模型。这可能吗?

是的,您可以通过投射白色(或出血颜色)阴影而不是黑色阴影来实现。为此,必须使用在后处理过程中渲染的阴影类型

请考虑,必须在场景中使用两个单独的灯光–第一个用于投射白色阴影,第二个用于投射这些白色阴影的照明对象。您可以从照明方案实现属性中包括和排除对象

// 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

这创造了我想要的效果。我在材质混合模式设置为“屏幕模式”的平面上添加了IES类型的灯光节点

let light = SCNLight()
light.type = .IES
light.intensity = 10000

let lightNode = SCNNode()
lightNode.light = light
//set slightly above of the plane, set on Z bc it's rotated on x axis
lightNode.position = SCNVector3Make(0, 0, 0.01)

let planeMaterial = SCNMaterial()
planeMaterial.blendMode = .screen

let planeForLight = SCNPlane(width: 0.9, height: 0.9)
planeForLight.materials = [planeMaterial]

let planeNodeForLight = SCNNode(geometry: planeForLight)
planeNodeForLight.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)

嗨,奥兹格,你的最终目标是什么?你需要它做什么?嗨,安迪,我想在3d物体下投射一盏灯,光线面向地面。它不会在地面上形成阴影,而是在物体下面发光,就像它下面有一个类似于ufo着陆的光源一样。但是没有覆盖地面的scnplane,它将是透明材料,因为我只想给反射光区域上色。谢谢Andy,我尝试了带平行光的白色阴影,但也在3d对象上添加了白光。我只想要白色阴影,而不是在3d对象上变白。如何防止这种情况发生?我又添加了一个参数
forcesBackFaceCasters
。感谢您,它提供的照明较少,仅在3d对象下方照亮。我用红色来展示阴影。它下面仍然有颜色,但背面的脚轮颜色更少。有许多阴影和灯光参数可供使用。也别忘了SceneKit经常有灯光缺陷。我想我找到了一种方法,使用混合模式类型“screen”的基于物理的SCNPlane。我加了一道亮光。这将创建具有我想要的透明背景的照明。