一步步学习 Unity Shader
Shaderlab
定义一个属性
语法:
1 | [var name]([Message], [Type]) = [Default value] |
举例:
1 | _FloatVal("Float Value", float) = 0.0 // 浮点数 |
子着色器(SubShader)
可以创建多个子着色器,但 Unity 只会获取第一个可以运行在用户图形硬件上的着色器,所以可以编写多个版本的子着色器来兼容不同的硬件。每个子着色器可以有多个通道(Pass)。
- Pass 可以有如下命令:
Cull off
关闭背面剪裁Blend SrcAlpha OneMinusSrcAlpha
开启混合ZWrite off
关闭深度写入
- CG
着色器代码包裹在CGPROGRAM
和ENDCG
两个关键词之间 - FallBack
如果编写的代码不能运行在当前的图形硬件上,系统就会自动将着色器切换到 FallBack 指定的着色器。例如:1
FallBack "Diffuse"
Vertex and fragment shader (顶点和片段着色器)
渲染管线(Rendering pipeline):Vertex shader (顶点着色器) —> Rasterizer (光栅化) —> Fragment shader (片段着色器) —> Framebuffer (帧缓冲)
Annexes (附加)
Variables in CG (CG 中的变量)
Sampler2D
表示 2D 纹理Bool
表示布尔值Float
、Half
、Fixed
均表示浮点数float2
、float3
、float4
分别表示二维、三维、四维向量。向量的分量可以用下面三种形式表示:- x, y, z, w
- r, g, b, a
- s, t, p, q
Structures (结构体)
一个结构体可以包含多个变量
Functions (方法)
方法封装了一个任务
Shader Semantics (Shader 语义)
语义表示了一个参数的目的。例如:float4 vertex : POSITION;
语句中的 POSITION
表示 vertex
变量用于一个位置。常见语义关键词有:
POSITION
位置COLOR
颜色NORMAL
法向量TANGENTE
切向量TEXCOORD
纹理坐标
参考链接
- http://www.shaderslab.com/shaders.html