應用階段、幾何階段、光柵化階段
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...