简介:unity shader是放入材质中,而材质放入到对象的mesh或者粒子系统中,通过在材质检视面板中修改shader属性值,从而达到修改渲染效果。而shaderlab就是用来编写unity shader的说明性语言,它对传统shader底层进行封装,让使用者不必操作太多的实现细节。
语法:
shader "着色器名名称" {
Properties {
着色器属性名(检视面板属性名,属性类型) = 属性值
}
SubShader {
// 可选的
[Tags]
// 可选的
[RenderSetup]
Pass {
}
// Other Passes
}
Other SubShaders
FallBack "回滚着色器名"
}
Properties属性使用规则:
1.Properties是为了方便在材质检视面板中查看并编辑shader属性使用,对应的属性需要在cg代码段中重新定义并关联。
2.Properties申明的变量常见类型如下:
half:16位精度的浮点类型,对应阶数是half(n),其中n取值范围为:[1,4]。对应的类型标志为h。
float:32位精度的浮点类型,对应阶数是float(n),其中n取值范围为:[1,4]。对应的类型标志为f。
fixed:12位精度的定点类型,对应阶数是fixed(n),其中n取值范围为:[1,4]。对应的类型标志为x。
int:32位精度的整数类型。
bool:布尔类型。
sampler:纹理对象类型。
SubShader属性使用规则:
1.SubShader必须包含一个,是用来供unity根据显卡的不同,动态选择适配的SubShader,所以我们可以针对不同的显卡做不同的SubShader实现,让渲染效果在当前显卡上表现的更优,要是unity没有发现一个合适的SubShader,此时就会找FallBack定义的默认shader。
2.SubShader中属性如下:
Tags:是用来告知unity怎样以及何时渲染。
RenderSetup:是用来设置渲染状态。
Pass:是渲染流程,用来封装渲染细节。
3.SubShader中可以编写3种类型的shader,分别如下:
顶点和片元着色器:在pass渲染流程块中,在CGPROGRAM和ENDCG之间使用CG/HLSL/GLSL等语法编写并嵌入到shaderlab语法中的着色器,用户可以定制具体的渲染效果。
注意:
1.模型是由三角面片组成,而每个三角面片又是又三个顶点组成,并且每个顶点又包含顶点坐标,法线方向,纹理坐标,切线方向,顶点颜色等数据信息。在unity shader中这些数据是由使用该shader所在材质的mesh render提供。
2.顶点着色器是逐个顶点的调用,它的输入实际上是模型顶点数据。
3.片元着色器是逐个片元的调用,它的输入实际上是顶点着色器的输出进行插值后得到的结果。
表面着色器:是unity在顶点和片元着色器上面的一层封装,用户不用在意具体实现细节,只需要给出渲染所需的参数。编写时也是在CGPROGRAM和ENDCG之间使用CG/HLSL/GLSL等语法编写并嵌入到shaderlab语法中的着色器,但不用放在pass渲染流程块中。
固定函数着色器:针对于早期不支持可编程渲染管线的gpu,在unity里面只能使用shaderlab语法进行编写。由于硬件更新速度快,这类型的gpu已经被淘汰了,而且unity自从5.2版本后也自动将这种类型的着色器自动转换成顶点和片元着色器,所以基本可以忽略。
FallBack属性使用规则:
1.FallBack就是unity提供的一条后路,用来在没有SubShader适配时,使用FallBack定义的shader进行渲染。
unity shader编写相关:
1.使用unity自带的mono工具进行编写,但是这个工具也只是对shaderlab语音进行高亮显示而已,没有提供智能api和cg/hlsl/glsl等语法的支持。
2.使用vs和sublime工具进行编写,这些工具需要安装相关的扩展插件,可以智能提示api以及代码跳转,语法高亮等,安装方式参见:http://www.cnblogs.com/zhaoqingqing/p/4117257.html
unity shader调试相关:
1.使用假彩色进行调试,也就是将计算结果通过映射成一个颜色值,然后在unity中观察这个颜色值,查看是否计算结果正确。这个调试过程比较传统。
2.unity的frame debugger,这个工具可以显示每一帧调用的详细信息,可以通过渲染事件调用的流程判定shader执行的过程是否正确。
3.可以使用RenderDoc工具来捕捉和回放每一帧的渲染,跟unity自带的frame debugger类似,但是数据信息以及查看方式比frame debugger要好,RenderDoc是由CryTek公司开发的工具,支持DirectX11+以及OpenGL两种主流图形渲染工具。安装方式参见:http://blog.csdn.net/wpapa/article/details/51204347
4.可以使用visual studio工具,安装相关插件进行调试shader每一行代码,推荐使用这种调试模式。安装方式参见:http://blog.csdn.net/u012632851/article/details/64124352