Unity Shader 屬性及標籤

2021-08-01 14:32:14 字數 4905 閱讀 6061

應用階段、幾何階段、光柵化階段

1、應用階段(cpu實現)

(1)把資料載入到視訊記憶體中 例如:頂點的位置資訊、法線方向、頂點顏色、紋理座標

(2)設定渲染狀態

(3)呼叫drawcall

2、幾何階段(gpu實現)

(1)頂點著色器:實現頂點的空間變換、頂點著色等 《完全可程式設計》

(2)曲面著色器:可選著色器,用於細分圖元

(3)幾何著色器:可選著色器,被用於執行圖元的著色操作,或者被用於產生更多的圖元

(4)裁剪:將不在攝像機視野內的頂點裁減掉,並剔除某些三角形的麵片 《可配置》 例如:可以使用自定義的裁剪平面來配置裁剪區域,也可以通過指令控制裁剪 三角圖元的正面或者背面

(5)螢幕對映:負責把每個圖元的座標轉化到螢幕座標中

3、光柵化階段(gpu實現)

(1)三角形設定:計算三角網格資料,得到三角網格對畫素的覆蓋情況,即計算三角形每條邊上的畫素座標

(2)三角形遍歷:檢查每個畫素是否被乙個三角形覆蓋,如果覆蓋的話,生成乙個片元

(3)片元著色器:完成重要的渲染技術 《完全可程式設計》

(4)逐片元操作:決定片元的可見性 《可配置》(模板測試、深度測試等 注:將深度測試提到片元著色器之前的技術成為early-z技術)

4、渲染繪圖管線流程(3d物體=>2d)

(1)頂點變化:通過一系列的座標系轉換,將模型的頂點在攝像機前進行位移,並最終投影到攝像機的投影螢幕上。 這一階段包括頂點的座標變換、逐頂點霧化、材質屬性和光照屬性處理。

(2)面處理:面的的組裝、擷取和剔除(背面剔除、視錐剔除、遮擋剔除)

(3)光柵化:將以向量為基本結構的面轉換成乙個個點陣形式的畫素

(4)畫素處理:對每個畫素區域進行著色、對畫素貼上貼圖、形成最終的畫面

1、屬性 properties

屬性名字(「在檢視面板中顯示的名字」,屬性型別)=預設值

_int("int",int) = 1

_float("float",float) = 1.0

_range("range",range(0.0,1.0)) = 0.1

_color("color",color) = (1,1,1,1)

_vector("vector",vector) = (1,1,1,1)

_2dtexture1("2dtexture1",2

d) = "white"

{}_rect("rect",rect) = ""

{}_3dtexture("3dtuxture",3

d) = ""

{}_cube("cube",cube) = ""

{}

2、subshader

(1)tags

a、queue

background 1000 這個佇列被最先渲染。它被用於skyboxes等。

geometry 2000 是這是預設的渲染佇列。它被用於絕大多數物件。不透明幾何體使用該佇列。

alphatest 2450 通道檢查的幾何體使用該佇列。它和geometry佇列不同,對於在所有立體物體繪製後渲染的通道檢查的物件,它更有效。

transparent 3000 該渲染佇列在geometry和alphatest佇列後被渲染。任何通道混合的(也就是說,那些不寫入深度快取的shaders)物件使用該佇列, 例如玻璃和粒子效果。

overlay 4000 該渲染佇列是為覆蓋物效果服務的。任何最後被渲染的物件使用該佇列,例如鏡頭光暈。

b、rendertype(unity內建的《也可以自定義》)

opaque 用於大多數著色器(法線著色器、自發光著色器、反射著色器以及地形的著色器)。

transparent 用於半透明著色器(透明著色器、粒子著色器、字型著色器、地形額外通道的著色器)。

transparentcutout 用於透明帶鏤空著色器

background 天空盒著色器。

overlay guitexture, halo(光暈), flare shaders.光暈著色器、閃光著色器。

treeopaque 地形引擎中的樹皮

treetransparentcutout 地形引擎中的樹葉。

treebillboard 地形引擎中的廣告牌樹。

grass 地形引擎中的草。

grassbillboard 地形引擎何中的廣告牌草。

注:rendertype標籤將shaders分類為多個預定義組,unity可以在執行時替換符合特定rendertype的所有shader。shader更換是在指令碼使用 camera.renderwithshader 或 camera.setreplacementshader 函式來完成的。這兩個函式均以乙個shader和乙個replacementtag作為引數。

c、disablebatching是否進行批處理

當使用繪製呼叫批處理 draw call batching 時,一些 shaders(主要是做物件空間頂點變形的shader)不工作 - 這是因為批處理將所有幾何轉換為世界空間,因此「物件空間」丟失。

