1. 程式人生 > >1.1:Get Started with Unity Shaders

1.1:Get Started with Unity Shaders

program diff 尋找 編程 初始 prop fuse use 插入

文章著作權歸作者所有。轉載請聯系作者,並在文中註明出處,給出原文鏈接。

第1章開始正式進入Unity Shader的學習。

什麽是Shader

本系列約定,如無特殊說明,文中出現的Shader均基於Unity Shaderlab

每一門編程語言的誕生都是為了方便人們和計算機進行更好地交互。Shader是一門著色器語言,它作用於計算機Rendering(繪制,通常譯為渲染)流程的一部分。GPU從CPU獲取到頂點信息後,會進入頂點著色器,隨後進入片元著色器(在其他shader語言中,著色器名稱可能不盡相同),經過一系列變換運算,最終呈現在屏幕上(渲染管線部分可以參考馮樂樂的《Unity Shader入門精要》第二章)。而本系列介紹的Shader是以Unity的shaderlab為基礎的,shaderlab除了定制著色器以外,還提供了和Unity交互的途徑,自帶了Unity的優化,如批處理等。話不多說,直接進入正題。

第一個Shader

我們首先來看下面這個Shader例子:

Shader "MyShader" {
    Properties {
        _MyTexture ("My Texture", 2D) = "white" { }
        // other properties like colors or vectors go here as well
    }
    SubShader {
        // here goes the 'meat' of your
        // - surface shader or
        // - vertex and program shader or
        // - fixed function shader
    }
    SubShader {
        // here goes a simpler version of the SubShader
        // above than can run on older graphics cards
    }
    FallBack "Diffuse"
}

有編程基礎的可以看出一點端倪。

首先,整個Shader是包含在一個大括號裏,其中“MyShader”是這個Shader在Unity工程中的標簽名(註意與文件名區分開),語法是“[SubTagName/]ShaderName”

接著,可以看到Shader下有兩種代碼塊——Properties以及SubShader

Properties:用於存放各個Shader的各個屬性以及初始值,聲明的屬性用於暴露shader(著色器)實現過程中相關的參數值(如:材質的整體顏色等),暴露出來的屬性參數可供Shader使用者進行調整、和腳本交互,以得到更多樣的效果。

SubShader:SubShader是Shader代碼的核心部分。由於運行終端的不同,其所能支持的渲染等級也是不同的,所以我們在必要時可以編寫多個SubShader,Unity會為我們從上到下尋找並使用終端所能支持的第一個SubShader。在SubShader中,可以設置細節層級,渲染方式等,也可以插入Cg/HLSL代碼塊,這也是Shader核心中的核心。

最後則是FallBack, 顧名思義,這是我們唯一的退路,這是在上面所有SubShader都失效的情況下所使用的Shader。當然,我們可以通過FallBack Off禁用FallBack功能。

最後

通過上面的例子,我們就揭開了Shader的神秘面紗,在後續的分享中,會進一步講述Shader中的各個細節。

1.1:Get Started with Unity Shaders