[Unity Shader] Shader學習筆記3 - Fixed function shader 簡介

 

Shader "Custom/FF1" {
    Properties {
        _Color ("Main Color", Color) = (1,1,1,0)
        _Ambient ("Ambient", Color) = (0.5,0.5,0.5,0)
        _SpecColor ("Spec Color", Color) = (1,1,1,1)
        _Emission ("Emmisive Color", Color) = (0,0,0,0)
        _Shininess ("Shininess", Range (0.01, 1)) = 0.7
        _MainTex ("Base (RGB)", 2D) = "white" {}
    }
    SubShader {
        Pass {
            Material {
                Diffuse [_Color]
                Ambient [_Ambient]
                Shininess [_Shininess]
                Specular [_SpecColor]
                Emission [_Emission]
            }
            Lighting On
            SeparateSpecular On
            SetTexture [_MainTex] {
                Combine texture * primary DOUBLE
            }
        }
    }
}

首先要注意,shader不區分大小寫。spa

首先第一行是shader的名稱,採用分級方式。定義好後可經過Shader.Find來找到對應名稱的shader。code

接下來是屬性(Properties)。其中包含許多屬性。前一部分是屬性名,括號內字符串是顯示的名字,後面跟着屬性的類型。最後等號後面是默認值。
屬性的類型有許多種包括數字(Float,Int),滑動條(Range), 顏色(Color),Vector, 貼圖(2D、Rect、3D、Cube)等。字符串

下面是一個SubShader。每一個Subshader都由一個或多個Passes組成,一個Pass塊引發物體的一次渲染。因此至少要有一個Pass。
咱們的Pass中有一個Material塊,綁定了屬性值到材質設置。it

再下面是一些操做命令。io

屬性解釋
  • Color
    物體的純色
  • Diffuse Color
    漫反射顏色。這是物體的基本顏色。
  • Ambient Color
    環境色顏色。物體在被RenderSettings裏面設置的環境光照射時的顏色。
  • Specular Color
    物體反射高光的顏色。
  • Shininess Number
    高光的銳利度,在0到1之間,0時高光巨大,1時高光尖銳。
  • Emission Color
    自發光,當物體沒有被任何光線照射時的顏色。渲染

  • Lighting On | Off
    頂點光照的開關硬件

  • SeparateSpecular On | Off
    控制頂點光照的高光開關
Combine texture

SetTexture 讀入材質內容,Combine將primary(前面光照計算的顏色)與材質紋理合並,DOUBLE表示乘以2以讓顏色更亮。反射

SetTexture 能夠不僅有一個(支持多少個由硬件決定,通常兩個就夠了)。將上面例子改成im

.......

    Properties {
    ......
    _MainTex ("Base (RGB)", 2D) = "white" {}
        _SecondTex ("Second (RGB)", 2D) = "white" {}
    }

    ......

    SetTexture [_MainTex] {
        Combine texture * primary DOUBLE
    }
    SetTexture [_SecondTex] {
        Combine texture * previous DOUBLE
    }

第二個SetTexture 中的previous表示上一次SetTexture 計算的結果。從而能夠混合兩張紋理。總結

其餘更爲詳細的命令,將在後面總結。

相關文章
相關標籤/搜索