一、UnityShader 的形态
在Unity的Graphics Reference ---Shader Reference(http://docs.unity3d.com/Manual/SL-Reference.html)里有介绍 unity shader 有三种写法,分别是:
surface shader
Vertex and fragment shader
fixed function shader
可编程图形管线中能编写的部分主要是两部分: 顶点程序 ,片段程序。
fixed function shader 是固定管线的shader ,在可编程管线硬件出现之前,很多光照计算放在硬件集进行处理。可以把这个固定管线的shader理解为固定管线集的操作。能在绝大多数的硬件上运行,能实现的功能如 简单的光照,纹理采样。
surface shader 是unity 推荐使用的shader。在unity里创建一个物理默认的shader 就是surface shader。为什么有surface shader呢? 图形管线能够识别的 只有两种程序 就是Vertex 和 Fragment shader。 surface shader 是在这两种shader上的包装,更方便我们编写shader 代码,最终unity还是会吧surface shader编译成Vertex 和 Fragment shader。
二、Shaderlab的基本结构
surface shader 的语法 : Shader Properties SubShader Pass Fallback CustomEditor
Properties 能定义一系列的参数在材质面板中显示,来调整已达到想要的效果,详细地址(http://docs.unity3d.com/Manual/SL-Shader.html)
Subshader 能定义一系列的shader 以适应不同的硬件设备,由上至下,一旦匹配就不再匹配了。
Shader "MyShader" {
Properties {
_MyTexture ("My Texture", 2D) = "white" { }
// other properties like colors or vectors go here as well
}
SubShader {
// here goes the 'meat' of your
// - surface shader or
// - vertex and program shader or
// - fixed function shader
}
SubShader {
// here goes a simpler version of the SubShader
// above than can run on older graphics cards
}
}
unity的shader 语法统一了 三种shader编写的方式。 材质是 定义了一个物体的呈现方式,它包含了物体的一系列信息如 贴图、顶点、shader,他就像是一个商品,而shader就是加工这个商品的加工方式,而贴图就是加工的原材料。
三、Build_In Shader
unity内建shader ,unity有很多内建shader