Применяйте металлический фильтр линейного увеличения только в вертикальном направлении

#ios #metal

Вопрос:

Я работал над учебником Apple по металлу, создавая и отбирая текстуры.

В этом уроке я показал, как сопоставить текстуру с набором вершин, и он хорошо работает. Мой вопрос касается сэмплера в шейдере фрагментов и фильтра увеличения.

Важно, чтобы цвета текстуры не усреднялись по горизонтали, но я бы хотел, чтобы они усреднялись по вертикали.

Моя функция фрагмента вставлена ниже. По сути, я хотел бы mag_filter::nearest , чтобы меня применяли горизонтально и mag_filter::linear применяли вертикально.

Есть ли какой-нибудь способ достичь этого или что-то в этом роде?

 fragment float4
samplingShader(RasterizerData in [[stage_in]],
               texture2d<half> colorTexture [[ texture(AAPLTextureIndexBaseColor) ]])
{
    constexpr sampler textureSampler (mag_filter::linear,
                                      min_filter::nearest);

    // Sample the texture to obtain a color
    const half4 colorSample = colorTexture.sample(textureSampler, in.textureCoordinate);

    // return the color of the texture
    return float4(colorSample);
}
 

Комментарии:

1. Я думаю, что можно использовать эту gather функцию и реализовать свою собственную фильтрацию. В качестве альтернативы вы можете изменить координаты УФ-излучения таким образом, чтобы in.textureCoordinate y компонент был прикреплен к центру текселя.