当前位置:   article > 正文

Shader 特效实例 --- 屏幕后期特效_shader特效

shader特效

屏幕后期特效:

场景渲染完以后在添加一些特效。
1,引擎渲染后最终的结果是一张图片。

1, void OnRenderImage(RenderTexture sourceTexture, RenderTexture desTexture)
2, Graphics.Blit(sourceTexture, desTexture,mat);
sourceTexture拦截相机渲染出来的图片。
mat : 用哪个材质球重新渲染sourceTexture。
desTexture:更改以后的图片存在这里 重新交给引擎。

2,将图片传递给 shader 进行二次计算。

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/GaoSi"
{
	Properties
	{
		_MainTex ("Texture", 2D) = "white" {}


		_Ambient ("Ambient", float) = 0.001
	}
	SubShader
	{
		// No culling or depth
		Cull Off ZWrite Off ZTest Always

		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			
			#include "UnityCG.cginc"

			struct appdata
			{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct v2f
			{
				float2 uv : TEXCOORD0;
				float4 vertex : SV_POSITION;
			};

			v2f vert (appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv = v.uv;
				return o;
			}
			
			sampler2D _MainTex;


			float   _Ambient;

			fixed4 frag (v2f i) : SV_Target
			{

			   float2  tmpUV =  i.uv ;


			 //  float    ambient = 0.001 ;

				fixed4 col = tex2D(_MainTex, tmpUV);
				//  just invert the colors
				// col = 1 - col;


				fixed4 col2 = tex2D(_MainTex, tmpUV+float2(-_Ambient,0));


				fixed4 col3 = tex2D(_MainTex, tmpUV+float2(0,-_Ambient));

			  	fixed4 col4 = tex2D(_MainTex, tmpUV+float2(_Ambient,0));

			   fixed4 col5 = tex2D(_MainTex, tmpUV+float2(0,_Ambient));



			   col   =  (col + col2 +col3+col4+col5) /5.0 ;


				return col;
			}
			ENDCG
		}
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83

生命周期
在这里插入图片描述
在这里插入图片描述

Blood 血液闪烁特效:

1, 红色光线从两边闪出
在这里插入图片描述
圆心(-0.5,0.5) (1.5, 0.5)

2,红色有中间到两边渐变变浓。
通过圆心的距离判别渐变的过程。
Length : 求向量的模长
Lerp: (1-t) A + t * B - - -
Lerp (A,B,T)
Clamp(x, a , b) : 表示将 X 限制在 a 和 B 之间。
Material 更改shader 属性:
graphicMat.SetFloat
graphicMat.SetTexture



// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
	Shader "Hidden/Blood"
	{
	Properties
	{
		_MainTex ("Texture", 2D) = "white" {}
		_BloodLength (" length",float) = 0.5
	}
	SubShader
	{
		// No culling or depth
		//Cull Off ZWrite Off ZTest Always
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag			
			#include "UnityCG.cginc"

			struct appdata
			{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct v2f
			{
				float2 uv : TEXCOORD0;
				float4 vertex : SV_POSITION;
			};

			v2f vert (appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv = v.uv;
				return o;
			}
			
			sampler2D _MainTex;
			float _BloodLength;
			fixed4 frag (v2f i) : SV_Target
			{
			    float2  tmpUV =  i.uv ;
				float  tmpLength = 0 ;
				if(tmpUV.x < 0.5)
				{
				  	   tmpLength  =  length ( tmpUV - float2(-0.5 ,0.5)) ;
				}
				else
				{
				       tmpLength  =  length (float2(1.5 ,0.5)- tmpUV  ) ;
				}
				tmpLength  *= _BloodLength ;
				fixed4 col = tex2D(_MainTex, i.uv);
				col  = lerp(col,fixed4(1,0,0,1) , 1-clamp(tmpLength,0,1) ) ;
				return col;
			}
			ENDCG
		}
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Blood : MonoBehaviour {
	// Use this for initialization
	void Start () {		
	}

    float tmpCount;

	// Update is called once per frame
	void Update () {
        tmpCount += Time.deltaTime*5;
        rangValue =  Mathf.Sin(tmpCount) ;  //  -1   1
        rangValue = 1+(rangValue + 1) * 0.25f  ;   //  0 --0.5     //  1---1.	
	}

    public float rangValue;
    public Material graphicMat;
    void OnRenderImage(RenderTexture sourceTexture, RenderTexture desTexture)
    {
        graphicMat.SetFloat("_BloodLength", rangValue)   
        Graphics.Blit(sourceTexture, desTexture, graphicMat);
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

屏幕特效–波动屏幕

波动方程:
y=Asin(ωx+φ)
φ:决定波形与X轴位置关系或横向移动距离(左加右减)
ω:决定周期(最小正周期T=2π/∣ω∣)
A:决定峰值(即纵向拉伸压缩的倍数)

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Hidden/Wave"
{
	Properties
	{
		_MainTex ("Texture", 2D) = "white" {}
		_Arange("Amplitute",float) = 1
		_Frenquncy("Frenquncy",float) = 0.5
		_Speed("Speed",float) = 0.5
	}

	SubShader
	{
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			
			#include "UnityCG.cginc"

			struct appdata
			{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct v2f
			{
				float2 uv : TEXCOORD0;
				float4 vertex : SV_POSITION;
			};


		   float   _Frenquncy ;

			float    _Arange ;

			float   _Speed ;


			v2f vert (appdata v)
			{
				  v2f o;
			      float  timer =  _Time.y *  _Speed ;
				  float  waver  = _Arange* sin(timer +  v.vertex.x *_Frenquncy );
				  v.vertex.y =  v.vertex.y + waver ;
				  o.vertex = UnityObjectToClipPos(v.vertex);
				  o.uv = v.uv;
				  return o;
			}
			
			sampler2D _MainTex;

	


			fixed4 frag (v2f i) : SV_Target
			{
				fixed4 col = tex2D(_MainTex, i.uv);
				// just invert the colors
				//col = 1 - col;
				return col;
			}
			ENDCG
		}
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/127778
推荐阅读
相关标签
  

闽ICP备14008679号