1.1:Get Started with Unity Shaders
文章著作權歸作者所有。轉載請聯系作者,並在文中註明出處,給出原文鏈接。
第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