微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以在Metal中直接使用CIFilters?

如何解决是否可以在Metal中直接使用CIFilters?

我正在使用SceneKit和ARKit构建iOS应用。我正在使用SCNTechnique修改SceneKit的呈现并以风格化方式绘制场景的一部分。目前,我正在使用一个简单的金属片段着色器以黑白方式绘制场景:

fragment half4 fragment_shader(VertexOut vert [[stage_in]],texture2d<half,access::sample> scene [[texture(0)]])                                              )
    {
        constexpr sampler samp = sampler(coord::normalized,address::repeat,filter::nearest);
        half4 color = scene.sample(samp,vert.texcoord);
        
        constexpr half3 weights = half3(0.2126,0.7152,0.0722);
        color.rgb = half3(dot(color.rgb,weights)) * 0.1;
        return color;
}

我现在想封装该系统化并使用CIFilter而不是自己编写所有金属代码。是否可以在Metal中调用CIFilters并将其传递给texture2d?如果可以,怎么办?

解决方法

似乎您可以直接通过filters属性将CIFilters分配给SCNNodes。从文档中:

当此数组为非空数组时,SceneKit将节点(及其子节点层次结构)渲染到图像缓冲区中,然后在将滤镜的输出组合到渲染的场景中之前应用滤镜。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。