[Unity Shader] Shader學習筆記2 - 概述2

 

Unity 有三種編寫shader的方式:
surface shaders,
vertex and fragment shaders,
fixed function shaders.編程

  • fixed function shader (固定功能着色器):
    對應於固定管線硬件的操做,最簡單的着色器類型,只能使用Unity3D自帶的固定語法和提供的方法,適用於任何硬件,使用難度最小。
  • vertex and fragment shader (頂點片斷程序着色器):
    頂點和片斷着色器,如前所述,是可編程圖形管線主要支持的方式。是效果最爲豐富的着色器類型,使用Cg/HLSL語言規範,着色器由頂點程序和片斷程序組成。全部效果都須要本身編寫,使用難度相對較大。
  • surface shader (表面着色器):
    Unity推薦的shader類型。一樣使用Cg/HLSL語言規範的着色器類型,不過把光照模型提取出來,可使用Unity3D自帶的一些光照模型,也能夠本身編寫光照模型,着色器一樣由頂點程序和片斷程序組成,不過自己有默認的程序方法,使用者能夠只針對本身關係的效果部分進行編寫。因爲選擇性比較大,因此能夠編寫出較爲豐富的效果,使用難度相對vertex and fragment shader小。
    能夠理解其是對Vertex 和 Fragment shader的一種包裝。
    (surface shader有一個問題,它不支持SubShader內部的多pass,因此某些須要多pass的效果要實現起來會比較困難。)

Unity建議從ShaderLab語法開始學習shader。Fixed function shader 只能被ShaderLab編寫。(可是 vertex and fragment shader 和surface shader 是不限於shaderlab的,可使用Cg/HLSL/GLSL)。編輯器

Shaderlab基本結構
Shader "MyShader" { 
  Properties { 
    _MyTexture ("My Texture", 2D) = "white" { } 
    //其餘屬性
  } 
  SubShader { 
    // - surface shader or
    // - vertex and program shader or
    // - fixed function shader 
  } 
  SubShader { 
    // 一個更簡單的shader,能夠運行在更弱的硬件上
  }
  Fallback "Legacy Shaders/VertexLit"
  [CustomEditor]
}

首先是一些屬性定義,屬性名是前面帶下劃線的,顯示在編輯器的名字是後面字符串中的。
接下來是一個或者多個的子着色器,只有一個能被執行,哪個子着色器被使用是由運行的平臺所決定的。子着色器是代碼的主體,每個子着色器中包含一個或者多個的Pass。
最後指定一個回滾,用來處理全部Subshader都不能運行的狀況(好比目標設備實在太老,全部Subshader中都有其不支持的特性)。
CustomEditor是定製編輯器。學習

須要提早說明的是,在實際進行 surface shader 的開發時,咱們將直接在Subshader這個層次上寫代碼,系統將把咱們的代碼編譯成若干個合適的Pass。spa

相關文章
相關標籤/搜索