常見兩種Shader講解

說明:

Unity的Shader分爲三類:

  • Fixed function shader——屬於固定渲染管線Shader, 基本用於高級Shader在老顯卡無法顯示時的Fallback。
  • Vertex and Fragment Shader——屬於Unity常見Shder之一,可編程渲染管線.。
  • Surface Shade——屬於Unity常見Shader之一,使用Unity預製的光照模型來進行光照運算。
主要說明一下Vertex and Fragment Shader與Surface Shade的一些常見性質,對總搞不清這兩種常見可編程Shader的童鞋們科普一下。

Vertex and Fragment Shader與Surface Shade的共同點:

  • 必須從唯一一個根Shader開始
  • 可以設置Properties參數部分,作用及語法完全相同
  • 具體功能都在SubShader裏(Subshader: 子Shader,Shader會自上而下運行第一個硬件能支持的Subshader,主要作用是對不用硬件的支持。)
  • 都可以打標籤,例如Tags { "RenderType" = "Opaque" }    LOD100 等
  • 都可以設置Fallback,如“Fallback "Legacy Shaders/Transparent/VertexLit"”
  • 都可以處理基本的功能,例如光照漫反射(Diffuse)以及鏡面反射(Specular)。

Vertex and Fragment Shader與Surface Shade的差異:

  • Vertex and Fragment Shader在subshader下面還有pass{}
  • Surface Shader,由於已經將具體內容打包在光照模型了,不能加pass{},加了會報錯。
  • Vertex and Fragment Shader的核心是:
  • CGPROGRAM
    #pragma vertex vert
    #pragma fragment frag          
    #include "UnityCG.cginc"
    ENDCG
  • Surface Shader的核心:
    
  • <pre name="code" class="html">CGPROGRAM
    #pragma surface surf Lambert
    ENDCG
    
    
  • Surface Shader是Unity3d自帶光照模型Lambert,也不做頂點處理,那麼只需要一個表面處理函數surf即可
    

Surface Shade標準的輸出結構的三種:

SurfaceOutput


struct SurfaceOutput
 {
    <span style="white-space:pre">	</span>fixed3 Albedo;  // 漫反射顏色
   <span style="white-space:pre">	</span>fixed3 Normal;  // 切線空間法線,如果賦值的話
   <span style="white-space:pre">	</span>fixed3 Emission;
    <span style="white-space:pre">	</span>half Specular;  // 高光強度,範圍是0-1
    <span style="white-space:pre">	</span>fixed Gloss;    // specular intensity
    <span style="white-space:pre">	</span>fixed Alpha;    // 透明度
};

SurfaceOutputStandard

struct SurfaceOutputStandard
{
	fixed3 Albedo;	  // 基礎 (漫反射或鏡面反射) 顏色
	fixed3 Normal;	  // 切線空間法線,如果賦值的話
	half3 Emission;
	half Metallic;	  // 0=非金屬, 1=金屬
	half Smoothness;	// 0=粗糙, 1=光滑
	half Occlusion;	 // 遮擋(默認1)
	fixed Alpha;		// 透明度
};

SurfaceOutputStandardSpecular

struct SurfaceOutputStandardSpecular
{
	fixed3 Albedo;	  // 漫反射顏色
	fixed3 Specular;	// 鏡面反射顏色
	fixed3 Normal;	  // 切線空間法線,如果賦值的話
	half3 Emission;
	half Smoothness;	// 0=粗糙, 1=光滑
	half Occlusion;	 // 遮擋(默認1)
	fixed Alpha;		// 透明度
};



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章