Hlsl是编写unity着色器的“丰富多彩”部分的语言。这些部分包含自定义逻辑,并最终决定在屏幕上的何处绘制内容。这是Microsoft与其Direct3D API配合使用以编写gpu程序的语言。严格来讲,大多数Unity着色器被标记为用CG编写,而CG是Graphs的缩写,但是CG与hlsl共享了大多数语法和功能,并于2012年弃用。从理论上讲,Unity还支持编写为OpenGL设计的语言glsl shader,但是由于有更多hlsl的示例。最终这些语言将转换为我们要导出到的平台所需要的任何语言,无论如何我们都会坚持使用hlsl。
对于在Unity中学习着色器,我建议您不要在此处开始编程。着色器调试起来很棘手,它们可以做的事情非常有限,而且在许多情况下,您必须朝与大多数编程上下文稍有不同的方向进行操作。因此,我假设您知道类型,变量,类,方法,循环,if语句等基础知识。
Builtin Types
下面是一些我们在写shader时候用到的HLSL的内置类型
标量值
在unity HLSL中数值类型不同的是,对于浮点数,为fixed half和float;对于整数,则为int和uint。在移动GPU上,fixed表示的是-2至2之间的数字,精度为1/256,half是16位浮点数,而float32位浮点数。 在台式机GPU上,所有这些值都是32位浮点数,因此你会看到我经常在各处使用float,但这是以后进行优化的一个不错的工具。整数是只能包含整数的数字,int可以包含正值和负值,uint只能包含负值,这可能会带来一点性能上的好处。此外,还有一个简单数据类型bool,它简单地保存值true或false,因此我们可