如何在ARKit中使用SCNNode过滤器?
问题描述:
我想实现一个自定义的CIFilter与我的ARSCNView中的SCNNode一起使用。不幸的是,它只是创建一个灰色的矩形,节点应该在屏幕上。我也试过内置的CIFilter来检查我的代码无济于事。如何在ARKit中使用SCNNode过滤器?
在其他一些SO帖子中,我已经读过CIFilter只有在选择OpenGL作为SCNView的渲染API时才起作用,因为CoreImage与Metal没有很好地发挥作用,并且据我所知,不可能让ARSCNView运行与OpenGL。该帖子是从2016年开始的,所以我想知道是否有任何改变。
我想要实现的是概述/突出显示屏幕上的对象,以反馈用户关于对象选择。我已经通过添加着色器修改器实现了一些可用的功能,但它对阴影进行了有限的控制。我真的不想超过我自己的所有阴影。
下面是我的CIKernel的概述,它在Quartz Composer上非常出色。
任何帮助和信息是高度赞赏。
kernel vec4 outline(sampler src) {
vec2 texturePos = destCoord();
float alpha = 4.0f * sample(src, texturePos).a;
float thickness = 5.0f;
alpha -= sample(src, texturePos + vec2(thickness, 0.0f)).a;
alpha -= sample(src, texturePos + vec2(-thickness, 0.0f)).a;
alpha -= sample(src, texturePos + vec2(0.0f, thickness)).a;
alpha -= sample(src, texturePos + vec2(0.0f, -thickness)).a;
if (alpha > 0.9f) {
vec4 resultCol = vec4(1.0f, 1.0f, 1.0f, alpha);
return resultCol;
}else{
vec4 resultCol = sample(src, texturePos);
return resultCol;
}
}
答
我也遇到过类似的问题。原因是因为我们进行了以下设置。可以通过删除此设置来实现CIFilter。 我还没有分析的细节,但如果它来帮助!
sceneView.antialiasingMode = .multisampling4X
sceneView.contentScaleFactor = 1.3