WPFSilverlight深度解决方案:(十七)GPU硬件加速下Silverlight超性能动画实现(上)

WPFSilverlight深度解决方案:(十七)GPU硬件加速下Silverlight超性能动画实现(上),第1张

概述时间:2010-06-24 11:54 来源:博客园 作者:深蓝色右手 点击: 278次 Silverlight3 发布时,我和朋友都为其新增的 GPU 硬件加速功能激动不已,于是开始了肆无忌惮的连夜测试,可结果却实在让我们大失所望。是的,不论怎样修改代码都无法感觉到明显的性能提升。接下来的日子里, GPU 这个词渐渐的远离了我的脑海。      Silverlight3发布时,我和朋友都为其新增 时间:2010-06-24 11:54 来源:博客园 作者:深蓝色右手 点击: 278次 Silverlight3 发布时,我和朋友都为其新增的 GPU 硬件加速功能激动不已,于是开始了肆无忌惮的连夜测试,可结果却实在让我们大失所望。是的,不论怎样修改代码都无法感觉到明显的性能提升。接下来的日子里, GPU 这个词渐渐的远离了我的脑海。   

 

Silverlight3发布时,我和朋友都为其新增的GPU硬件加速功能激动不已,于是开始了肆无忌惮的连夜测试,可结果却实在让我们大失所望。是的,不论怎样修改代码都无法感觉到明显的性能提升。接下来的日子里, GPU这个词渐渐的远离了我的脑海。直至几天前,在与 一位朋友交流后又再次让我萌生去测试GPU硬件加速在Silverlight4中效果的想法。真乃不测不知道,一测吓一跳。在最近Silverlight贬低声此起彼伏的日子里,我相信这篇文章及测试结果必将成为Silverlight开发中最为强劲的春哥!没错,信则永生! 既然要用GPU硬件加速,那么我们首先得知道它的定义原理及作用,大家可以参考MSDN 的相关介绍,下面是我精简的核心内容: GPU 硬件加速是使用合成缓存将可视元素或元素的可视化树缓存为位图图面的行为。这可能为某些方案带来重大的性能改进 GPU 。使用缓存合成,您可以在可视元素第一次呈现之后,将其缓存为位图。在将某个对象或对象树缓存为位图之后,当应用程序刷新时,它不再经过呈现阶段,而是只呈现缓存的位图。此类缓存位图交换可以充分利用用户 中提供的硬件加速功能,这种方法会大大改进某些方案的性能 接下来,要启动Silverlight中的GPU硬件加速首先必须进行参数设置: 1)在Silverlight页面对象中加入参数 < param  name="EnableGPUacceleration" value="true" /> 2)为需要使用GPU加速的 Uelement对象设置CacheMode值,比如:   Xaml

 

 <MediaElement>

 

 <MediaElement.CacheMode>

 

    <BitmapCache RenderAtScale="4"/>

 

 </ MediaElement.CacheMode>

 

</MediaElement>

 

或C#:
MediaElement  mediaElement = new MediaElement () {CacheMode = new BitmapCache() { RenderAtScale = 4 } }; 其中 BitmapCache缓存中的RenderAtScale指明将对象呈现为已缓存位图时所使用的缩放比例。如果您将其指定为负数,则会引发错误。默认值为1。注意:RenderAtScale越小cpu消耗越少,内存占用越少,即性能越好!另外,RenderAtScale在介于0到1之间时,位图呈现为模糊状态。或许有朋友会问:游戏开发中我们是否能将之设置为0.8左右,不仅能模糊边缘且不失太多像素,又能提高性能,当然这还有待进一步测试。 最后,我们还得了解GPU硬件加速所适用的范围。针对目前的Silverlight4版本,我们可以对transform、RectangleGeometry 、Opacity、Visibility、Projection、DeepZoom等对象进行GPU硬件加速。其中从transform派生的对象包含:Rotatetransform、Scaletransform、Skewtransform、Translatetransform、Matrixtransform、transformGroup;而Projection (三维透视) 派生的对象包含PlaneProjection和Matrix3Dprojection。 值得一提的是,Silverlight对Projection和DeepZoom的GPU硬件加速支持是在4版本中才新增的,从这点我们可以预测到Siverlight未来的发展趋势:Web3D硬件加速将在Silverlight后续版本中得到完美支持! 以上是关于Silverlight中GPU硬件加速方面的理论精华浓缩,接下来是我专门为测试Silverligh4中GPU硬件加速功能所编写的Demo与测评,我相信这才是本文最激动人心时刻的开始: Demo 在线演示地址: 点击进入  

