尝试入门Shader
本文仅为边学边记录的流水账。
想优先验证一下自己的想法的可行性,能不能在Unity中自行绘制一些数据。
大概是要用到Shader,找到《Unity Shader 入门精要》,里面应该会有我想要的东西。
快速刷到3.1章,就可以上手尝试了。
在Unity中我们需要配合使用材质(Material)和Unity Shader才能达到需要的效果。
一个最常见的流程是:
(1)创建一个材质;
(2)创建一个Unity Shader,并把它赋给上一步中创建的材质;
(3)把材质赋给要渲染的对象;
(4)在材质面板中调整Unity Shader的属性,以得到满意的效果。
跟着1234走一遍。
创建shader的时候有4个模版,分别表示:
Standard Surface Shader会产生一个包含了标准光照模型的表面着色器模板,
Unlit Shader则会产生一个不包含光照(但包含雾效)的基本的顶点/片元着色器,
Image Effect Shader则为我们实现各种屏幕后处理效果提供了一个基本模板。
Compute Shader会产生一种特殊的Shader文件,这类Shader旨在利用GPU的并行性来进行一些与常规渲染流水线无关的计算。
Unity Shader是Unity为开发者提供的高层级的渲染抽象层。ShaderLab是Unity提供的编写Unity Shader的一种说明性语言。
一个典型的ShaderLab语义块如下

- 表面着色器写在SubShader里面,是对顶点/片元着色器的抽象,并处理了光照细节。

- 顶点/片元着色器是写在Pass里面的,更复杂也更灵活

顶点/片元着色器的代码也需要定义在CGPROGRAM和ENDCG之间,也是使用CG/HLSL编写的
可以使用GLSL来写吗?
当然可以。这意味着你可以发布的目标平台就只有Mac OS X、OpenGL ES 2.0或者Linux,而对于PC、Xbox 360这样的仅支持DirectX的平台来说,你就放弃它们了。
你可以怎么写呢?
和CG/HLSL需要嵌套在CGPROGRAM和ENDCG之间类似,GLSL的代码需要嵌套在GLSLPROGRAM和ENDGLSL之间。