1. 程式人生 > >Unity Shader(一)

Unity Shader(一)

初識 Shader

本篇介紹了在Unity中建立Shader的基本步驟,以及Shader的結構分析。
上篇連線(Shader基礎篇)

0x00 概述


  1. 啟動Unity並建立一個新專案: File>New Project
  2. 建立Shader:Project(也就是Asset欄中)>右鍵>creat>Shader>UnlitShader((頂點片元著色器),SurfaceShader(表面著色器)) >根據自己的需求編輯內容>儲存。
  3. 建立材質並新增Shader
  • Project>右鍵>creat>Material
  • 選中剛建立的Material在Inspector裡選著對應的shader
  • 將材質附加到遊戲物件:

    物體要帶有三角網格

    • 建立遊戲物體:在Hierarchy>右鍵>GameObject>3D Object>任意選擇。
    • 將材質附加到物體上有一下幾種方式:
      • 1、在Hierarchy中選中物體,在Project中拖動material到Inspector面板中。
      • 2、在Project中拖動material到Scene中的物體上(如果找不到物體,在Hierarchy中選中,然後在Scene中移動滑鼠(不要單擊)後按“F”鍵)。

  • 整體步驟圖(從左到右):

    0x01 結構分析

    一個Unity Shader的基本結構如下所示:

    `  
    Shader "Unlit/MyShader"
    {
     Properties
     {
        //屬性
        _Name("Display Name",PropertyType)=DefaultValue
     }
     SubShader//子著色器
     {
    
        Tags { "RenderType"="Opaque" }
        LOD 100
    
        Pass
        {
            CGPROGRAM
            ....
            ENDCG
        }
     }
    }`  
    
    接下來逐個介紹一下。
    • Shader "Unlit/MyShader"{}

      MyShader是建立時候自己起的名字。 Unlit是Inspector選擇shader型別時候當前shader所在的資料夾(可以自行修改),如圖:


    • Properties
      {
      //屬性
      _Name("Display Name",PropertyType)=DefaultValue
      }

      _Name: 屬性名,在程式碼中使用該名獲取該屬性的內容。
      Display Name:在外部Inspector上顯示的名稱(後面會附圖)
      PropertyType:屬性的型別,如下表:

      屬性型別 例子 詳解
      Color _Color(“Color”,Color)=(1,1,1,1) 顏色屬性,由RGBA(紅黃藍透明)四個變數來定義
      Vector _Vector(“Vector”,Vector)=(2,3,5,1) 四維向量(x,y,z,w)
      Cube _Cube(“Cube”,Cube)=”while”{} 立方體紋理,簡單說就是6張有聯絡的2D貼圖的組合
      2D _2D(“2D”,2D)=”“{} 一張2的階數大小(256,512之類)的貼圖。
      3D _3D(“3D”,3D)=”black”{}
      Int _Int(“Int”,Int)=2 數字型別的屬性,一個整數
      Float _Float(“Float”,Float)=1.5 數字型別的屬性,一個浮點數
      Range(min,mix) _Range(“Range”,Range(0.0,5.0))=3.0 一個介於最小值和最大值之間的浮點數

      DefaultValue定義了這個屬性的預設值。Color:以0~1定義的rgba顏色。比如(1,1,1,1)。2D,3D,Cube:可以是空字元竄或者是”white”,”black”,”gray”,”bump”中的一個。

    Tags標籤,是一個鍵值對它的鍵和值都是字串型別,Tags{“TagName”=”Valuel”“TagName2”=”Value2”}如下表:

    標籤型別 說明 例子
    Queue 控制渲染順序,指定該物體屬於哪一個渲染佇列 Tags{“Queue”=”Transparent”}
    RanderType 對著色器進行分類 Tags=”RanderType=”Opaque”
    DisableBatching 通過該標籤來直接證明是否對該SubShader使用批量處理 Tags=”DisableBatching”=”True”
    ForceNoShadowCasting 控制使用該SubShader的物體是否會投影 Tags=”ForceNoShadowCasting”=”True”
    IgnoreProjector 通常用於半透明物體 Tags=”IgnoreProjector”=”True”
    CanUseSpriteAtlas 當該SubShader是用於Sprites時,將該標籤設為“false” Tags=”CanUseSpriteAtlas”=”True”
    PreviewType 指明材質面板將如何預覽該材質,預設情況下,材質將顯示為一個球體。但我們可以自行設定 Tags=”PreviewType”=”Plane”

    LOD: 這個數值決定了我們能用什麼樣的Shader
    Pass:Cg的程式碼片段都寫在裡面。

    整體如下所示:

    0x02 摘要

    本篇為Unity Shader篇的最基礎篇。主要講述如何去建立Shader,如何建立材質球並附加Shader到材質,如何建立遊戲物件並將材質附加到遊戲物件。Shader的結構分析,會持續更新,歡迎一起學習。隨時歡迎各位大佬前來指教,提出意見!!!☺☺☺