【Unity Shader】(十) ------ UV动画原理及简易实现

 笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题。

 

 

2.1 准备工作

(1)创建一个场景,这次为了效果明显,我们去掉天空盒子

(2)创建一个 Quad,一个 Material,一个 shader,命名为 SequenceAnimation

(3)准备一张序列帧图像,这里笔者使用的是一张包含了 4 x 4 张关键帧的图像

这 16 张关键帧图像的大小相同,我们要实现的是让它们从左到右,从上到下播放。所以我们要做的就很简单了,只需要在播放时记录下应该播放的关键帧的位置(UV坐标),然后进行采样就行了。

 

2.2 Shader 实现

序列帧图像往往被当成是一个半透明对象,所以我们以对待半透明对象的方法来对待它。如果对半透明原理及实现方法不熟悉的读者可以翻看这篇博文 

1     Properties 2     { 3         _Color ("Color", Color) = (1,1,1,1) 4         _MainTex ("Sequence Image", 2D) = "white" {} 5         _Speed("Speed", Range(1,100)) = 50 6         _HorizontalAmount ("Horizontal Amount",float) = 4 7         _VerticalAmount ("Vertical Amount",float) = 4 8     }
复制代码
 

MainTex 对应着我们准备的序列帧图像,Speed 代表播放速度,HorizontalAmount 和 VerticalAmount 代表着图像在水平方向和竖直方向包含的关键帧图像个数。

 

II.定义 Tags

复制代码
1 Tags{"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent"}
复制代码

序列帧图像一般都是透明纹理,所以这里我们设置为 Transparent

 

III. 定义相关属性与做出声明

复制代码
 1             Tags{"LightMode" = "ForwardBase"}  2             ZWrite Off  3             Blend SrcAlpha OneMinusSrcAlpha  4   5             CGPROGRAM  6             #pragma multi_compile_fwdbase  7             #include "UnityCG.cginc"  8             #pragma vertex vert  9             #pragma fragment frag 10  11             fixed4 _Color; 12             sampler2D _MainTex; 13             float4 _MainTex_ST; 14             float _Speed; 15             float _HorizontalAmount; 16             float _VerticalAmount;
复制代码

由于是半透明物体,所以我们关闭深度写入并开启混合。定义与 Properties 块中想匹配的属性

 

IV. 定义输入输出结构体

复制代码
 1             struct a2v  2             {  3                 float4 vertex : POSITION;  4                 float4 texcoord : TEXCOORD0;  5             };  6   7             struct v2f  8             {  9                 float4 pos : SV_POSITION; 10                 float2 uv : TEXCOORD0; 11             };
复制代码

 

这个 shader 中我们主要是计算关键帧的位置和纹理采样,所以输入输出结构体我们不需要太复杂

 

V. 定义顶点着色器

复制代码
1             v2f vert(a2v v) 2             { 3                 v2f o; 4                 o.pos =
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信