0%

Unity Shader 学习笔记-基础篇-1

1.一个基础的Unity Shader结构

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//起名与控制出现的位置 Shader->Unlit->S1
Shader "Unlit/S1"
{
/**************************************************************/
Properties
{
//属性的变量名字 ("显示在面板上的名字",类型)= 值
_MainTex ("Texture", 2D) = "white" {}

//所有属性的例子
// Numbers and sliders
_Int (" Int", Int)= 2 //整形
_Float ("Float", Float)=1.5 //浮点数
_Range("Range", Range(0.0, 5.0))=3.0 //范围
// Colors and Vectors
_Color ("Color", Color)=(1, 1,1,1) //颜色
_Vector ("Vector", Vector)=(2,3,6, 1)//向量
// Textures
_2D("2D",2D)=""{}
_Cube ("Cube", Cube)="white"{}//内置纹理
_3D("3D",3D)="back"{}
}
/************************************************************/

SubShader
{

Tags { "RenderType"="Opaque" }
/*一些Pass



*/
LOD 100
//pass过多会影响性能
Pass
{ //定义名称提高复用性 UsePass"MyShader/MYPASSNAME" Unity会把Pass名称转为大写
Name "MyPassName"
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog

#include "UnityCG.cginc"

struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};

struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
};

sampler2D _MainTex;
float4 _MainTex_ST;

v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}

fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
// apply fog
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
}

1.1 SubShader的RenderSetup和tags

1
2
3
4
5
6
7
8
9
10
11
SubShader 
{
//可选的
[Tags]

//可选的
[RenderSetup]

Pass{
}
//other Passes

SubShader_RenderSetup 渲染设置参数 例如双面渲染或者Cull剔除背面对正面进行渲染

1577523747076

SubShader_Tags 如何渲染 只有在SubShader里的tag

状态名称 设置指令 解释
Cull Cull Back Front |Off 设置剔除模式:剔除背面/正面/关闭剔除
ZTest ZTestLessGreaterLEqualGEqualEqualNotEqualAlways 设置深度测试时使用的函数
ZWrite ZWrite On Off 开启/关闭深度写入
Blend Blend SrcFactor DstFactor 开启并设置混合模式
1
Tags { "TagNamel" = "Valuel" "TagName2" ="Value2" )

1.2 SubShader里的Pass块

1

欢迎关注我的其它发布渠道