制作了一个 hlsl 像素着色器,用于为字幕添加轮廓/阴影。我的问题是我使用 Shazzam - Shader Editor 来查看它的效果,结果在我的程序中完全不同。例如:
我使用带有文本的 .png 为 Shazzam 编辑器制作图像,但正如您所见,程序(视频播放器)中只有一点提示,但我不明白..
我的代码:
struct VertexShaderInput
{
float4 Position : POSITION0; // model xyzw
float2 uv0: TEXCOORD0; // texture 0 uv
};
struct VertexShaderOutput
{
float4 Position : POSITION0; // model xyzw
float2 uv0: TEXCOORD0; // texture 0 uv
};
VertexShaderOutput vs(VertexShaderInput input)
{
VertexShaderOutput output;
output.Position = input.Position;
output.uv0 = input.uv0;
return output;
}
sampler2D YTexture : register(s0);
struct PixelShaderInput
{
float2 uv0: TEXCOORD0; // texture 0 uv
float4 color: COLOR; // color
};
float4 ps_osd(PixelShaderInput input): COLOR {
float4 px = tex2D(YTexture, input.uv0);
const float d = 0.2;
float cnt = 0;
float a = 0;
for (float x = -0.02*d; x < 0.02*d; x += 0.028*d)
{
a += tex2D(YTexture, input.uv0 + float2(x, 0)).a;
a += tex2D(YTexture, input.uv0 + float2(0, x)).a;
a += tex2D(YTexture, input.uv0 + x).a;
cnt += 0.1;
}
a /= cnt;
float4 s = a;
s.rgb = 0;
float4 r = float4(px.rgb*px.a + s.rgb*(1-px.a), max(px.a, a));
return r;
}
实际的像素着色器是 ps_osd() 而 vs 是顶点着色器。我对 HLSL 很陌生,但我不明白为什么它不应该工作。视频是 1280x720,我尝试在 Shazzam 中使用与着色器相同大小的图像,看看它是否可能是大小问题,但不是。
你们能看看我是否遗漏了什么吗?试过 sr = 0; SG = 0; 某人= 0; 萨 = 1;..
希望你能帮忙:)