我们在第八章创建了复杂的一个mesh,在这一章中,我们希望实现一个波动效果
9.1 正弦波动
我们先通过gif看一下这个效果
实现的原理很简单,就是让它的顶点的y分量根据时间呈现正弦波动
核心操作都是在顶点着色器完成。
以下是源码:
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
Shader "Unlit/t2"
{
Properties
{
_Color("Color",Color) = (1,1,1,1)
_MainTex("Texture", 2D) = "white" {}
}
SubShader
{
Tags {"Queue" = "Transparent" }
LOD 100
Pass
{
ZWrite Off
CGPROGRAM
#pragma vertex vertex
#pragma fragment fragment
// make fog work
// #pragma multi_compile_fog
#include "UnityCG.cginc"
struct fromCpu
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : POSITION;
float4 color: COLOR0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
fixed4 _Color;
v2f vertex(fromCpu v)
{
v2f o;
v.vertex.y = sin(v.vertex.x + _Time.y*20);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.color = fixed4(0.3,0.3,0.3, v.vertex.y);
return o;
}
fixed4 fragment(v2f i) : SV_Target
{
return _Color;
}
ENDCG
}
}
}
9.2 波峰
顶点效果是通过x,和z分量的正弦叠加
颜色效果是通过在顶点着色器计算顶点颜色,然后将其丢给着色器,逐片元着色,完成即可。
源码:
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
Shader "Unlit/t2"
{
Properties
{
_Color("Color",Color) = (1,1,1,1)
_MainTex("Texture", 2D) = "white" {}
}
SubShader
{
Tags {"Queue" = "Transparent" }
LOD 100
Pass
{
ZWrite Off
CGPROGRAM
#pragma vertex vertex
#pragma fragment fragment
// make fog work
// #pragma multi_compile_fog
#include "UnityCG.cginc"
struct fromCpu
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : POSITION;
float4 color: COLOR0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
fixed4 _Color;
v2f vertex(fromCpu v)
{
v2f o;
v.vertex.y = sin(v.vertex.x + _Time.y*20)+sin(v.vertex.z);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.color = fixed4(0,0,v.vertex.y,1);
return o;
}
fixed4 fragment(v2f i) : SV_Target
{
return i.color;
}
ENDCG
}
}
}