源代码下载
下面是我的测试环境及结果--------------------------------------- 机器配置:

这是一台目前市面最最普通的行政级办公电脑,测试结果:

环境:浏览器1024*768(全屏),单位图片150*150(像素)
测试结果(对象:500精灵)

动画方式 GPU 启动 OOB 模式 FPS cpu 消耗(%) 内存占用(M) 动画效果
Canvas 位移 1.93 92 59 比较卡
24.58 45 110 相当流畅
  92 39 比较卡
  45 92 相当流畅
Translatetransform 位移 1.65 92 65 非常卡
3.7 65 115 比较卡
  92 41 非常卡
  65 98 比较卡
透明度(Opacity)变化 7.37 92 58 比较正常
36.25 45 107 相当流畅
  92 42 比较正常
  38 92 相当流畅
可见性(Visibility)变化 14.92 20 54 逐个闪烁
3.19 30 110 整齐连续
  20 37 比较闪烁
  30 94 整齐连续
三维(PlaneProjection)变换(对象仅为整体容器) 11.16 92 61 正常
7.79 85 63 正常
  88 44 正常
  84 43 正常
矩形切割(Clip) 12.08 82 61 不整齐
5.52 70 113 整齐流畅
  81 44 还算流畅
  69 94 整齐流畅

以Canvas作为容器的精灵移动方式为例,500个精灵同时高速移动,没启动GPU硬件加速与启动了GPU硬件加速的性能差距非常之明显:

仅仅是多消耗了一部分内存即可换来GPU硬件高性能加速,不仅大幅度降低cpu的消耗,并且同时能让游戏保持相对流畅的帧率(FPS);更棒的是,如果某个使用过GPU加速的对象被销毁后,其占用的所有内存资源均一样会被GC无情且干净的释放掉。只能这么说,Silverlight4给我们开发者所带来的性能提升200%绝非吹牛,事实胜过雄辩! 值得一提的是,测试中我还专门引入了OOB模式的测试环节,因为OOB模式之前在Silverlight上备受争议,很多人认为它是鸡肋功能。以上的测试结果至少能说明两个问题: 1)  模式下由于去掉了浏览器这层袈裟,因此内存消耗同比降低很多。OOB 2)  模式下,同样的GPU硬件加速下,性能比浏览器中运行的要高,或许是我显卡比较差的原因,提高的并不明显,但从cpu及流畅度方面可以比较明显的看出,这方面还需要不同的电脑进行测试才能确定。OOB 最后我再补充一下:只有 windows Vista、windows 7 和 windows XP 才支持硬件加速。在 windows XP 上,NVIDia、ATI、Intel 卡(具有发布日期在 2004 年 11 月的驱动程序)是硬件加速所必需的。另外需要特别注意: 如果错误使用GPU硬件加速,则缓存对象可能会影响性能。比如说需要对一个Canvas进行硬件加速,而实际执行动画的是它内部的精灵们,那么如果仅仅对Canvas标记为硬件加速几乎不会有任何效果;切记,哪个对象需要硬件加速功能时就设置该对象的CacheMode,而非设置它的父容器。 展望:Silverlight4目前无法支持GPU硬件加速的有HLSL的Effect渲染以及透明蒙板和非矩形剪辑,这些在游戏开发中都有较多的应用,未来某天当微软的工程师们为它们都插上GPU硬件加速翅膀的那一刻,RIA界游戏开发的王者将非Silverlight莫属! 到此,针对Silverlight4中的GPU硬件加速就测评完了。或许大家此时的心情和我一样:蠢蠢欲动。没错,如此棒的结果还不赶快行动。游戏开发中我们该如何最大程度的发挥GPU硬件加速特性来提升游戏的整体性能?下一篇文章我会继续就这一问题与大家深入探讨,让性能提升得更猛烈些吧! 总结

以上是内存溢出为你收集整理的WPF/Silverlight深度解决方案:(十七)GPU硬件加速下Silverlight超性能动画实现(上)全部内容,希望文章能够帮你解决WPF/Silverlight深度解决方案:(十七)GPU硬件加速下Silverlight超性能动画实现(上)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1027806.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存