Unity Shader学习笔记(一)

一、什么是Shader?

shader中文名叫着色器,顾名思义就是给物体着色。那给什么物体着色呢?显而易见就是给屏幕上的物品着色。

二、为什么要学习shader?

相信大家都玩过游戏,游戏中的各种技能特效、河上的水波纹、以及游戏场景中仿真的一草一木那全都是由shader渲染而来的。

许多公司美术在需要某个效果的shader时,他们使用工具拖动来完成shader编写以达到他们想要的效果,但是通常这种shader如果不优化的话就会很消耗游戏性能。而我们学会shader后,在优化游戏时就可以对shader进行优化,以及编写美术需要的shader。

最最最重要的是:加薪工具,加薪工具,加薪工具!!!

三、UnityShader种类

通常来说unity分为三种:
1. Surface Shader(表面着色器)
2. Vertex/Fragment Shader(顶点/片元着色器)
3. Fixed Function Shader(固定函数着色器)

四、三种Shader的区别以及相同点:

1. Surface Shader(表面着色器)是unity自己创造的一种着色器代码类型。它需要的代码量很少, 但渲染的代价比较大。本质上与顶点/片元着色器是一样的。

2. Vertex/Fragment Shader(顶点/片元着色器)当unity提供一个表面着色器时,它在背后仍然把 它转换成顶点/片元着色器。顶点/片元着色器与表面着色器的不同之处在于前者的代码是写在Pass 语义块内而非CGPROGRAM和ENDCG之间。

3. Fixed Function Shader(固定函数着色器)为固定功能渲染管线的具体表现。通常作用于功能较 简单兼容比较老的机器。unity5.2后,所有固定函数着色器都会被unity编译成对应的顶点/片元着 色器,因此真正意义上的固定函数着色器已经不存在了。

相同点:
1. 都必须从唯一一个根Shader开始。
2. Prooerties参数部分,作用以及语法完全相同。
3. 具体功能都在SubShader里。
4. 都可以打标签和Fallback。
5. 表面着色器与顶点/片元着色器中CGPROGRAM和ENDCG之间的代码都是用CG/HLSL编写

五、代码示例

1、Surface Shader示例代码

2、Vertex/Fragment Shader示例代码

3、Fixed Function Shader示例代码

未完待续......

本文转自:游戏蛮牛,作者:DeadWind,转载此文目的在于传递更多信息,版权归原作者所有。

推荐阅读