自从微软推出Win7系统以来,在Win7系统中的窗口模糊特效也就是所谓的毛玻璃特效很受大家的喜欢,但是自Win8开始,这个特效就没有了,就有很多 用户表示不满,强烈呼吁,最终在Win10的最新版本中又出现了有限范围的窗口毛玻璃特效,为啥这个这么受欢迎的功能特性却被反复折腾呢,有个说法就是, 实现这个特效,太费电,所以就经历了取消、再有限的追加这么一个阶段,个人认为,随着硬件技术的快速发展,这个特效的全面恢复为时不远了。那么,我们就从 技术层面上来说说为啥这个特效特别费电。
一、毛玻璃特效渲染方式
简单说,所谓的毛玻璃特效,主要就是一个图像处理中的高斯模糊,这里我们不详细解释啥叫高斯模糊以及其实现原理,我们这里就是简单一说,高斯模糊有两个相关 的概念,一个是背景层,一个是前景层,针对前景层中的一个像素点的颜色和透明度,结合背景层中对应前景层像素位置的周围多个点的像素值进行一种模糊处理的 算法,注意,这里有两个关键地方,一个是要获取背景内容,另一个是要一对多的像素计算。获取背景内容这个我们先放一边后面再讨论,我们先说这个一对多的像 素渲染计算。前面也说过,一个最终显示的像素点的颜色是根据一个前景点结合周围多个背景点进行计算出来的,具体周围多少个点要根据模糊程度设定的模糊半径 来确定,但是不可否认那就是要进行至少6个点以上的计算,那么计算的工作量与不做任何处理的界面绘制的工作量要有大约6倍以上的差距,想想把普通的程序, 绘制一次界面的时间和工作量,毛玻璃特效时相当于绘制6次以上的时间工作量(这个数据肯定不准确,但是大体的意思就是这个样子)。
二、窗口的渲染方式
传统的窗口绘制模式(我们只说最传统的,那种利用GPU的不做讨论),因为不牵扯到透明处理,那么,在窗口自身内容绘制的时候完全不需要顾及其他窗口如 何,只管自己的绘制就可以,绘制完自己的内容后,获取自身窗口以外的背景内容,在Windows中就是桌面显示的内容,然后在背景内容中把自身绘制的内容 在对应的位置原样覆盖合成就可以显示出来。如果这样我们算是绘制一次,那么自身有透明度但是不需要模糊处理时,那么实际进行与自身大小相等的背景的内容透 明合成,由于需要遍历自身所有像素进行渲染计算,我们大体按2次绘制自身工作量论。但是如果系统整体支持模糊处理时就大不一样了,这时候的流程如下:1、 自身窗口以下(后面)的所有窗口,系统都要遍历一遍,查看有没有需要模糊处理的窗口,有则从最后(最底层)窗口开始绘制一直绘制到当前窗口,这个绘制过程 应该比较耗时。2、把自身窗口内容和背景内容合成处理。3、看看自己前面(上层)还有没有窗口需要做模糊或者重绘处理,有则合成渲染。
我们来假设一个极端情况当前桌面只有三个窗口,自身窗口下层的一个窗口都需要模糊处理,自身窗口上层也有一个窗口需要模糊处理,再假设这三个窗口一样,那 么如果其中一个窗口需要重绘一次,按我们前文的模糊处理6倍计算,大约就需要比普通绘制多18倍的时间。我们都知道,Windows系统是一个多线程的可 以多窗口并行运行的系统,好多时候我们要打开N多的窗口,如果这些窗口都需要模糊处理,那么。。。
三、能耗的主要位置
话说要实现毛玻璃这种模糊特效,就需要多做很多很多次的的额外绘制,而这些绘制的工作都由谁来做呢?一般来说,这些额外工作量(不止图像处理还有为了得到 图像而额外进行的业务处理等)大约有50%~60%由CPU来搞定,后来随着GPU技术的发展和系统的不断升级微软把一部分的图像渲染工作在底层做了一次 调整,部分的利用了显卡的能力,这个可以从独立提供的AlphaBlend绘制接口就可以看出一些端倪。AlphaBend主要就是提高了带透明度的图像 混合处理。效率还是很不错的。但是好多的程序是没有用这个接口的,特别是有些做的特别漂亮的程序,绘制方式还是用的Cpu,我们都知道,最开始的移动平 台,CPU和GPU性能和PC平台上的完全不在一个级别上,性能弱,还得多处理这么多额外的工作,那它的主要业务功能执行就不足,俗称的卡顿啊。CPU和 GPU的全功率运转,造成了事实上的用电大户(另一个是显示屏)。
在XP时代,我们的电脑就经历过一次硬件的升级,那时候程序有了主题这个东西,让世界更美好起来,再也不是那种灰灰的界面,但是如果大家有印象的话,我们 都记得那个死慢死慢的Vista,好多的原先的电脑硬件都跑不了,虽然有系统各种不完善的原因,但是显卡的性能还是有很大的作用。即便后来的Win7做了 优化,但是显卡还是要高啊,不然,那个Aero特效就开不了,还记得不?不过那时候大家的主要关注重点都是花钱,升级上,都是台式机,谁在乎那多花的一点 点电费啊。那时候的微软也是,谁在乎啊,于是乎,微软就在移动平台跌了大跟头,那时候移动平台还很少,也不智能,当智能的东西降临的时候,微软准备把 Windows搞到移动平台上的时候,当然,当时要搞也得用Win7搞啊,XP这货,想掐死他还来不及怎么可能用他,但是,微软突然发现,尼玛,搞出来的 这玩意太耗电,只能在PC上玩玩,所以,我们就看到了Win7对触摸屏的有限度的支持,然后就没有然后了,微软在憋大招,要搞一个新的,能支持移动智能平 台的,当然也非常支持触摸屏的新系统,嗯,然后,然后...微软发现太费电,不管怎么优化都太费电,而且还特耗系统资源,节能才是第一位啊,于是,找啊找 啊找朋友...发现这个Aero特效是个耗电大户,嗯需要搞掉,怎么搞呢,不仅要系统的这些窗口不能支持Aero,还得从底层根子上限制这个功能,于是就 把这些API给去掉了,嗯,向前兼容这一微软光荣传统在Win8被打破了。
当然,只是在底层做了简单的封锁,如果有特爱系统美化的达人的话可能知 道后来有人利用微软这个不彻底的封锁漏洞还是给搞出了这个模糊特效。话说,这个残废的Win8一出来,引起骂声一片,各种不足中,Aero特效也是很大一 部分用户喜欢并强烈需要的功能,最后,终于Win10出来后又有限度的有了这个功能。但是只是有限度的增加这个功能而已。即使是Win10一开始也是没有 的,因为刚刚开始的时候平板的CPU和GPU还是不怎么给力啊,现在好几年过去了,硬件性能终于上来了,于是有了我们看到的有限度模态特效。
一个好消息,就是微软刚刚发布的那个SurfaceBook,巧妙的把独立显卡和额外电池给搞到那个可分离的键盘部分中了,解决了显示和供电不足的问题, 这是一个划时代的解决方案,完全可以解决由于Aero特效带来的能耗问题,但是这玩意刚刚开始,还不多,等这种方案普及并且硬件性能进一步提升后,这个 Aero特效全面恢复就不是问题。
哈哈,以上内容就是随便写写,肯定有很多不足,欢迎大家一起来讨论。这不是一个学术文,所以,不要拿学术上的严谨来衡量这个。