Можно ли использовать CIFilters непосредственно в Metal?

Я создаю приложение для iOS, используя SceneKit и ARKit. я использую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вместо того, чтобы самому писать весь металлический код. Можно ли вызвать CIFilters in Metal и, например, передать имtexture2d? Если да, то как?

1 ответ

Вроде можно назначить CIFilters к SCNNodes напрямую через filters свойство. Из документов:

Когда этот массив непустой, SceneKit визуализирует узел (и его иерархию дочерних узлов) в буфер изображения, а затем применяет фильтры перед компоновкой вывода фильтров в визуализированную сцену.

Другие вопросы по тегам