disablebatching標籤可以用來消除這個問題。 有三個可能的值:

「true」(始終禁用此著色器的批處理)

「false」(不禁用批處理; 這是預設值)

「lodfading」(當lod衰減活動時禁用批處理;主要用於樹)。

d、forcenoshadowcasting是否強制不生成陰影

如果給出了forcenoshadowcasting標籤並且值為「true」,則使用此subshader渲染的物件將永遠不會投射陰影。 當你在透明物件上使用shader替換,並且你不會繼承來自另乙個subshader的陰影傳遞時,這是最有用的。

e、ignoreprojector是否忽略投影器投影 如果給定ignoreprojector標記並且值為「true」,則使用此shader的物件不會受到投影機的影響。 這對半透明象最有用,因為暫時沒有對他們產生投影的比較合適的辦法,那麼直接忽略掉就行了。

f、canusespriteatlas是否可以用於精靈圖集 將sprite的sharder效果應用於整個圖集 應該設定為false

g、previewtype指material 在inspector預覽應如何顯示材質。 預設情況下,材質顯示為球體,但previewtype也可以設定為「plane」

(顯示為2d)或「skybox」(將顯示為天空盒)。

(2)rendersetup

a: cull 設定剔除模式 cullback、cullfront、culloff(剔除背面、剔除正面、剔除關閉)

b: ztest 設定深度測試時使用的函式 ztest less/greater/lequal/gequal/equal/notequal/always

c:zwrite 設定深度寫入 zwrite on/off

d: blend 設定混合模式 blend off /blend srcfactor targetfactor(alpha混合)等(命令很多)

e: lighting 設定光照開關 lighting on/off

f:separatespecular 設定高光開關 separatespecular on/off

g:fog{} 霧效 mode off | global | linear | exp | exp2 (霧效開關)

(3)pass語義塊(注意p一定要大寫)

a:name:

可以在pass塊中定義該pass塊的名稱 name 「passname」 通過這個名稱 可以使用shaderlab的usepass命令直接使用其他unity shader中的pass

例如:usepass 「myshader/passname」 (注:unity 內部會把pass的名稱轉換成大寫字母表示)

b:tags:

***lightmode:渲染型別

a:always 總是渲染,不應用光照。

b:forwardbase 用於正向渲染,環境主要方向燈和定點光/sh 等的應用

c:forwardadd 用於正向渲染,附加的畫素光被應用,每個光照乙個pass

d:deferred 用於延遲光照,渲染法線/鏡面指數。lor function)。

e:shadowcaster 用於延遲光照,通過結合紋理,光照和自發光渲染最終顏色

f:prepassbase 用於頂點光照渲染,當物體沒有光照對映時,所有頂點光照被應用

g:prepassfinal 用於頂點光照渲染,當物體有光照對映的時候使用頂點光照渲染。在平台上光照對映是 rgbm 編碼

h:vertex 用於頂點光照渲染,當物體有光照對映的時候使用頂點光照渲染。在平台上光照對映是double-ldr 編碼(移動平台,及老式台式cpu)

i:vertexlmrgbm 將物體當做陰影產生者來渲染

g:vertexlm 為了正向渲染物件的路徑,將物件的陰影收集到螢幕空間緩衝區中。

***requireoptions:指定當滿足某些條件是才渲染該pass塊 softvegetation

(3)pass可用的渲染指令

a:material{} 材質

b:lighting 光照

c:cull 裁剪

d:ztest 深度測試

e:zwrite 深度快取寫入

f:fog{} 霧效

g:alphatest alpha測試

h:blend alpha混合

i:color 顏色

k:colormask 顏色遮罩

l:offset 深度偏移

m:separatespecular 高光顏色

n:colormaterial 顏色集

UnityShader自定義屬性面板

基本的屬性有,好像又是沒什麼規律,就乙個個試試吧 properties secondtex secondtex 2d white tintcolor color color 0.5,0.5,0.5,1 bright bright float 2 space 50 toggle drivesecond...

Unity Shader 雙面及碎化

說明 練習作品,兩個效果合在一起,僅供參考。正文shader custom twosidesdeathshader 正面貼圖 backcolor color color 1,1,1,1 反面顏色調節 backtex background texture 2d white 反面貼圖 masktex m...

Unity Shader編寫基礎及注意事項(二)

座標系規則 unity中存在空間座標系,模型座標系,相機座標系以及螢幕座標系。注意 空間座標系和模型座標系均是左手座標系,z在物體的正前方,相機座標系是右手座標系,z指向相機後方。座標系變換 包含平移 旋轉和縮放變換。注意 三維座標的平移不能用3x3矩陣表示,所以擴充套件到4x4的齊次座標。unit...