Я пытаюсь написать HLSL для эмуляции маски прозрачности Photoshop: белый перевод в Alpha = 1 (непрозрачный), черный перевод в Alpha = 0 (прозрачный) и оттенки серого переведут на диапазон прозрачности. Следующий код HLSL, который я попробовал, имеет проблему, результирующее изображение состоит в том, что черная часть не является полностью прозрачной. Не знаю, почему. Кто-нибудь знает, что может быть проблемой?Эмуляция маски непрозрачности Photoshop для HLSL ShaderEffect
sampler2D input : register(s0);
sampler2D Mask : register(s1);
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 color;
color = tex2D(input,uv);
float4 mask = tex2D(Mask, uv);
// reverse the premultiply rgb values
mask.rgb = clamp(mask.rgb/mask.a, 0, 1);
float grayscale = dot(mask, float3(0.3, 0.59, 0.11));
color.a = grayscale;
return color;
}
Привет, мне любопытно, вы заметили какие-либо улучшения в производительности, так как вы используете шейдеры вместо масок непрозрачности? – franssu
Интересно, я сделал это, чтобы увидеть, будет ли производительность лучше, чем маска непрозрачности по умолчанию, которую я использовал в медиаэлементе в моем проекте. К сожалению, я понял, что сам элемент мультимедиа без маски непрозрачности уже много питается от частоты кадров, поэтому вывод не был из-за маскировки по умолчанию, которая влияет на производительность, именно HD-видео замедляло мой пользовательский интерфейс. до сих пор у меня все еще нет решения для чувствительного интерфейса с HD-видео, воспроизводимым в фоновом режиме. я буду проверять фактическую производительность этого HLSL, когда у меня будет время. Извини за это. – icube