雾化玻璃-ShaderLab

雾化玻璃-ShaderLab

  1. 高斯模糊效果
  2. 书写和读取纹理
  3. 根据纹理更改模糊

高斯模糊:


float4 gaussianBlur(
  float2 dir,
  float4 grabPos,
  float res,
  sampler2D tex,
  float radius
)
{
// blur algorithm goes here...
}
  • float2 dir:两次应用模糊处理,这就是为什么我们需要“ dir”(方向)参数的原因-我们在x方向上应用一次,在y方向上应用一次。这是float2,因为我们使用(1,0)表示x方向,使用(0,1)表示y方向。
  • float4 grabPos:用于由所述像素模糊,这是我们上面计算的纹理坐标。
  • float res:我们在上面指定的轴(x或y)上的纹理分辨率。
  • sampler2D tex:要模糊的纹理。我们需要整个纹理,因为模糊算法会对原始像素附近的像素进行采样。
  • float radius:从原始像素开始模糊的距离。越高,模糊越强。
    
    float4 blurX = gaussianBlur(float2(1,0), input.grabPos, _BGTex_TexelSize.z, _BGTex, blurRadius);
    float4 blurY = gaussianBlur(float2(0,1), input.grabPos, _BGTex_TexelSize.w, _BGTex, blurRadius);
    return (blurX + blurY) * color;
    
    _TexelSize在.zw属性中包含纹理的xy大小。

    读写纹理:

我们需要将鼠标移动写入到纹理和阅读着色器纹理。创建C#脚本来写纹理。Material.Set [whatever]函数是如何从C#代码设置着色器属性的方法!您只需要确保属性的字符串名称与着色器中的名称匹配即可。添加一个OnMouseDrag()函数,以在播放器在我们的平面上单击并拖动时在鼠标位置周围绘制一个圆。确保您有一个附加到您的平面对象的MeshCollider,以便它将接收OnMouseDrag()事件。

更改模糊:

让我们回到着色器,并根据从纹理读取的值应用模糊量。由于我们在单击鼠标的位置绘制红色,并且默认情况下纹理为黑色,因此我们可以基于红色通道更改模糊和颜色色调量。


    float blurRadius = _BlurRadius * percentMaxAge;
    float4 color = (1-percentMaxAge)*_ClearColor + percentMaxAge*_FogColor;

用当前时间减去出生时间,进行年龄映射