Смешивание двух текстур в металлическом шейдере - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть две прозрачные текстуры.Первый - это Исходная текстура, Второй - Маска.Я хочу смешать две текстуры.

Сценарий 1

  • исходная текстура, имеющая цвет и альфа-маску Текстура, имеющая цвет и альфа
  • Результирующий цвет и альфа должны быть умножены

Сценарий 2

  • исходная текстура, имеющая цвет и альфа-маску Текстура альфа равна нулю
  • Результирующий цвет и альфа должны иметь исходную текстуру Цвет и альфа

Сценарий3

  • исходная текстура с альфа-нулевой маской Текстура альфа имеет цвет и альфа
  • Результирующий цвет и альфа должны быть равны нулю

Как этого добитьсяв металлическом фрагментном шейдере.

fragment float4 fragmentShaderone(VertexOut params[[stage_in]],
                                                              texture2d<float, access::sample>srcTexture [[texture(0)]],
                                                              texture2d<float, access::sample> maskTexture [[texture(1)]])
{

    constexpr sampler defaultSampler;

    float  srcColor = float4(texture.sample(defaultSampler, float2(params.textureCoordinates)))  * float4(1,0,0,40.0/255.0);

    float4 maskColor = float4(texture4.sample(defaultSampler, float2(params.textureCoordinates))) ;

    return srcColor * maskColor

}

Если мне так нравится, то сценарий 2 отсутствует.Во всяком случае, решить в металлическом фрагменте шейдера.Мне нужно выполнить три сценария.

...