我正在尝试编写一个HLSL来模拟Photoshop的不透明蒙版:白色转换为Alpha = 1(不透明),黑色转换为Alpha = 0(透明),灰色阴影将转换为透明度范围。我试过的以下HLSL代码有问题,结果图像是黑色部分不是完全透明的。不知道为什么。有谁知道可能是什么问题?
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;
}
答案 0 :(得分:1)
Opps设法解决了我自己的问题。我在这里留下答案,以便那些想知道答案的人。解决方案是返回灰度和R,G,B通道的乘法,而不仅仅是设置A通道中的值。
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);
float grayscale = (mask.r + mask.g + mask.b) /3;
color.r = (color.r / color.a) * grayscale;
color.g = (color.g / color.a) * grayscale;
color.b = (color.b / color.a) * grayscale;
color.a = grayscale;
return color;
}