将CIFilter添加到SCNNode会将节点变成白色方块。

3
我想要在ARKit中展示的SCNNode上添加一个CIGaussianBlur滤镜。然而,添加该滤镜会使节点变成“白盒子”。以下是未添加和已添加滤镜的节点对比:

没有CIFilter

SCNNode with no CIFilter

使用CIFilter

SCNNode with CIFilter

这里是相关的代码:

let gaussianBlurFilter = CIFilter(name: "CIGaussianBlur")!
gaussianBlurFilter.name = "blur"

node.filters = [gaussianBlurFilter]
let material = node.geometry?.firstMaterial
material?.diffuse.contents = UIColor.blue

node.position = SCNVector3(x: 0, y: 0, z: -0.39)
camera.addChildNode(node)

之前的Stack Overflow问题曾经建议在Metal上添加不可能,但我相信自iOS 11以来已经可以实现。

另外,我正在尝试在上实现类型的效果,如果您知道其他方法,请告诉我!


你应该将滤镜添加到图层而不是节点上吗?let layer = CALayer() layer.filters = [gaussianBlurFilter] - Peter de Vries
1
层过滤器从未在iOS上得到支持。他正确地过滤了节点,这也是SceneKit所支持的。 - CIFilter
这个有进展了吗? - omarojo
@omarojo,很遗憾我没有找到解决方案。 - Hunter Monk
1个回答

2
你可以尝试这样做:

最初的回答:

let gaussianBlur    = CIFilter(name: "CIGaussianBlur")
gaussianBlur?.name  = "blur"
gaussianBlur?.setValue(15, forKey: "inputRadius")
node.filters        = [gaussianBlur] as? [CIFilter]

最初的回答是配置SceneView如下:

并像这样配置SceneView:

sceneView.antialiasingMode    = .none
sceneView.isJitteringEnabled  = false

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接