【问题标题】:Textured glass refraction and transparency纹理玻璃折射和透明度
【发布时间】:2019-01-07 22:28:36
【问题描述】:

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

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(); }  }

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

【问题讨论】:

    标签: shader hlsl


    【解决方案1】:

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

    对于放大倍率,您希望在纹理查找中缩放背景纹理的 UV 坐标。只是直接缩放它是行不通的,您需要获取屏幕缓冲区样本的 UV 坐标与放大镜中心之间的距离,缩放它,然后将其添加到原始 UV 坐标中。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-27
      • 2012-02-10
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多