(1)SubShader
Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个网格时,它能发现使用的着色器,并提取第一个能运行在当前用户的显示卡上的子着色器。该文章出自
【狗刨学习网】
当Unity选择用于渲染的子着色器时,它为每一个被定义的通道渲染一次对象(可能会更多,这取决于光线的交互作用)。当对象的每一次渲染都是一次昂贵的操作时,你能选择使用最小数目的通道来定义着色器。当然,有时在一些显示硬件上需要的效果不能通过单次通道来完成。除了使用多次通道你别无选择。
通道定义的类型包括a regular Pass, a Use Pass or a Grab Pass。
任何出现在通道定义的状态同时也能整个子着色器块中可见。这将使得所有通道共享状态。
这个着色器定义了一个单一的通道用来关闭任何光照,并只使用一个名叫_MainTex的纹理来显示网格。
(2)Pass
Syntax 语法
Pass { [Name and Tags] [RenderSetup] [TextureSetup] }
基本通道命令包含一个可选的渲染设置命令的列表,和可选的被使用的纹理的列表。 Name and tags 名称和标签
开启或关闭顶点光照,参考material页面。 Cull Back | Front | Off
设置多边形剔除模式 ZTest (Less | Greater | LEqual | GEqual | Equal | NotEqual | Always)
设置深度测试模式 ZWrite On | Off
设置深度写模式 Fog { Fog Block }
设置雾参数 AlphaTest (Less | Greater | LEqual | GEqual | Equal | NotEqual | Always) CutoffValue
开启alpha测试 Blend SourceBlendMode DestBlendMode
设置alpha混合模式 Color Color value
设置当顶点光照关闭时所使用的颜色 ColorMask RGB | A | 0 | any combination of R, G, B, A
设置颜色写遮罩。设置为0将关闭所有颜色通道的渲染 Offset OffsetFactor , OffsetUnits
设置深度偏移 SeparateSpecular On | Off
开启或关闭顶点光照相关的平行高光颜色, 参考material页面。 ColorMaterial AmbientAndDiffuse | Emission
当计算顶点光照时使用每顶点颜色, 参考material页面。 Texture Setup 纹理设置
基本通道命令包含一个可选的渲染设置命令的列表,和可选的被使用的纹理的列表。 Name and tags 名称和标签
一个通道能定义它的Name 和任意数量的Tags (用于向渲染引擎传递通道的意图的名称/值的字符串)。
Render Setup 渲染设置
通道设定显示硬件的各种状态,例如能打开alpha混合,能使用雾,等等。这些命令如下:
Material { Material Block }
定义一个使用顶点光照管线的材质,参考material页面。
Lighting On | Off
开启或关闭顶点光照,参考material页面。 Cull Back | Front | Off
设置多边形剔除模式 ZTest (Less | Greater | LEqual | GEqual | Equal | NotEqual | Always)
设置深度测试模式 ZWrite On | Off
设置深度写模式 Fog { Fog Block }
设置雾参数 AlphaTest (Less | Greater | LEqual | GEqual | Equal | NotEqual | Always) CutoffValue
开启alpha测试 Blend SourceBlendMode DestBlendMode
设置alpha混合模式 Color Color value
设置当顶点光照关闭时所使用的颜色 ColorMask RGB | A | 0 | any combination of R, G, B, A
设置颜色写遮罩。设置为0将关闭所有颜色通道的渲染 Offset OffsetFactor , OffsetUnits
设置深度偏移 SeparateSpecular On | Off
开启或关闭顶点光照相关的平行高光颜色, 参考material页面。 ColorMaterial AmbientAndDiffuse | Emission
当计算顶点光照时使用每顶点颜色, 参考material页面。 Texture Setup 纹理设置
在完成渲染设定后,你能指定一定数量的纹理和当使用 SetTexture 命令时所采用的混合模式:
SetTexture texture property { [Combine options] }
纹理设置 配置了 固定函数多纹理管线,当自定义fragment shaders 被使用时,将忽略这个设置。
Details 细节
Per-pixel Lighting 每像素光照
每像素光照管线通过多次通道渲染对象来完成。Unity渲染对象一次来获取阴影色和任何顶点光照。然后再在额外的并行通道中渲染出每像素光照的效果。参考Render Pipeline。
Per-vertex Lighting 每顶点光照
每顶点光照是标准的Direct3D/OpenGL光照模式,通过计算每个顶点的光照来完成。Lighting on命令开启光照。光照被材质块,颜色材质和平行高光命令所影响,参考material页面。