轉自:http://www.manew.com/thread-110922-1-1.html
移動
移動是最容易實現(xiàn)的特效檀蹋,最簡單粗暴的方法就是采樣時讓UV坐標不斷的增加或者減小犬金,通常用時間 * 速度來控制移動效果幌甘,如:
↑ 一輛靜止的小汽車
↑ U不斷增加后的效果,快樂奔跑的小汽車
Shader寫起來大概像這個樣子:
需要注意的幾點是:
1秧骑、選擇了正確的循環(huán)模式
2颖对、選擇合適的時間
旋轉
旋轉效果本質上是平鋪在X挺据、Y軸上的2D圖片,繞Z軸旋轉其掂,通常用時間 * 旋轉速度來控制旋轉效果油挥。因此只要用旋轉角度構建一個旋轉矩陣,再用UV坐標與這個矩陣做乘法清寇,即可喘漏,如:
↑一只旋轉的小豬
↑旋轉矩陣
因為縮放、旋轉华烟、平移矩陣的推導網(wǎng)上多的是翩迈,而這些又是圖形學的入門知識,因此在這就不再贅述了(其實是因為我忘了盔夜,以后有機會再總結一下吧)负饲。
Shader寫起來大概像這個樣子:
需要注意的幾點是:
1堤魁、選擇了正確的循環(huán)模式
如果選擇了Repeat,那么效果就會變成:
2返十、選擇合適的時間
3妥泉、合理的錨點
如果不修正旋轉錨點的話,豬是以左下角(0,0)為錨點旋轉的洞坑,如:
↑繞(0,0)點旋轉的小豬
微調一下即可:
稍加延伸:移動 + 旋轉 or 旋轉 + 移動
旋轉一定角度基礎上的移動:
↑通往天國的小汽車
在非中心點的地方旋轉:
↑在左下角旋轉的小豬
↑ 對應的shader
我個人的經(jīng)驗:
我從不記縮放盲链、旋轉、平移的先后順序(因為我也記不住)迟杂,試幾次對了就行了刽沾。
混合效果差異
這里所指的混合效果,并非直接用shader中的Blend排拷,因為Blend是指片段著色器的返回顏色和當前顏色緩沖區(qū)顏色進行計算的邏輯侧漓,而我們的片段著色器返出的顏色,是將各個特效層顏色混合結果進行混合(有點繞)监氢。換言之:此提及的“混合”只是將每層特效的顏色(之前提及的三層)布蔗,通過某種方式疊加在一起的邏輯。
↑多層效果混合示意
我只用了兩種混合模式浪腐,BLEND和ADD纵揍,名字沒起好(因為BLEND就是混合的意思...),直接看公式吧:
BLEND:
混合后混合區(qū)顏色 = 當前特效圖顏色 * 當前特效圖Alpha +??當前混合區(qū)顏色 * (1 - 當前特效圖Alpha)
ADD:
混合后混合區(qū)顏色 = 當前特效圖顏色 +??當前混合區(qū)顏色
這介紹的有點水了牛欢,因為這原理跟Shader的Blend沒什么差別骡男,分別對應了:
Blend SrcAlpha OneMinusSrcAlpha
和Blend One One
只是將顏色緩沖區(qū)的概念換成了“當前混合區(qū)顏色”,而這種混合模式傍睹,也可完全照搬Shader中支持的各種混合模式隔盛,只要特效妹子開心就好。
其實我想強調的是:
1拾稳、心里要對當前混合區(qū)顏色和效果圖采樣顏色有個概念吮炕。
2、處理Alpha時要稍加留意访得,你使用的紋理有沒有Alpha通道你要知道龙亲,沒有Alpha通道是讓Unity按灰度值導入為Alpha通道還是自己算得清楚。
3悍抑、采樣出的RGB是否要先被Alpha處理一下心里得有數(shù)鳄炉。
4、沒什么絕對正確或錯誤的混合搜骡,只要看起來是對的拂盯,它就是對的。
總結
片段著色器返出的顏色 = 原圖顏色 op 特效1 op 特效2 op 特效3
特效x = 特效圖顏色 * 特效混合色 * 遮罩圖對應通道
特效圖顏色 = tex2D(特效圖, uv + 偏移量 + 擾動量)
講到這里其實整個兒Shader的思路都已經(jīng)總結的差不多了记靡,至于真正的什么哪一層怎么處理就出什么效果谈竿?應該用幾層团驱?什么參數(shù)?沒有什么太多意義空凸,交給特效同學多配制幾次就好了嚎花。
小彩蛋
其實,“移動”效果還有相對高級一點的用法呀洲,它的效果看起來像這樣:
如果你用心眼去看的話紊选,會發(fā)現(xiàn)這哥們手中的字兒是呈弧形的,而我們的圖是這樣的:
其實原理也很簡單道逗,只是用了一張Motion貼圖來模擬uv丛楚,看一下他在PS中的樣子你估計就明白了:
一句話總結就是:用漸變的顏色組成一張畫布,這張畫布就是渲染時UV采樣的參照(0~1)憔辫,扭曲畫布,繪制效果自然也就扭曲了仿荆。
如果你用了Motion貼圖贰您,一定記得:要狠狠的減小他的尺寸,但不要壓縮它的品質拢操,更不要用Point過濾锦亦。因為:插值出來的“UV”比你在PhotoShop中通過“漸變”得來的“UV”平滑且靠譜的多。