第一講Shader總篇

2021-06-21 01:24:46 字數 2257 閱讀 3033

引言,在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...