第一个代码学习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

//开头引号内存放路径
Shader "MyShader/BaseShader"{
//属性栏
Properties{
//声明一个Color类型属性
_Color("Color Tint",Color)=(1.0,1.0,1.0,1.0)
}
SubShader{
Pass{
CGPROGRAM
//告诉unity定义了vert和frag:顶点和片元着色器
#pragma vertex vert
#pragma fragment frag

//在Cg代码中需要定义一个与属性名称和类型都匹配的变量
fixed4 _Color;

//定义一个结构体来定义顶点着色器的输出
struct a2v{
//存放顶点位置
float4 vertex:POSITION;
//存放法线
float3 normal:NORMAL;
//用第0个纹理填充texcoord
float4 texcoord:TEXCOORD0;
};

//使用一个结构体定义顶点着色器的输出
struct v2f{
//把裁剪空间下的顶点坐标存放在pos
float4 pos:SV_POSITION;
//color用来存放颜色信息
fixed3 color:COLOR0;
};

//输入v:POSITION输入顶点位置,返回一个float4的变量
//SV_POSITION:表示输出的是裁剪空间的坐标,返回一个v2f的结构体
v2f vert(a2v v) {
//定义需要传出的变量
v2f o;
o.pos=UnityObjectToClipPos(v.vertex);
o.color=v.normal*0.5+fixed3(0.5,0.5,0.5);
return o;
}
//返回一个fixed4变量,SV_Target把输出的颜色输出到渲染目标中
fixed4 frag(v2f i) : SV_Target{
fixed3 c=i.color;
c*=_Color.rgb;
return fixed4(c,1.0);
}
ENDCG
}
}
}
  • 属性表

    ShaderLab属性类型 Cg变量类型
    Color,Vector float4,half4,fixed4
    Range,Float float,half,fixed
    2D sampler2D
    Cube samplerCube
    3D sampler3D
  • Cg变量前可能有uniform,可以省略