1、culling陰影面剔除
culling陰影面剔除是一種優化技術。所有的多邊形都有正反兩面,而你永遠只能看見其中一面,不信的話拿張紙板或者一面鏡子看看你能不能同時看到兩面。通常多邊形面向螢幕裡面的背面,我們看不見,所以會將該面剔除。
cull off 關閉陰影面剔除
cull back 剔除背面
cull front 剔除正面
2、depth testing深度測試
depth testing:深度測試,也叫深度緩衝。只有最靠近觀察者的物體會被繪製。深度即z,該值越小表示離觀察者越近,該值越大表示離觀察者越遠。
shader裡預設有如下**
zwrite on
ztest lequal
意思即使shader裡沒有寫任何關於depth testing的**,shader也會執行深度測試。
zwrite:是否此物體的畫素深度會被記錄(預設記錄),
zwrite on 深度記錄(預設on)
zwrite off 不記錄此深度,通常用於半透明物體,
ztest:預設是 lequal。 即當深度小於或者等於深度最小值時,渲染物體,即渲染最近的物體。
3、alphatest 透明度測試
alpha test ,中文就是透明度測試。簡而言之就是v&f shader中最後fragment函式輸出的該點顏色值(即上一講frag的輸出half4)的alpha值與固定值進行比較。 alphatest語句通常位於pass{}中的起始位置。
語法:第一種:alphatestoff: 不測試,全渲染
第二種:alpha 比較符 目標alpha值
其中目標alpha值取值範圍是 0至1,也可以用引數 ,如 alphatest [varname]。
比較符:(目標alpha值下面記作x)
always 全渲染(任意x值)
never 全不渲染
greater 點的alpha值大於x時渲染
geuqal 點的alpha值大於等於x時渲染
less 點的alpha值小於x時渲染
lequal 點的alpha值小於等於x時渲染
equal 點的alpha值等於x時渲染
notequal 點的alpha值不等於x時渲染
例:alphatest never 0 全不渲染(這個0可以是任意值,但必須填)
alphatest always 0 全渲染(這個0可以是任意值,但必須填)
alphatest off 全渲染
alphatest greater 0.4 當alpha大於0.4渲染, 缺點是邊緣過於鋒利並且顯示不完整,alpha小於0.4的部分被忽略掉了
alpha blend
邊緣柔和,但是中心也太柔和,沒有實體的感覺
alphatest greater 0.4 /alphatest lequal 0.4
兩個部分,大於
0.4不混合,小於
0.4混合。效果是既有實體感覺,邊緣也柔和。
4、alpha混合
alpha blending,中文譯作alpha混合
blend srcalpha oneminussrcalpha:
blending就是控制透明的。處於光柵化的最後階段。
這裡例如我們給乙個模型貼乙個材質,那麼在某個點計算出來顏色值稱為源,而該點之前累積的顏色值,叫目標。
語法blend off , 不混合
blend srcfactor dstfactor , srcfactor是源係數(靠近攝像機),dstfactor是目標係數
最終顏色= (
shader
計算出的點顏色值
* 源係數)
+(點累積顏色
*目標係數)
屬性(往srcfactor,dstfactor 上填的值)
one 1
zero 0
srccolor 源的rgb值,例如(0.5,0.4,1)
srcalpha 源的a值, 例如0.6
dstcolor 混合目標的rgb值例如(0.5,0.4,1)
dstalpha 混合目標的a值例如0.6
oneminussrccolor (1,1,1)- srccolor
oneminussrcalpha 1- srcalpha
oneminusdstcolor (1,1,1) - dstcolor
oneminusdstalpha 1- dstalpha
運算法則示例:
(注:r,g,b,a,x,y,z取值範圍為[0,1])
(r,g,b) * a = (r*a , g*a , b*a)
(r,g,b) * (x,y,z) = (r*x , g*y , b*z)
(r,g,b) + (x,y,z) = (r+x , g+y ,b+z)
(r,g,b) - (x,y,z) = (r-x , g-y, b-z)
5、霧化
參考:部分霧化: 三種shader都可使用,在需要霧化的物體shader指令碼裡,加上如下**
fog6、貼圖與光影
從本講開始講一些特效貼圖。這些貼圖大多數是在不採用高精度模型的情況下,以較小的代價獲得最好的畫面效果。而涉及的主要是與光有關的運算。
7、render setup 渲染設定
通道設定顯示硬體的各種狀態,例如能開啟alpha混合,能使用霧,等等。這些命令如下:
material
定義乙個使用頂點光照管線的材質,參考material頁面。
lighting on | off
開啟或關閉頂點光照,參考material頁面。
cull back | front | off
set polygon culling mode. 設定多邊形剔除模式
ztest (less | greater | lequal |gequal | equal | notequal | always)
set depth testing mode. 設定深度測試模式
zwrite on | off
set depth writing mode. 設定深度寫模式
fog
set fog parameters. 設定霧引數
alphatest (less | greater | lequal |gequal | equal | notequal | always) cutoffvalue
turns on alpha testing. 開啟alpha測試
sets alpha blending mode. 設定alpha混合模式
color color value
設定當頂點光照關閉時所使用的顏色
colormask rgb | a | 0 | anycombination of r, g, b, a
設定顏色寫遮罩。設定為0將關閉所有顏色通道的渲染
set depth offset. 設定深度偏移
separatespecular on | off
開啟或關閉頂點光照相關的平行高光顏色, 參考material頁面。
colormaterial ambientanddiffuse |emission
當計算頂點光照時使用每頂點顏色, 參考material頁面。
8、bindchannels命令
允許你指定頂點資料如何對映到顯示卡中。
可程式設計頂點著色器使用時,bindchannels將沒有效果。在這種情況下,繫結受頂點著色器輸入控制。
預設情況下,unity3d 會為你計算並繫結,但在某些情況下,你要使用自定義繫結。
Shader學習整理
好久沒寫部落格了,研究了一段時間shader,整理一下 unity的shader包含三種,固定渲染管線,cg片段,su ce表面著色器,unity推薦su ce表面著色器,寫起來簡單,很多東西unity都做好了,實際中往往看具體需求而定,一般選cg片段和su ce表面著色器。然而不管怎麼說,基礎理論...
LayaAir 2 6 雪地shader整理
因為最近開發乙個laya3d小遊戲,有需要用到shader的地方,最後發現網上找的laya shader因為laya api的變動而沒能達到自己想要的效果,所以決定整理一下 snowmaterial.ts export default class snowmaterial extends laya....
shader常用數學函式整理(持續更新)
step a,b b a 1 0 smoothstep x,y,a a如果小於x返回0 如果a y返回1 在x y之間返回 3a 2 2a 3 saturate x 如果x取值小於0,則返回值為0。如果x取值大於1,則返回值為1。若x在0到1之間,則直接返回x的值.lerp a,b,w a,b,w ...