# The Vertex Function

#### 難易度: 中級

In this live training session we will learn the fundamentals of authoring shaders for Unity and you will learn how to write your very first shader. In this episode we will review the code in the default unlit shader, starting with the vertex function.

## The Vertex Function

Note: The code below is not in fact C# code despite the label, it should go inside a new Shader file.

## Hologram

### Code snippet

``````Shader "Unlit/SpecialFX/Cool Hologram"
{
Properties
{
_MainTex ("Albedo Texture", 2D) = "white" {}
_TintColor("Tint Color", Color) = (1,1,1,1)
_Transparency("Transparency", Range(0.0,0.5)) = 0.25
_CutoutThresh("Cutout Threshold", Range(0.0,1.0)) = 0.2
_Distance("Distance", Float) = 1
_Amplitude("Amplitude", Float) = 1
_Speed ("Speed", Float) = 1
_Amount("Amount", Range(0.0,1.0)) = 1
}

{
Tags {"Queue"="Transparent" "RenderType"="Transparent" }
LOD 100

ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha

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;
};

sampler2D _MainTex;
float4 _MainTex_ST;
float4 _TintColor;
float _Transparency;
float _CutoutThresh;
float _Distance;
float _Amplitude;
float _Speed;
float _Amount;

v2f vert (appdata v)
{
v2f o;
v.vertex.x += sin(_Time.y * _Speed + v.vertex.y * _Amplitude) * _Distance * _Amount;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}

fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv) + _TintColor;
col.a = _Transparency;
clip(col.r - _CutoutThresh);
return col;
}
ENDCG
}
}
}``````