文章內使用Unity 2019 LTS
昨天介紹了反射,今天(Day23)預計要寫關於折射的文章的,但最近頭很痛,想早點休息,所以今天改為介紹「頂點動畫」。
一個禮拜前,我介紹了利用Shader寫出一個簡易動畫的方法,有興趣的讀者們這裡是傳送門,當中就利用了內建的_Time
變數,這次的頂點動畫,也會用到它
如同前幾次有說過一件事:
動畫就最基本的就是對物件進行位移、旋轉、縮放,然後累計在時間軸上,而又知道構成模型物件最小的單位是頂點,所以就是對頂點進行以上基本的操作。
首先,請先新增出一個「朋友」,這次我選擇了Plane,我想讓我的朋友像波浪一樣,上下擺動:
Shader "Learning/VertexAnimation"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_XSpeed("X Axis Speed",Range(0, 1)) = 0.25
_YSpeed("Y Axis Speed",Range(0, 1)) = 0.25
}
SubShader
{
Tags { "RenderType"="Opaque" }
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
float _XSpeed;
float _YSpeed;
v2f vert (appdata_base v)
{
v2f o;
// 重點其實就在這一行
// 上下擺動就是對Y軸進行操作
v.vertex.y += sin(_Time.y + v.vertex.x * _XSpeed + v.vertex.z * _YSpeed);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
return col;
}
ENDCG
}
}
}
完成的結果: