前言
开始着手写Unity Shader之前,有必要了解一下用什么语言来写,Unity支持自家的Surface Shaders,GLSL,Cg/HLSL这几种方式来写,经过比较决定使用Cg/HLSL来写,今天就来初步学习一下Cg/HLSL语言,为接下来的使用做准备。
为什么Cg/HLSL是最佳选择
- GLSL:Unity支持GLSL,这是OpenGL的Shader语言,在GLSLPROGRAM … ENDGLSL块中编写,Unity会将这部分代码编译到任何平台,但对Windows或游戏机支持的不好,如果只是做手游的Android和IOS平台,用Mac做开发可以选择GLSL.
- Surface Shaders:可以用Unity shader库做很酷的东西。但在移动设备上不一定有效果。Shader库封装了许多功能,简化了开发,但同时也失去了对手游需要的控制和性能选项。Surface Shader只是自动帮你完成那些需要手写的、重复的通用代码。你仍然是要用CG/HLSL语言来编写Surface Shader。
- Cg/HLSL:为什么要把Cg/HLSL放到一块呢。因为Cg和HLSL就是同一个语言只是由NVIDIA和Microsoft两家公司分别维护,现在NIVIDIA已经停止维护Cg了,Microsoft在维护HLSL.Cg/HLSL可以被编译到需要的任何设备,而且Unity和微软已经亲密的像兄弟一样,在Unity中新建shader,默认也是CG语言也就是HLSL语言,所以HLSL是Unity shader的首选。
先来看一段Unity中的CG程序
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
struct appdata_t
{
float4 vertex