自從微軟推出Win7系統(tǒng)以來,在Win7系統(tǒng)中的窗口模糊特效也就是所謂的毛玻璃特效很受大家的喜歡,但是自Win8開始,這個特效就沒有了,就有很多 用戶表示不滿,強烈呼吁,最終在Win10的最新版本中又出現(xiàn)了有限范圍的窗口毛玻璃特效,為啥這個這么受歡迎的功能特性卻被反復(fù)折騰呢,有個說法就是, 實現(xiàn)這個特效,太費電,所以就經(jīng)歷了取消、再有限的追加這么一個階段,個人認為,隨著硬件技術(shù)的快速發(fā)展,這個特效的全面恢復(fù)為時不遠了。那么,我們就從 技術(shù)層面上來說說為啥這個特效特別費電。
一、毛玻璃特效渲染方式
簡單說,所謂的毛玻璃特效,主要就是一個圖像處理中的高斯模糊,這里我們不詳細解釋啥叫高斯模糊以及其實現(xiàn)原理,我們這里就是簡單一說,高斯模糊有兩個相關(guān) 的概念,一個是背景層,一個是前景層,針對前景層中的一個像素點的顏色和透明度,結(jié)合背景層中對應(yīng)前景層像素位置的周圍多個點的像素值進行一種模糊處理的 算法,注意,這里有兩個關(guān)鍵地方,一個是要獲取背景內(nèi)容,另一個是要一對多的像素計算。獲取背景內(nèi)容這個我們先放一邊后面再討論,我們先說這個一對多的像 素渲染計算。前面也說過,一個最終顯示的像素點的顏色是根據(jù)一個前景點結(jié)合周圍多個背景點進行計算出來的,具體周圍多少個點要根據(jù)模糊程度設(shè)定的模糊半徑 來確定,但是不可否認那就是要進行至少6個點以上的計算,那么計算的工作量與不做任何處理的界面繪制的工作量要有大約6倍以上的差距,想想把普通的程序, 繪制一次界面的時間和工作量,毛玻璃特效時相當(dāng)于繪制6次以上的時間工作量(這個數(shù)據(jù)肯定不準確,但是大體的意思就是這個樣子)。
二、窗口的渲染方式
傳統(tǒng)的窗口繪制模式(我們只說最傳統(tǒng)的,那種利用GPU的不做討論),因為不牽扯到透明處理,那么,在窗口自身內(nèi)容繪制的時候完全不需要顧及其他窗口如 何,只管自己的繪制就可以,繪制完自己的內(nèi)容后,獲取自身窗口以外的背景內(nèi)容,在Windows中就是桌面顯示的內(nèi)容,然后在背景內(nèi)容中把自身繪制的內(nèi)容 在對應(yīng)的位置原樣覆蓋合成就可以顯示出來。如果這樣我們算是繪制一次,那么自身有透明度但是不需要模糊處理時,那么實際進行與自身大小相等的背景的內(nèi)容透 明合成,由于需要遍歷自身所有像素進行渲染計算,我們大體按2次繪制自身工作量論。但是如果系統(tǒng)整體支持模糊處理時就大不一樣了,這時候的流程如下:1、 自身窗口以下(后面)的所有窗口,系統(tǒng)都要遍歷一遍,查看有沒有需要模糊處理的窗口,有則從最后(最底層)窗口開始繪制一直繪制到當(dāng)前窗口,這個繪制過程 應(yīng)該比較耗時。2、把自身窗口內(nèi)容和背景內(nèi)容合成處理。3、看看自己前面(上層)還有沒有窗口需要做模糊或者重繪處理,有則合成渲染。
我們來假設(shè)一個極端情況當(dāng)前桌面只有三個窗口,自身窗口下層的一個窗口都需要模糊處理,自身窗口上層也有一個窗口需要模糊處理,再假設(shè)這三個窗口一樣,那 么如果其中一個窗口需要重繪一次,按我們前文的模糊處理6倍計算,大約就需要比普通繪制多18倍的時間。我們都知道,Windows系統(tǒng)是一個多線程的可 以多窗口并行運行的系統(tǒng),好多時候我們要打開N多的窗口,如果這些窗口都需要模糊處理,那么。。。
三、能耗的主要位置
話說要實現(xiàn)毛玻璃這種模糊特效,就需要多做很多很多次的的額外繪制,而這些繪制的工作都由誰來做呢?一般來說,這些額外工作量(不止圖像處理還有為了得到 圖像而額外進行的業(yè)務(wù)處理等)大約有50%~60%由CPU來搞定,后來隨著GPU技術(shù)的發(fā)展和系統(tǒng)的不斷升級微軟把一部分的圖像渲染工作在底層做了一次 調(diào)整,部分的利用了顯卡的能力,這個可以從獨立提供的AlphaBlend繪制接口就可以看出一些端倪。AlphaBend主要就是提高了帶透明度的圖像 混合處理。效率還是很不錯的。但是好多的程序是沒有用這個接口的,特別是有些做的特別漂亮的程序,繪制方式還是用的Cpu,我們都知道,最開始的移動平 臺,CPU和GPU性能和PC平臺上的完全不在一個級別上,性能弱,還得多處理這么多額外的工作,那它的主要業(yè)務(wù)功能執(zhí)行就不足,俗稱的卡頓啊。CPU和 GPU的全功率運轉(zhuǎn),造成了事實上的用電大戶(另一個是顯示屏)。
在XP時代,我們的電腦就經(jīng)歷過一次硬件的升級,那時候程序有了主題這個東西,讓世界更美好起來,再也不是那種灰灰的界面,但是如果大家有印象的話,我們 都記得那個死慢死慢的Vista,好多的原先的電腦硬件都跑不了,雖然有系統(tǒng)各種不完善的原因,但是顯卡的性能還是有很大的作用。即便后來的Win7做了 優(yōu)化,但是顯卡還是要高啊,不然,那個Aero特效就開不了,還記得不?不過那時候大家的主要關(guān)注重點都是花錢,升級上,都是臺式機,誰在乎那多花的一點 點電費啊。那時候的微軟也是,誰在乎啊,于是乎,微軟就在移動平臺跌了大跟頭,那時候移動平臺還很少,也不智能,當(dāng)智能的東西降臨的時候,微軟準備把 Windows搞到移動平臺上的時候,當(dāng)然,當(dāng)時要搞也得用Win7搞啊,XP這貨,想掐死他還來不及怎么可能用他,但是,微軟突然發(fā)現(xiàn),尼瑪,搞出來的 這玩意太耗電,只能在PC上玩玩,所以,我們就看到了Win7對觸摸屏的有限度的支持,然后就沒有然后了,微軟在憋大招,要搞一個新的,能支持移動智能平 臺的,當(dāng)然也非常支持觸摸屏的新系統(tǒng),嗯,然后,然后...微軟發(fā)現(xiàn)太費電,不管怎么優(yōu)化都太費電,而且還特耗系統(tǒng)資源,節(jié)能才是第一位啊,于是,找啊找 啊找朋友...發(fā)現(xiàn)這個Aero特效是個耗電大戶,嗯需要搞掉,怎么搞呢,不僅要系統(tǒng)的這些窗口不能支持Aero,還得從底層根子上限制這個功能,于是就 把這些API給去掉了,嗯,向前兼容這一微軟光榮傳統(tǒng)在Win8被打破了。
當(dāng)然,只是在底層做了簡單的封鎖,如果有特愛系統(tǒng)美化的達人的話可能知 道后來有人利用微軟這個不徹底的封鎖漏洞還是給搞出了這個模糊特效。話說,這個殘廢的Win8一出來,引起罵聲一片,各種不足中,Aero特效也是很大一 部分用戶喜歡并強烈需要的功能,最后,終于Win10出來后又有限度的有了這個功能。但是只是有限度的增加這個功能而已。即使是Win10一開始也是沒有 的,因為剛剛開始的時候平板的CPU和GPU還是不怎么給力啊,現(xiàn)在好幾年過去了,硬件性能終于上來了,于是有了我們看到的有限度模態(tài)特效。
一個好消息,就是微軟剛剛發(fā)布的那個SurfaceBook,巧妙的把獨立顯卡和額外電池給搞到那個可分離的鍵盤部分中了,解決了顯示和供電不足的問題, 這是一個劃時代的解決方案,完全可以解決由于Aero特效帶來的能耗問題,但是這玩意剛剛開始,還不多,等這種方案普及并且硬件性能進一步提升后,這個 Aero特效全面恢復(fù)就不是問題。
哈哈,以上內(nèi)容就是隨便寫寫,肯定有很多不足,歡迎大家一起來討論。這不是一個學(xué)術(shù)文,所以,不要拿學(xué)術(shù)上的嚴謹來衡量這個。