原文写的确实挺好的,说的内容也挺详细,最主要是刚入门的小白能够看明白,不过有个别的地方有错误,不过我都在下方评论粘出来了,也是为了避免跟我一样的小白掉到坑里去。
Shader "Custom/Study"
{
Properties
{
_Color("Color",Color) = (1,1,1,1)
_MainTex("Texture",2D) = "white"{}
_Range("Range",Range(0,1)) = 1
_ExtrudeAmount("Extrue Amuount",float) = 0
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vertexFunction
#pragma fragment fragmentFunction
#include "UnityCG.cginc"
struct a2v
{
float4 vertex:POSITION;//顶点坐标
float2 uv:TEXCOORD0;//uv纹理
float3 normal:NORMAL;
};
struct v2f
{
float4 position:SV_POSITION;//sv指的是system value
float2 uv:TEXCOORD0;//uv 纹理
};
float4 _Color;
sampler2D _MainTex;//获取这个属性在cg中使用 sampler2D 2d图片关键字
float _Range;//range
float _ExtrudeAmount;
v2f vertexFunction(a2v v)
{
v2f o;
//顶点拉伸扩散
//sin(_Time.y) _Time是代表时间变量被包含在UnityCH.cginc中,y值代表秒
v.vertex.xyz+=v.normal.xyz*_ExtrudeAmount/**sin(_Time.y)*/; //sin(_Time.y)pingbong
//Unity提供的APIUnityObjectToClipPos()
//(将世界空间的模型坐标转换成裁剪空间,
//函数内部封装了实现顶点坐标变换的具体细节,矩阵等等)
o.position = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 fragmentFunction(v2f i):SV_TARGET
{
float4 _mT = tex2D(_MainTex,i.uv);
clip(_mT.rgb-_Range);
return _mT *_Color;//对纹理进行采样 tex2D()
//想让model显示color又显示贴图 在return的时候贴图跟color进行相乘
}
ENDCG
}
}
FallBack "Diffuse"
}