ShaderLab Syntax

ShaderLab Syntax

在Unity中,所有的Shader文件都由一個聲明語言“ShaderLab”寫成。文件中,一個嵌套的括號語法,描述了shader的各種東西 - 例如哪個shader屬性應該被顯示在材質監視窗口(Inspector窗口); 什麼類型的硬件需要什麼樣的fallbacks操作; 使用什麼類型的混合模式 等等..; 然後實際上的“shader 代碼”是該文件中寫在CGPROGRAM片段內的代碼(查看surface shadersvertex and fragment shaders)。

本篇和子篇介紹了嵌套括號“ShaderLab”語法。CGPROGRAM代碼塊是用常規的 HLSL/Cg 着色語言寫成,請查看他們的文檔頁面

Shader是一個shader文件的根命令。每個文件必須定義一個shader(且只能有一個)。它指定了每個材質中使用了它的對象如何渲染。

Syntax

Shader "name" { [Properties] Subshaders [Fallback] [CustomEditor] }

定義一個shader。它將出現在材質的inspector窗口的shader列表中的name下。Shaders可以選擇一個Properties列表,顯示在材質inspector窗口。然後是一個SubShaders列表,一個fallback選項,和一個可有可無的自定義編輯器聲明。

Dtails

Properties

Shaders可以有一個列表的properties。Shader中每個被聲明的properties都會顯示在Unity的材質的inspector面板中。典型的屬性比如對象顏色、紋理或只是shader所使用的任意值。

SubShaders & Fallback

每個shader是由多個sub-shaders組成。你必須定義至少一個。當加載一個shader,Unity會瀏覽subshaders列表,並選擇第一個被用戶終端設備支持的subshader。如果沒有找到支持的subshaders,Unity會嘗試使用fallback shader

不同的顯卡有不同的能力。他給遊戲開發商提出了一個永恆的課題; 你希望你的遊戲在新的硬件中看起來很棒, 但是你不希望它只在3%的玩家中有效。這就是爲什麼subshaders會加入。創建一個包含所有你夢想的理想特效的subshader,然後添加更多subshaders來支持老得顯卡。這些subshaders肯能會用一個較慢的方式來實現你所期望的特效,或者他們選擇不現實一些細節。

Shader “level of detail” (LOD) 和 “shader replacement” 是兩個建立在subshaders上的技術。查看see Shader LOD and Shader Replacemement獲取更多信息.

Examples

這是一個最簡單的shaders:

// colored vertex lighting
Shader "Simple colored lighting"
{
    // a single color property
    Properties {
        _Color ("Main Color", Color) = (1,.5,.5,1)
    }
    // define one subshader
    SubShader
    {
        // a single pass in our subshader
        Pass
        {
            // use fixed function per-vertex lighting
            Material
            {
                Diffuse [_Color]
            }
            Lighting On
        }
    }
}

這個shader定義了一個默認值爲(1,0.5,0.5,1)的顏色屬性_Color(此屬性將會在材質inspector面板上以Main Color顯示)。然後定義了一個單獨的subshader。這個subshader包含了一個Pass,它打開了固定管線頂點光照,併爲他設置了材質。

查看更多複雜的例子請瀏覽Surface Shader ExamplesVertex and Fragment Shader Examples.


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