【Unity ShaderLab】屏幕后处理:模糊

内容

  1. 简介  
  2. 径向模糊
  3. 均值模糊
  4. 高斯模糊

1. 简介

    模糊是一种常见的图像处理手段,也是一种常见的后处理效果,用于降低图片细节层次。对于清晰的图像来说,像素点保存的颜色信息足够准确,图片也就能表现更多的细节。相反,要达到模糊的效果,自然就是将精准的颜色信息“舍弃”掉。

径向模糊

均值模糊

高斯模糊
 

鬼刀今天更新了吗

2. 径向模糊 

    径向模糊效果:从某一中心点向外呈幅射状的逐渐模糊的效果 。
    径向模糊原理:先选取屏幕坐标的一点作为中心点,选取其它每个像素点与中心点连线之间的几个点作为采样点,计算这几个采样点颜色的求和平均值,就是该像素点的值。因此,有以下几个关键点需要考虑:

  • 中心点的选取:一般是屏幕坐标中心点(0.5,0.5),如果实现GodRay的话,需要获取光源的屏幕坐标(世界坐标转屏幕坐标)作为中心点。
  • 采样点的选取:常用的方式是给定采样点数量,然后计算当前像素点与中心点的距离,除以采样点数量得到步长,来确定采样点位置。
  • 采样值的权重:通常为1,即采样点颜色求和再除以采样点个数。

代码如下:

Shader "Custom/PostProcess/RadialBlur" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
    }
    CGINCLUDE
    uniform sampler2D _MainTex;
    uniform int _BlurSample;        //模糊采样个数
    uniform fixed _BlurBias;        //模糊采样偏移
    uniform fixed _BlurFactor;      //模糊步长系数
    uniform float2 _BlurCenter;     //模糊中心点(屏幕空间坐标点)

    #include "UnityCG.cginc"

    fixed4 frag(v2f_img i) : SV_Target{ 
        float2 bias = (_BlurCenter - i.uv.xy) * _BlurBias;  //模糊偏移值:由中心点到像素点的方向的偏移矢量
        float2 step = (i.uv - _BlurCenter) / _BlurSample * _BlurFactor; //计算模糊步长:决定了采样点的位置
        float2 uv = i.uv + bias;
        float4 outColor = 0;    
        for (int j = 0; j < _BlurSample; j++){                  
            uv += step;                         
            outColor += tex2D(_MainTex, uv);
        }   
        outColor /= _BlurSample;                    
        return outColor; 
    }
    ENDCG

    SubShader{
        Pass{
            ZTest Always
            Cull Off
            ZWrite Off
            Fog{ Mode off } 
            CGPROGRAM   
            #pragma fragmentoption ARB_precision_hint_fastest   
            #pragma vertex vert_img                             
            #pragma fragment f
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值