求教,关于Unity的Blur效果

 我来答
9秒青年
2015-08-24
知道答主
回答量:1
采纳率:0%
帮助的人:2万
展开全部

Blur模糊其实理解了以后非常简单。核心原理就是

1个点的颜色 并不用该点的颜色,而是用该点周围所有点的均值

(1)确定取点范围, 例如周围3个像素 或者周围10个像素

(2)确定各点权重,这也是高斯模糊的由来,主要颜色分配的比重为正态分布,即高斯分布。



例子1:最简单的模糊

(1)新场景,plane上面放一张贴图

(2)plane上的shader如下


Shader "Custom/ObjectBlur" {

    Properties {

        _MainTex ("Base (RGB)", 2D) = "white" {}

    }

    SubShader

    {

         Tags{"Queue"="Transparent"}

     

        pass

        {

            CGPROGRAM

            #pragma vertex vert

            #pragma fragment frag

           

            #include "UnityCG.cginc"

            sampler2D _MainTex;

            float4 _MainTex_ST;

            float uvOffset;

           

            struct v2f {

                float4  pos : SV_POSITION;

                float2  uv : TEXCOORD0;

            } ;

            v2f vert (appdata_base v)

            {

                v2f o;

                o.pos = mul(UNITY_MATRIX_MVP,v.vertex);

                o.uv =  TRANSFORM_TEX(v.texcoord,_MainTex);

                return o;

            }

            float4 frag (v2f i) : COLOR

            {

                float4 s1 = tex2D(_MainTex,i.uv + float2(uvOffset,0.00));

                float4 s2 = tex2D(_MainTex,i.uv + float2(-uvOffset,0.00));

                float4 s3 = tex2D(_MainTex,i.uv + float2(0.00,uvOffset));

                float4 s4 = tex2D(_MainTex,i.uv + float2(0.00,-uvOffset));

               

                float4 texCol = tex2D(_MainTex,i.uv);

                float4 outp;

               

                float pct=0.2;

                outp = texCol* (1- pct*4) + s1* pct + s2* pct+ s3* pct + s4* pct;

                return outp;

            }

            ENDCG

        }

    }

}


以及BlurManager.cs脚本,如下

using UnityEngine;

using System.Collections;

public class BlurManager : MonoBehaviour {

    private float length =3f;

    private float showTime = -100;

    private float hideTime = -100;

    void Update () {

        if(showTime >0)

        {

            showTime -= Time.deltaTime;

            Shader.SetGlobalFloat("uvOffset", (showTime/length) * 0.005f);

        }

       

        if(hideTime >0)

        {

            hideTime -= Time.deltaTime;

            Shader.SetGlobalFloat("uvOffset", (1- hideTime/length) * 0.005f);

        }

    }

   

    void OnGUI()

    {

        if(GUI.Button(new Rect(0,0,100,50),"Show"))

        {

            showTime = length;

        }

       

        if(GUI.Button(new Rect(100,0,100,50),"Hide"))

        {

            hideTime = length;

        }

    }

}

运行后,点击show按钮,图会从模糊变清晰,点击hide按钮会从清晰变模糊。

这基本是最简单的模糊了,取本点 和其上下左右的4个偏移点。各点权重均为0.2。uv偏移从0至0.005

效果如下图还不错。



原图

【风宇冲】Unity3D教程宝典之Blur

模糊后的效果

【风宇冲】Unity3D教程宝典之Blur

其他答案:
模糊后的效果

好像不能单独模糊,除非你分开摄像机;是对RenderTexture的处理~~~同一摄影机不能单独调节呢~~

在File菜单下点Build Settings。。。 然后选择Web Player或者flash player。。。 Web Player需要Unity自己的运行控件,不过效果更好。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
名片
2024-10-28 广告
Altair HyperWorks是一套功能强大的集成化CAE(计算机辅助工程)软件平台,由Altair公司开发。它涵盖了结构分析、流体动力学、优化、多体动力学、电磁场仿真等多个领域,提供了丰富的仿真工具和优化算法。HyperWorks以其... 点击进入详情页
本回答由名片提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式