纹理玻璃的折射和透明度

时间:2019-01-02 12:42:58

标签: shader hlsl

我正在尝试创建一个着色器,该着色器将允许精灵稍微放大(或稍微偏移一点)其背景并同时显示其纹理,就像一块彩绘玻璃一样。 我找到了几乎可以做到的着色器,但是它也会根据上层/精灵的亮度来更改背景:

sampler2D img;
sampler2D bkd : register(s1);

float4 ps_main(in float2 In: TEXCOORD0) : COLOR0    {
    float4 L = tex2D(img,In);
    float4 B = tex2D(bkd,In);
    return (L<0.5)?min(B,(2.0*L)):max(B,(2.0*(L-0.5)));
}

technique tech_main { pass P0 { PixelShader = compile ps_2_0 ps_main(); }  }

我试图修改参数,但是结果很糟糕。

1 个答案:

答案 0 :(得分:1)

要组合纹理,可以在B和L之间使用lerp,或者在B和L * B之间使用lerp。您可以将lerp因子公开为统一控件。

要放大,您要在纹理查找中缩放背景纹理的UV坐标。但是,仅将其完全缩放是行不通的,您需要获取屏幕缓冲区样本的UV坐标与放大镜中心之间的距离,进行缩放,然后将其添加到原始UV坐标中。

这是在sharttory上的一个短放大镜着色器,向您展示我的意思(在GLSL中):

https://www.shadertoy.com/view/lsjczh