Unity2D绘图效率研究原创.docx

上传人:b****6 文档编号:7652480 上传时间:2023-05-11 格式:DOCX 页数:12 大小:707.46KB
下载 相关 举报
Unity2D绘图效率研究原创.docx_第1页
第1页 / 共12页
Unity2D绘图效率研究原创.docx_第2页
第2页 / 共12页
Unity2D绘图效率研究原创.docx_第3页
第3页 / 共12页
Unity2D绘图效率研究原创.docx_第4页
第4页 / 共12页
Unity2D绘图效率研究原创.docx_第5页
第5页 / 共12页
Unity2D绘图效率研究原创.docx_第6页
第6页 / 共12页
Unity2D绘图效率研究原创.docx_第7页
第7页 / 共12页
Unity2D绘图效率研究原创.docx_第8页
第8页 / 共12页
Unity2D绘图效率研究原创.docx_第9页
第9页 / 共12页
Unity2D绘图效率研究原创.docx_第10页
第10页 / 共12页
Unity2D绘图效率研究原创.docx_第11页
第11页 / 共12页
Unity2D绘图效率研究原创.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Unity2D绘图效率研究原创.docx

《Unity2D绘图效率研究原创.docx》由会员分享,可在线阅读,更多相关《Unity2D绘图效率研究原创.docx(12页珍藏版)》请在冰点文库上搜索。

Unity2D绘图效率研究原创.docx

Unity2D绘图效率研究原创

[脚本]Unity2D绘图效率研究(原创)[复制链接]

上一主题下一主题

hog

学徒

∙加关注

∙发消息

只看楼主倒序阅读楼主发表于:

08-21

—本帖被hawk执行加亮操作(2012-08-21)—

一直以来对Unity的方便的框架和可视化的开发环境赞赏有加,但同时也存在疑问,如果用如此庞大3D游戏引擎框架开发纯2D的游戏,会不会存在效率上的瓶颈,所以有必要自己动手测试一下。

测试

测试手段:

2D纹理随机绘制

测试纹理:

512*512带alpha通道透明贴图

测试分辨率:

1366*638的工作区域

共采用了4种不同的方法测试纹理绘制,每种方法都采用相同的Shader进行绘制,用复杂度一致的C#语句进行控制,以保证结果的可比性。

测试效果:

方法一.Unity内置的GUITexture:

注:

GUITexture是不需要指定shader的,查阅网络资料,Unity在绘制GUI纹理时默认会调用一个叫Internal-GUITexture的shader,这个文件网上可以下载到。

自己改名复制一份,作为shader用于后3种方法,以保证shader层面的一致性。

GUITexture的xy坐标范围是0-1,00对应屏幕范围,比如0.5,0.5就是屏幕中央。

测试结果:

CPU:

每帧cpu时间在1ms上下

GPU:

在5ms-10ms范围内

方法二.Unity内置的Graphics.DrawTexture方法

注:

调用这个方法应该在OnGUI而不是Update,调用语句大致如下:

voidOnGUI(){

if(Event.current.type.Equals(EventType.Repaint))

{

Graphics.DrawTexture(newRect(Random.Range(0,ScreenWidth),Random.Range(0,ScreenHeight),512,512),tex,mat);

}

}

其中tex就是要绘制的纹理,mat是指定的材质,此处为copy系统内置的Internal-GUITextureshader.

测试结果:

CPU:

本以为这种方法应该是最接近底层效率最高的,没想到这种方式下产生了大量GUI事件和调用,cpu效率很低

GPU:

因为使用了同样的shader,GPU没有明显变化

方法三.建立一个Plane面片,将测试贴图赋予该面片

注:

这个方法就是Unity常规绘制物体的方法了,把一个物体赋予透明贴图和材质模拟纯2D贴图,改变面片的位置就可以改变贴图位置。

当然摄像机要设置为正交方式。

测试结果:

CPU:

基本上没有产生太多额外cpu负荷,居然和GUITexture方式效率差不多

GPU:

与上面两种方式负荷大致相当,因为多了一个实际的物体,所以gpu曲线中出现绿色(Opaque实体绘制)的包络线,略大于上面两种方式

方法四.NGUI界面工具的SimpleTextureWidget

注:

这是我最愿意用的方式,可以方便的使用NGUI的很多内建功能,实现高级控制,当然效率是个疑问。

NGUI的物体都经过了一系列变换、缩放,以保持系统的统一性,所以在控制SimpleTexture位置时要用LocalPosition

测试结果:

CPU:

这个结果在预料中,由于NGUI自身的体系框架代码要产生额外的cpu负载,结果比1和3方法要高,但是略低于方法2.

GPU:

负载和方法3相当,也多了实体绘制的绿色包络线。

其实NGUI用了大量的plane来实现各种界面载体,可以理解。

总结:

CPU效率:

1>3>4>2

GPU效率:

1=2>3=4

易用性:

4>3>1>2显然用NGUI方式最好控制也能很好的与界面结合自己用面片渲染2D图像效率高于NGUI,但是控制代码很多都要自己写,而GUITexture使用起来显然更麻烦些,至于Graphic.DrawTexture那是类似纯绘图指令了,任何控制都要自己考虑。

方法2看来可以完全无视。

在性能不那么敏感的情况下,NGUI显然是最好的选择,自己写的控制代码效率未必更高,况且NGUI还有很多内建的功能如精灵动画可以支持2D游戏开发。

在极端优化的情况下,抛开NGUI庞大框架自己用Plane或者GUITexture构建2D显示控制也是不错的办法,比如游戏背景卷轴、地图等,不需要太多控制的部分。

Unity框架虽然庞大,但是在此框架下浪费的CPU资源还算可以接受,而获得的方便自然不言而喻。

不过从4个cpu图可以看出,系统物理引擎在完全空载的情况下也消耗了很可观的CPU资源,如果这部分能有个开关屏蔽,效率可以进一步提高。

大部分2D游戏并不需要物理引擎。

目前好像没有发现能主动屏蔽物理引擎的方法。

优化

其实2D透明材质的shader也还是有优化空间的,大部分情况下,2d游戏我们只需要将图像在屏幕原样显示就行了,不需要什么光照模型、颜色混合等等,基于此思想,可以自己把shader最简化,以达到效率最大化。

下面是2种shader的gpu效率图比较:

上面是系统内建的透明shader,因为考虑了颜色混合、高光等,效率较低,下面是优化过的纯2d透明贴图shader,提升还是比较明显的。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2