庄懂18课 序列帧动画,极坐标

庄懂老师https://space.bilibili.com/6373917?spm_id_from=333.788.b_765f7570696e666f.1

序列帧动画

两层PASS,AB+AD 

Shader "Unlit/sequence"
{
	Properties{
    _MainTex       ("RGB:颜色 A:透贴",2d)="white"{}
	_Opacity       ("透明度",range(0,1))=0.5
	_Sequence      ("序列帧",2d)="geay"{}
	_RowCount      ("行数",int)=1
	_ColConut       ("列数",int)=1
	_Speed         ("速度",range(1,20))=5

	}
		SubShader{ 
            Pass {
            Name"AB"

			Tags {
            "LightMode" = "ForwardBase"
            "Queue"="Transparent"
			"RenderType"="TransparentCutout" // 对应改为Cutout(在此处无用,为了规范以及其他情况可能使用)
            "ForceNoShadowCasting"="True" // 关闭阴影投射
            "IgnoreProjector"="True" // 不响应投射器       
			}
            Blend One OneMinusSrcAlpha


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

			uniform sampler2D _MainTex;
			 uniform half _Opacity;
			 


		struct VertexInput {
			float4 vertex : POSITION; //老朋友顶点位置
			float2 uv0:TEXCOORD0;     //uv信息采样贴图用
		};
		struct VertexOutput {
			float4 pos : SV_POSITION;
			float2 uv0:TEXCOORD0;
		};
		VertexOutput vert(VertexInput v) {
			VertexOutput o = (VertexOutput)0;
			o.pos = UnityObjectToClipPos(v.vertex);
		    o.uv0 =v.uv0;
			return o;
		}
		float4 frag(VertexOutput i) : COLOR {
			half4 var_MainTex=tex2D(_MainTex,i.uv0); //采样贴图 RGB颜色 A透贴
			half3 finalRGB= var_MainTex.rgb;
			half opacity = var_MainTex.a * _Opacity;
           return half4(finalRGB*opacity,opacity);
		}
		ENDCG
	}
     Pass {
			Tags {         
             "Queue"="Transparent"
			"RenderType"="TransparentCutout" // 对应改为Cutout(在此处无用,为了规范以及其他情况可能使用)
            "ForceNoShadowCasting"="True" // 关闭阴影投射
            "IgnoreProjector"="True" // 不响应投射器
			"LightMode" = "ForwardBase"       
			}
            Blend One One


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

	        uniform sampler2D _Sequence;  uniform float4 _Sequence_ST;
		    uniform half _RowCount;
			uniform half _ColConut;
			uniform half _Speed;


		struct VertexInput {
			float4 vertex : POSITION; //老朋友顶点位置
			float2 uv0:TEXCOORD0;     //uv信息采样贴图用
			float3 normal: NORMAL ;
		};
		struct VertexOutput {
			float4 pos : SV_POSITION;
			float2 uv0:TEXCOORD0;
		};
		VertexOutput vert(VertexInput v) {
			VertexOutput o = (VertexOutput)0;
			v.vertex.xyz += v.normal *0.0005;
			o.pos = UnityObjectToClipPos(v.vertex);
		    o.uv0 =TRANSFORM_TEX(v.uv0,_Sequence);                              //UV信息  支持Tilling Offset
			float id =floor(_Time.y*_Speed);
            float idV = floor(id/_ColConut);  //获取列数
			float idU = id-idV*_ColConut;    //获取行数
			float stepU =1.0/_ColConut;      //获取单个图片列步幅
			float stepV =1.0/_RowCount;      //获取单个图片行步幅
			float2 initUV = o.uv0 * float2(stepU,stepV) + float2(0.0,stepV*(_RowCount-1));//初始序列帧位置
			o.uv0 = initUV + float2(idU*stepU,-idV*stepV);
			return o;
		}
		float4 frag(VertexOutput i) : COLOR {
			half4 var_Sequence=tex2D(_Sequence,i.uv0); //采样贴图 RGB颜色 A透贴
			half3 finalRGB=var_Sequence.rgb;
			half opacity = var_Sequence.a;
           return half4(finalRGB*opacity,opacity);
		}
		ENDCG

	}
	}
		FallBack "Diffuse"

}


unityUV在左下角,有些序列帧开始图位置不一样需要修正

极坐标

Shader "Unlit/co15-coordinator"
{
    Properties
    {
        _MainTex ("RGB:颜色 A:透贴", 2D)  = "gray" {}
		_Opacity ("透明度",range(0,1))      = 0.5
		[HDR]_Color("颜色",color)           = (1.0,1.0,1.0,1.0)
    }
    SubShader
    {
        Tags { 
		"Queue"               = "Transparent" //加个渲染序列,调整渲染顺序
		"RenderType"          = "Transparent"
		"ForceNoShadowCasting"= "True"  //特效里默认关闭阴影投影
		"IgnoreProjector"     = "True"  //特效里默认不响应投射器
		}

        Pass
        {
		    Name "Forward_AB"
		    Tags{"LightMode" = "ForwardBase"}
			Blend One OneMinusSrcAlpha  //修改混合方式
            
			CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"


			uniform sampler2D _MainTex;
			uniform float4    _MainTex_ST;
			uniform half      _Opacity;
			uniform half3     _Color;

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv0 : TEXCOORD0;
				float4 color :  COLOR;   //追加顶点色
            };

            struct v2f
            {
                float2 uv0 : TEXCOORD0;
                float4 pos : SV_POSITION;
				float4 color :  COLOR;
            };

           

            v2f vert (appdata v)
            {
                v2f o;
                o.pos= UnityObjectToClipPos(v.vertex);
                o.uv0 = TRANSFORM_TEX(v.uv0, _MainTex);//视频中删掉我觉得怪可惜的,可以尝试别的贴图可能有不错效果呢
                o.color=v.color;
				return o;
            }

            fixed4 frag (v2f i) : COLOR
            {
			    i.uv0       = i.uv0- float2(0.5,0.5);
				float theta = atan2(i.uv0.y,i.uv0.x);
				theta       = theta/3.14159*0.5+0.5;
				float r     = length(i.uv0)+frac(_Time.x*3);
				i.uv0       = float2(theta,r);

                half4 var_MainTex = tex2D(_MainTex, i.uv0);
			    half3 finalRGB    = (1-var_MainTex.rgb)*_Color;
				half opacity      = (1-var_MainTex.r)*_Opacity*i.color.r;
                return half4(finalRGB*opacity,opacity);
            }
            ENDCG
        }
 }
}
		

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值