gpt4 book ai didi

scenekit - 如何消除灰色的 ARKit/SceneKit 阴影平面?

转载 作者:行者123 更新时间:2023-12-03 17:11:47 27 4
gpt4 key购买 nike

我已经实现了向 ARKit 和 SceneKit 场景添加阴影平面的多种方法之一。它工作得很好,阴影看起来很好。

问题是大部分时间这架飞机也有灰白色。换句话说,它不是完全透明的。另一方面,有时灰色的类型转换消失了,几秒钟后又重新出现。我已经尝试调整我能想到的几乎所有 SCNNode 和 SCNMaterial 属性,但到目前为止,我似乎无法让灰色可靠地消失。有没有人对如何解决这个问题有任何建议?

// Make a transparent shadow plane for the Ground.
let shadowPlane = SCNPlane(width: CGFloat(self.width * 2), height: CGFloat(self.depth * 2))
shadowPlane.cornerRadius = 2
let shadowPlaneNode = SCNNode(geometry: shadowPlane)
shadowPlaneNode.name = shadowPlaneNodeName
shadowPlaneNode.eulerAngles.x = -.pi / 2
shadowPlaneNode.castsShadow = false

let material = SCNMaterial()
material.isDoubleSided = false
material.lightingModel = .constant // .shadowOnly does not show any shadows on iOS
material.colorBufferWriteMask = [.alpha]
shadowPlane.materials = [material]

node.addChildNode(shadowPlaneNode)

enter image description here

最佳答案

经过更多的实验,我找到了一个似乎运行良好的解决方案。将 Material .lightingModel 设置为 .shadowOnly 实际上可以在没有任何灰色转换的情况下正常工作,但前提是您将产生阴影的直接光上的 .shadowModel 设置为 .forward 而不是 .deferred。

此外,我发现 .shadowOnly 中似乎存在一个错误,如果场景中有 .type == .omni 或 == .spot 的光线,则会导致平面呈现完全黑色。

这是对我有用的代码:

let shadowPlane = SCNPlane(width: CGFloat(self.width * 1.5), height: CGFloat(self.depth * 1.5))
let shadowPlaneNode = SCNNode(geometry: shadowPlane)
shadowPlaneNode.name = shadowPlaneNodeName
shadowPlaneNode.eulerAngles.x = -.pi / 2
shadowPlaneNode.castsShadow = false

let material = SCNMaterial()
material.isDoubleSided = false
material.lightingModel = .shadowOnly // Requires SCNLight shadowMode = .forward and no .omni or .spot lights in the scene or material rendered black

shadowPlane.materials = [material]

node.addChildNode(shadowPlaneNode)

Shadows working correctly
Rendering bug if there is a .omni or .spot light in the scene

关于scenekit - 如何消除灰色的 ARKit/SceneKit 阴影平面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62225477/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com