[Unity Shader]Shader学习笔记5 - ShaderLab语法: SubShader

每一个shader都由一列SubShader构成。真正用于呈现渲染物体的内容是在SubShader中实现的。Unity在实际运行时,会根据硬件状况从上到下选择最优的一个SubShader来执行。

语法

Subshader {
[Tags]
[CommonState]
Passdef [Passdef ...]
}html

细节

每一个SubShader都定义了一系列passes,并可对全部passes可选的设置任一状态。另外,还能够指定[Tags]。
当Unity选定了一个SubShader,它会对定义的每个pass都渲染一遍。有时在某些硬件某些复杂的渲染效果必须在多个pass中完成。函数

每一个pass均可以被定义成 regular PassUse Pass or Grab Pass.测试

Pass简介

一个pass块引发一次物体的几何学渲染。spa

  • 语法

    Pass { [Name and Tags] [RenderSetup] }3d

  • Name and tags
    一个pass块能够定义它的名字和任意数量的Tags。
    内置的Tags都是针对渲染路径的,告诉渲染引擎这个pass块应该在什么路径下被渲染。
    Name通常被用来引用Pass块。pass名字都是大写。
UsePass

UsePass命令可使用另外一个shader中的pass块,从而减小重复劳动。htm

格式:对象

UsePass "Shader/Name"索引

若要UsePass能工做,所引用的pass块必须定义了名字。队列

GrabPass

GrabPass是一种特殊的pass类型,它能够捕获物体所在位置的屏幕内容并写入到一个纹理中。从而用于后续通道完成高级图像效果。ip

语法:

  • GrabPass{},能捕获当前屏幕的内容到一个纹理中,纹理能在后续通道中经过 _GrabTexture 进行访问。注意:这种形式的捕获通道对于每一个使用它的物体将进行昂贵的屏幕捕捉操做。
  • GrabPass { "TextureName" },能捕获屏幕内容到一个纹理中,但对于第一个给定纹理名的物体,只会在每帧中处理一次。在后面的通道中能够经过纹理名获取纹理。当你在一个场景中有多个物体使用grab pass,这是更高效的方法。

另外, GrabPass 能使用 Name 和 Tags 命令。

Tags

SubShader使用Tags告诉渲染引擎指望什么时候和如何渲染对象。

  • 语法
    字符串的键值对:

    Tags {
    "TagName1" = "Value1"
    "TagName2" = "Value2"
    }

  • 细节
    在一个SubShader中标签被用于决定渲染次序和其余SubShader的参数。
    注意接下来的标签只能置于SubShader块而不是Pass块中。
    除了可被Unity承认的内置标签,你还可使用本身的标签并经过Material.GetTag函数查询。

    • Rendering Order - Queue tag
      使用 Queue 标签决定对象被渲染的次序。好比确保透明(Transparent)物体在不透明(opaque)物体以后绘制。
      有四种预约义队列,但能够在其之间定义更多队列:

      1. Background: 在全部队列以前被渲染,被用于渲染天空盒之类。
      2. Geometry (default): 默认的,被用于大多数对象。不透明的几何体使用这个队列。
      3. AlphaTest: alpha测试,这是分离自Geometry的队列,由于对于alpha-tested物体,在全部固体渲染后再渲染更有效率。
      4. Transparent: 透明,在Geometry队列以后被渲染,采用由后到前的次序。
      5. Overlay: 覆盖,用于实现叠加效果。任何须要最后渲染的对象应该放置在此处。(如镜头光晕)

      每个队列都表明一个整数索引值。Background-1000,Geometry-2000,AlphaTest-2450,Transparent-3000,Overlay-4000。能够自定义一个队列:

      Tags { "Queue" = "Geometry+1" }

      该队列的索引值为2001,这会使物体在全部不透明的对象以后但却在全部透明物体前被渲染。

    • RenderType
      将shader分类成预约义的组。

    • DisableBatching
      一些shader在Draw Call Batching 模式下不能工做,这个指令来决定是否禁用它。
      “True”:禁用。“False”:不由用(默认)。“LODFading”:当LOD Fading开启时禁用,通常用于树木。

    • ForceNoShadowCasting
      “True”:不使用cast shadows。

    • IgnoreProjector
      “True”:物体不会受 Projectors影响。

    • CanUseSpriteAtlas
      “False”:若是这个shader是指sprites,将没法打包成图集。 (Sprite Packer)

    • PreviewType
      指示material inspector预览怎样显示材质。默认显示是spheres,也可设置为“Plane”(2D显示),或者"Skybox"(天空球显示)。

pass中也可使用Tags

相关文章
相关标签/搜索