引言,在unity3d裡,所有的圖形繪製都必須通過shader,即著色器。一般的使用過程中,我們用到的都是unity自帶的shader,即build-in shader。學習shader後,自己寫的shader能做出很多你想要的特殊效果,增強遊戲的畫面表現。例如 水的倒影。 logo的光影閃過等等效果等等。
shader的分類
shader按管線分類一般分為固定渲染管線與可程式設計渲染管線
1)固定渲染管線 ——這是標準的幾何&光照(transforming&lighting)管線,功能是固定的,它控制著世界、視、投影變換及固定光照控 制和紋理混合。t&l管線可以被渲染狀態控制,矩陣,光照和採製引數。功能比較有限。基本所有的顯示卡都能正常執行。
2)可程式設計渲染管線——對渲染管線中的頂點運算和畫素運算分別進行程式設計處理,而無須象固定渲染管線那樣套用一些固定函式,取代設定引數來控制管線。
unity3d的三種shader
unity的shader分為三種:
(1)fixed function shader 屬於固定渲染管線
shader, 基本用於高階shader在老顯示卡無法顯示時的fallback(之後有詳細介紹)。使用的是shaderlab語言,語法與微軟的fx files 或者nvidia的 cgfx類似。
(2)vertex and fragment shader 最強大的shader型別,屬於可程式設計渲染管線. 使用的是cg/hlsl語法。
(3)su***ce shader unity3d推崇的shader型別,使用unity預製的光照模型來進行光照運算。
使用的也是cg/hlsl
語法。
unity3d三種shader對比
三種
shader共同點:
(1)都必須從唯一乙個根shader開始
(2)properties引數部分,作用及語法完全相同
(3)具體功能都在subshader裡(
subshader: 子shader,shader會自上而下執行第乙個硬體能支援的subshader,主要作用是對不用硬體的支援。
)(4)都可以打標籤,例如tags
lod 200
以及lighting on等
(5)都可以fallback
(6)都可以處理基本的功能,例如光照漫反射(diffuse)以及鏡面反射(specular)。
但是vertex and fragment和
su***ce都能實現
fixed function實現不了的
高階功能,例如基於uv計算的效果等等。
三種shader不同點:
(1)fixed function shader以及vertex and fragment shader在subshader下面還有pass{},但是su***ce shader,由於已經將具體內容打包在光照模型了,不能加pass{},加了會報錯。
(2)fixed function shader每句**之後沒有分號';'
但是v&f shader以及
su***ce shader每句**之後都必須加分號';'
(3)核心結構不同:
fixed function shader的核心是
material{} 以及 settexture[_maintex]{}
vertex and fragment shader的核心是
cgprogram
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
endcg
su***ce shader的核心是
(1)這套用的是unity3d自帶光照模型lambert,也不做頂點處理,那麼只需要乙個表面處理函式surf即可
cgprogram
#pragma su***ce surf lambert
endcg
或者(2)這套表示使用的是自己寫的光照模型
lsylightmodel,並且使用了頂點處理函式vert
cgprogram
// su***ce 表面處理函式
光照模型函式
頂點處理:函式
#pragma su***ce surf
lsylightmodel
vertex:vert
//執行順序
頂點處理函式 -> 表面處理函式 -> 光照模型函式 ->顏色值
endcg
第一講 遞迴
遞迴 recursion 程式呼叫自身的程式設計技巧。遞迴滿足2個條件 1 有反覆執行的過程 呼叫自身 2 有跳出反覆執行過程的條件 遞迴出口 一 階乘 include using namespace std int recursive int i int main main 三 斐波那契數 inc...
矩陣第一講
特殊矩陣1.零矩陣 所有矩陣的所有元素全都為0 2.對角矩陣 乙個n階方陣除對角線上的所有元素都為0 2.數量矩陣 對角矩陣中對角線上元素為常數,3.單位矩陣 數量矩陣中對角線上上常數為1.4.行階梯矩陣 乙個矩陣的每個非零行 元素不全為零 的非零首元 第乙個非零元素 所在列的下標隨著行標的增大,並...
第一講 遞迴
遞迴 recursion 程式呼叫自身的程式設計技巧。遞迴滿足2個條件 1 有重複執行的過程 呼叫自身 2 有跳出重複執行過程的條件 遞迴出口 一 階乘 include using namespace std int recursive int i int main main 三 斐波那契數 inc...