Unity 表面主色器组成及编译指令
内容简介
surface shader 重组成部分:两个结构体以及编译指令
- 一、两个结构体(Input和SurfaceOutput)
- 二、编译指令
- 三、渲染管线中的流程(两个结构体和四个函数)
一、两个结构体(Input和SurfaceOutput)
1、Input结构体
(1)允许我们自定义
(2)内置变量:
a:float3 viewDir 定义视角方向
b:float4 screenPos 屏幕坐标位置
c:float3 worldPos 世界坐标位置
d:float3 worldRefl 世界坐标系反射向量(未修改Normal变量是使用此变量)
e:float4 whith COLOR semantic 每个顶点颜色的插值
f:float3 worldNormal 世界坐标系法线方向(未修改Normal变量是使用此变量)
g:float3 worldRefl; INTERNAL_DATA 世界坐标系反射向量(修改了Normal变量是使用此变量)
h:float3 worldNormal; INTERNAL_DATA 世界坐标系法线方向(修改了Normal变量是使用此变量)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
(3)自定义变量
纹理坐标:以uv_做前缀,纹理名称作为结尾
- 1
- 2
(4)结构体体内的变量只有在真正使用的时候才会被计算生成
2、SurfaceOutput结构体
(1)结构体内无法自定义变量
(2)标准结构体:
struct SurfaceOutput
{
fixed3 Albedo; // 反射光颜色
fixed3 Normal; // 法线方向
fixed3 Emission;// 自发光颜色
half Specular; // 高光反射系数(0到1范围内)
fixed Gloss; // 高光中发射的强度系数
fixed Alpha; // 透明通道
};
二:编译指令
1、代码写在CGPROGRAM和ENDCG之间,区别于CG他必须写在SubShader内部,而不能写在Pass内部2、编译指令格式:#program surface surfaceFunction lightModel[optionalparams](1)surfaceFunction通常就是名为surf的函数(函数名可以任意)必须指定,其固定格式为:
void surf(Input IN,inout SurfaceOutput o)
(2)lightModel 光照模型函数,必须指定,Unity内置了一些光照模型——Lambert(diffuse)和Blinn-Phong(Specular),默认情况下使用的是内置的Lambert模型
(3)optionalparams包含可用的指令类型,包括开启、关闭一些状态,设置生成pass类型、指定可选函数
(4)另外两种函数:vertex:VertextFuction和finalcolor:ColorFunction
三、渲染管线中的流程(两个结构体和四个函数)
vertex data—>vertex shader(vertexFuction函数)—>struct v2f_surf—>Frament shader(struct input—>surf函数—>struct SurfaceOutput—>LightingXXX光照函数—>initial color—>其他颜色的叠加—>colorFunction—>final color)
1、生成Vertex shader
(1)如果自定义了VertexFunction函数,Unity会在这里首先调用VertexFunction修改顶点数据,然后分析VertexFunction修改的数据,最会后通过Input结构体将修改结果存储到V2f_surf中;
(2)计算v2f_surf中其他默认的变量,主要包括pos、纹理坐标、mormal、vlight、lmap等;
(3)最后通过内置的TRANSEFR_VERTEX_TO_FRAGMENT指令将v2f_surf传递给下面的Frament Shader。
2、生成Framement Shader
(1)使用v2f_surf中的对应变量填充Input结构,例如纹理坐标等
(2)调用surfFunction函数填充SurfaceOutput结构;
(3)调用LightXXX光照函数得到初始化的颜色值;
(4)进行其他颜色的叠加。如果没有启用LightMap,这里会使用SurfaceOutput.Albedo和v2f_surf.vlight的乘积和原颜色值进行叠加;
(5)最后如果自定义了final函数,则调用他进行最后的颜色修改
上一篇: 骨质增生症应该如何预防?
下一篇: jquery绑定点击事件的三种写法
推荐阅读