unity—shader
- 着色器概述
- Properties定义
- SubShader
- Tags
- Pass
- RegularPass渲染设置
- 其他特殊通道
着色器概述
9.18
- shader概述
1.shader是给GPU执行的程序(可以附加动态贴图)
着色器是运行在图形处理单元上,可以让开发人员直接操作图形硬件渲染功能。
( UV动画,水,雾模型。)
2.shader分为三种:
固定管线着色器;
顶点(片元)着色器:干预模型的shader;
表面(像素)着色器:干预像素着色的shader;
3.Direct3D与OpenGL都是显卡驱动的接口
HLSG支持Direct3d,Cg两者都支持,GLSL支持OpenGL;
unity使用ShagerLab来进行着色程序的编写(Cg); - ShaderLab语法基础
1.定义一个shader,每一个着色程序都要有一个Shader
Shader"name"//name shader名字
{
[Propeties]//定义一些属性,定义在这里的会在属性查看器里面显示;
Subshaders;{...}//子着色器列表,一个Shader必须至少有一个子着色器;
[Fallback]//如果子着色器显卡不支持,就会降级,即Fallback操作;
}
Properties定义
- 1.name(“display name”,type)=值;
name指的是属性的名字,unity中用下划线开始 _Name;
display name是属性检查器的名字器的名字;
type:这个属性的类型;
值:这个属性的默认值; - 2.类型:
Float,Int,Color,(num,num,num,num)(0~1) Vector(4维向量) Range(start,end)
2D:2D纹理属性;
Rect:矩形纹理属性;
Cube:立方体纹理属性;
3D:3D纹理属性;
name(“displayname”,2D)=“name”{options} - 3.Options:纹理属性选项
TexGen:纹理生成模式,纹理自动生成纹理坐标的模式;顶点shader将会忽略这个选项;
CubeNormal…
LightmapMod:光照贴图模式如果设置这个选项,纹理会被渲染器的光线贴图所影响。
举例:1. _ Range(“range value”,Range(0,1))=0.3;//定义一个范围,初始值是0.3
2._ Color(“color”,Color)=(1,1,1,1);//定义一个颜色
3._ FloatValue(“float value”,Float)=1//定义一个浮点
4. _ MainTex(“Albedo”,Cube)=“skybox”{TexGen CubeReflect }//定义一个立方贴图纹理属性;
SubShader
- 1.SubShader{[Tags],[CommonState],pass{}}
括号里的内容是:标签,通用状态,通道列(每个着色器中可以有多个通道)) - 2.当子通道进行渲染的时候,它将优先渲染一个被每个通道所定义的对象。
- 3.通道的类型分为:RegularPass,UsePass,GrabPass (后面会有介绍)
- 4.如果在通道中定义状态同时对整个子着色器可见,那么所有的通道可以同时共享状态。
Tags
- 标签类型
Queue tag队列标签;
RenderType tag渲染类型标签;
DisableBatching tag禁用批处理标签;
ForceNoShadowCasting Tag强制不投影标签;
IgnoreProjecttor忽略投影标签;
CanUseSpriteAtlas Tag使用精灵图形集标签;
PreviewType Tag预览类型标签;
Pass
- 基本语法
Pass{[Name and tags] [RenderSetup] [ Texture Setup]} 可以在其他着色器中引用此Pass(通过名字找到),并且Name必须大写
RegularPass渲染设置
- 1.Lighting 光照:开启关闭定点光照On/Off
- 2.Material{材料块}:材质,定义一个使用定点光照管线的材质
- 3.ColorMaterial:颜色集,计算顶点光照时使用顶点颜色;
- 4.SeparateSpecular:开光状态,开启或关闭定点光照相关的镜面高光颜色,On/Off;
- 5.Color:设置定点光照关闭时所使用的颜色;
- 6.Fog{雾块}:设置雾参数;
- 7.AlphaTest:Alpha测试;
- 8.ZTest:深度测试模式;
- 9.ZWrite:深度写模式;
- 10.Blend:混合模式SourceBlendMode,DestBlendMode,AlphaSourcesBlendMode,AlphaDsBlendMode;
- 11.ColorMask:颜色遮罩:设置颜色遮罩,颜色值可以由RGB或A或0或R,G,B,A,的组合,设置为0关闭所有颜色通道渲染;
- 12.Offset:偏移因子:设置深度偏移;