游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2313

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 619|回复: 9

[海莉zhe] 【每日一记】Unity3D 实战练习-径向模糊屏幕特效 Shader (九)【小白篇】

[复制链接]  [移动端链接]
排名
608
昨日变化

67

主题

234

帖子

3028

积分

Rank: 9Rank: 9Rank: 9

UID
76890
好友
87
蛮牛币
4316
威望
0
注册时间
2015-3-4
在线时间
1093 小时
最后登录
2018-9-21

专栏作家

发表于 2018-6-6 20:55:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
   
      今天小编分享一下一个有关径向模糊屏幕特效的Shader,其实在游戏中,我们总有一些小需求,需要让整个画面屏幕慢慢变模糊的。所以今天就和小编一起来学习简单写一个这样的一个小项目。

       1.新建Unity项目,首先先建一个运动模糊特效标准版.Shader  文件;

          运动模糊特效标准版.Shader  代码如下:

            
[C#] 纯文本查看 复制代码
Shader "Shader 编程/1.运动模糊特效标准版" {
        Properties
        {
         _MainTex("主纹理",2D)="white"{}

         _IterationNumber("迭代次数",Int)=16
        }

        SubShader
        {
         Pass
         {
          //设置深度测试模式:渲染所有像素 等同于关闭透明测试
          ZTest Always
          CGPROGRAM
          //编译指令 指定颜色编译目标 Shader Model 3.0
          #pragma target 3.0
          //告知着色器编译目标顶点和片段函数的名称
          #pragma vertex vert
          #pragma fragment frag
          //包含辅助CG 头文件
          #include "UnityCG.cginc"
          //外部变量
          uniform sampler2D _MainTex;
          uniform float _Value;
          uniform float _Value2;
          uniform float _Value3;
          uniform int _IterationNumber;
          //顶点输入结构
          struct vertexInput
          {
            float4 vertex:POSITION;//顶点位置
            float4 color:COLOR;//颜色值
            float2 texcoord:TEXCOORD0;//一级纹理坐标
          };
          //顶点输出结构
          struct vertexOutput
          {
           half2 texcoord :TEXCOORD0;//一级纹理坐标
           float4 vertex:SV_POSITION;//像素位置
           fixed4 color:COLOR;//颜色值
          };
          //
          vertexOutput vert(vertexInput Input)
          {
           //声明一个输出结构对象
           vertexOutput Output;
           //填充此输出结构  顶点位置为模型视图投影矩阵乘以顶点位置 将三维空间中投影到了二维窗口
           Output.vertex=UnityObjectToClipPos(Input.vertex);
           //输出的纹理坐标也就是输入的纹理坐标
           Output.texcoord=Input.texcoord;
           //输出的颜色值也就是输入的颜色值
           Output.color=Input.color;
           //返回此输出结构对象
           return Output;
          }
          //输入 顶点输出结构 float4 型的颜色值
          float4 frag(vertexOutput i):COLOR
          {
            //设置中心坐标
            float2 center=float2(_Value2,_Value3);
            //获取纹理坐标 xy 坐标值
            float2 uv=i.texcoord.xy;
            //纹理坐标中心位置进行了一个偏移
            uv -=center;
            //初始化一个颜色值
            float4 color=float4(0.0,0.0,0.0,0.0);
            //将Value 乘以一个系数
            _Value *= 0.085;
            //设置坐标缩放比例的值
            float scale =1;
            //进行纹理颜色的迭代
            for(int j=1;j<_IterationNumber;++j)
            {
              //将主纹理在不同的坐标采样下颜色值进行迭代累加
              color +=tex2D(_MainTex,uv * scale +center);
              //坐标缩放比例依据循环参数的改变而变化
              scale =1+(float(j*_Value));
            }

            //将最终颜色值除以迭代次数 取平均值
            color /= (float)_IterationNumber;
            //返回最终的颜色值
            return color;
          }
          ENDCG
         }
        }
}

        2.然后新建一个MotionBlurEffects.cs 应用径向模糊特效功能(脚本需要挂在Camera组件的对象上);

           MotionBlurEffects.cs 代码如下:
           
           
[C#] 纯文本查看 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class MotionBlurEffects : MonoBehaviour {

        #region
        public Shader CurShader;
        private Vector4 ScreenResolution;
        private Material CurMaterial;
        [Range(5,50)]
        public float IterationNumber = 15;

        [Range(-0.5f,0.5f)]
        public  float Intensity = 0.125f;


        [Range(-0.5f,0.5f)]
        public  float OffsetX = 0.5f;

        [Range(-0.5f,0.5f)]
        public  float OffsetY = 0.5f;

        public static float ChangeValue;
        public static float ChangeValue2;
        public static float ChangeValue3;
        public static float ChangeValue4;

        public string ShaderName = "Shader 编程/1.运动模糊特效标准版";
        #endregion


        Material material
        {
                get{ 
                        if (CurMaterial == null) {
                        
                                CurMaterial = new Material (CurShader);
                                CurMaterial.hideFlags = HideFlags.HideAndDontSave;
                        }
                        return CurMaterial;
                }
        }

        void Start()
        {
                ChangeValue = Intensity;
                ChangeValue2 = OffsetX;
                ChangeValue3 = OffsetY;
                ChangeValue4 = IterationNumber;

                if(CurShader==null)
                   CurShader = Shader.Find (ShaderName);

                if(!SystemInfo.supportsImageEffects)
                {
                        enabled = false;
                        return;
                }
        }

        void OnRenderImage(RenderTexture sourceTexture,RenderTexture destTexture)
        {
                if (CurShader != null) {
                        //设置Shader中的外部变量
                        material.SetFloat ("_IterationNumber", IterationNumber);
                        material.SetFloat ("_Value", Intensity);
                        material.SetFloat ("_Value2", OffsetX);
                        material.SetFloat ("_Value3", OffsetY);
                        material.SetVector ("_ScreenResolution", new Vector4 (sourceTexture.width, sourceTexture.height, 0.0f, 0.0f));

                        //拷贝源纹理到目标渲染纹理,加上我们的材质效果
                        Graphics.Blit (sourceTexture, destTexture, material);
                } else {
                        Graphics.Blit (sourceTexture,destTexture);
                }

        }

        void OnDisable()
        {
                if (CurMaterial)
                {
                        DestroyImmediate(CurMaterial);
                }
        }
}
   
        3.最后运行项目看效果哈!
          1_0.jpeg

          1_1.jpeg
           

回复

使用道具 举报

5熟悉之中
778/1000
排名
4779
昨日变化
21

0

主题

245

帖子

778

积分

Rank: 5Rank: 5

UID
279508
好友
0
蛮牛币
1351
威望
0
注册时间
2018-5-2
在线时间
251 小时
最后登录
2018-9-22
发表于 2018-6-7 09:46:27 | 显示全部楼层
感谢楼主分享
[发帖际遇]: h5n188332253 发帖时在路边捡到 2 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
3238/5000
排名
2047
昨日变化
15

0

主题

2116

帖子

3238

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
219676
好友
1
蛮牛币
2411
威望
0
注册时间
2017-7-12
在线时间
494 小时
最后登录
2018-9-21

活力之星

发表于 2018-6-7 10:23:35 | 显示全部楼层
谢谢分享

回复

使用道具 举报

7日久生情
2947/5000
排名
2460
昨日变化
6

0

主题

2107

帖子

2947

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
185339
好友
1
蛮牛币
4246
威望
0
注册时间
2016-11-20
在线时间
298 小时
最后登录
2018-9-21
发表于 2018-6-7 10:29:22 | 显示全部楼层
[发帖际遇]: 步行骑士 乐于助人,奖励 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
1912/5000
排名
4270
昨日变化
1

0

主题

1335

帖子

1912

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
267381
好友
5
蛮牛币
3200
威望
0
注册时间
2018-2-1
在线时间
257 小时
最后登录
2018-8-30
发表于 2018-6-7 11:54:02 | 显示全部楼层
谢谢分享

回复

使用道具 举报

排名
33170
昨日变化
26

0

主题

2

帖子

14

积分

Rank: 1

UID
247089
好友
0
蛮牛币
73
威望
0
注册时间
2017-10-3
在线时间
5 小时
最后登录
2018-6-21
发表于 2018-6-7 15:12:12 来自Mobile--- | 显示全部楼层
感谢楼主

回复

使用道具 举报

7日久生情
1629/5000
排名
3056
昨日变化
3

3

主题

867

帖子

1629

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
246489
好友
1
蛮牛币
2703
威望
0
注册时间
2017-9-28
在线时间
311 小时
最后登录
2018-9-17

活力之星

发表于 2018-6-7 18:22:58 | 显示全部楼层
谢谢分享

回复

使用道具 举报

排名
29891
昨日变化
23

0

主题

56

帖子

98

积分

Rank: 2Rank: 2

UID
128268
好友
0
蛮牛币
72
威望
0
注册时间
2015-11-8
在线时间
32 小时
最后登录
2018-6-8
发表于 2018-6-8 10:39:59 | 显示全部楼层
感谢大佬分享~~

回复

使用道具 举报

5熟悉之中
636/1000
排名
16072
昨日变化
12

0

主题

399

帖子

636

积分

Rank: 5Rank: 5

UID
199204
好友
0
蛮牛币
355
威望
0
注册时间
2017-1-5
在线时间
197 小时
最后登录
2018-9-20
发表于 2018-6-8 10:56:40 | 显示全部楼层
谢谢分享

回复

使用道具 举报

排名
25659
昨日变化
25

0

主题

26

帖子

46

积分

Rank: 1

UID
284877
好友
0
蛮牛币
17
威望
0
注册时间
2018-6-8
在线时间
6 小时
最后登录
2018-7-9
发表于 2018-6-8 11:35:48 | 显示全部楼层
感谢楼主分享

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表