问题描述
我正在使用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将节点(及其子节点层次结构)渲染到图像缓冲区中,然后在将滤镜的输出组合到渲染的场景中之前应用滤镜。