[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

相關文章
相關標籤/搜索