Unity Shader学习(五)---动画与屏幕特效

本文详细介绍了Unity中实现动画与屏幕特效的技术,包括利用内置时间进行序列帧、顶点和广告牌动画,以及屏幕后处理如亮度、饱和度和对比度调整。同时讲解了边缘检测和高斯模糊的卷积原理及其在Shader中的应用。
摘要由CSDN通过智能技术生成

(一)Unity内置的时间

_Time float4 t是自游戏开始所经过的时间,(t/20,t,2t,3t)

_SinTime float4 t是时间的正弦值 (t/8,t/4,t/2,t)

_CosTime float4 t是时间的余弦值 (t/8,t/4,t/2,t)

unity_DeltaTime float4 dt是时间增量 (dt,1/dt,smoothDt,1/smoothDt)

(二)纹理动画

(1)序列帧动画

需要一张关键帧的图像

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

Shader "Unity Shaders Book/Chapter 11/Image Sequence Animation" {
    Properties {
        _Color ("Color Tint"Color) = (1111)
        _MainTex ("Image Sequence"2D) = "white" {}
        _HorizontalAmount ("Horizontal Amount"Float) = 4
        _VerticalAmount ("Vertical Amount"Float) = 4
        _Speed ("Speed"Range(1100)) = 30
    }
    SubShader {
        Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
        
        Pass {
            Tags { "LightMode"="ForwardBase" }
            
            ZWrite Off
            Blend SrcAlpha OneMinusSrcAlpha//透明度混合
            
            CGPROGRAM
            
            #pragma vertex vert  
            #pragma fragment frag
            
            #include "UnityCG.cginc"
            
            fixed4 _Color;
            sampler2D _MainTex;
            float4 _MainTex_ST;
            float _HorizontalAmount;
            float _VerticalAmount;
            float _Speed;
              
            struct a2v {  
                float4 vertex : POSITION; 
                float2 texcoord : TEXCOORD0;
            };  
            
            struct v2f {  
                float4 pos : SV_POSITION;
                float2 uv : TEXCOORD0;
            };  
            
            v2f vert (a2v v) {  
                v2f o;  
                o.pos = UnityObjectToClipPos(v.vertex);  
                o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);  
                return o;
            }  
            
            fixed4 frag (v2f i) : SV_Target {
                float time = floor(_Time.y * _Speed);  //时间与速度相乘后在通过下面计算得到行和列
                float row = floor(time / _HorizontalAmount);
                float column = time - row * _HorizontalAmount;
                
//                half2 uv = float2(i.uv.x /_HorizontalAmount, i.uv.y / _VerticalAmount);
//                uv.x += column / _HorizontalAmount;
//                uv.y -= row / _VerticalAmount;
                half2 uv = i.uv + half2(column, -row);
                uv.x /=  _HorizontalAmount;
                uv.y /= _VerticalAmount;
                
                fixed4 c = tex2D(_MainTex, uv);
                c.rgb *= _Color;
                
                return c;
            }
            
            ENDCG
        }  
    }
    FallBack "Transparent/VertexLit"
}

(2)顶点动画

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

Shader "Unity Shaders Book/Chapter 11/Water" {
    Properties {
        _MainTex ("Main Tex"2D) = "white" {}
        _Color ("Color Tint", </

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值