Unity shader 介绍
Shader的分类
- 顶点着色器是一种程序在场景里的每个顶点将调用一次。如果你用一个正方形渲染一个简单的场景,每个角用一个顶点,这个将调用四次。他的工作是执行一些计算像光照,几何变化,等等。计算出最终的顶点的位置,也传输一些数据到片段着色器。
- 片段着色器 是一种程序在场景里的每个像素(顺序)将调用一次。如果你用一个正方形渲染一个相同简单的场景,在正方形覆盖的每个像素它将调用一次,片段着色器也能执行光照计算,等等。他们跟重要的工作是设置像素的最终颜色。
Unity3d三种Shader对比
三种Shader共同点: (1)都必须从唯一一个根Shader开始 (2)Properties参数部分,作用及语法完全相同 (3)具体功能都在SubShader里(Subshader: 子Shader,Shader会自上而下运行第一个硬件能支持的Subshader,主要作用是对不用硬件的支持。) (4)都可以打标签,例如Tags { "RenderType" = "Opaque" } LOD 200 以及Lighting On等 (5)都可以Fallback (6)都可以处理基本的功能,例如光照漫反射(Diffuse)以及镜面反射(Specular)。但是Vertex and Fragment和Surface都能实现Fixed function实现不了的高级功能,例如基于uv计算的效果等等。
三种Shader不同点: (1)Fixed function shader以及Vertex and Fragment Shader在subshader下面还有pass{},但是Surface Shader,由于已经将具体内容打包在光照模型了,不能加pass{},加了会报错。 (2)Fixed function shader每句代码之后没有分号';' 但是V&F shader以及Surface shader每句代码之后都必须加分号';' (3)核心结构不同: Fixed function shader的核心是 Material{} 以及 SetTexture[_MainTex]{}
Vertex and Fragment Shader的核心是
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #include "UnityCG.cginc"
- ENDCG
Surface Shader的核心是
(1)这套用的是Unity3d自带光照模型Lambert,也不做顶点处理,那么只需要一个表面处理函数surf即可
CGPROGRAM
#pragma surface surf Lambert
ENDCG
或者(2)这套表示使用的是自己写的光照模型lsyLightModel,并且使用了顶点处理函数vert
CGPROGRAM // surface 表面处理函数 光照模型函数 顶点处理:函数 #pragma surface surf lsyLightModel vertex:vert
//执行顺序 顶点处理函数 -> 表面处理函数 -> 光照模型函数 ->颜色值
ENDCG

浙公网安备 33010602011771号