【Stage3D学习笔记续】山寨Starling(十):高效游戏设计、纹理集和ATF
我发布了经过批处理优化的v0.3版,点击下载:https://github.com/hammerc/hammerc-study-Stage3D/archive/v0.3.zip
先看看我们批处理优化后程序的效果吧!
首先,为了能明显的看出差距,我把未优化v0.2版本的MovieClipTest.swf的动画数量调到250个,同时QuadBatchTest.swf的代码一致也是250个动画,只是使用的是经过批处理优化的v0.3版本。
为了查看实际的性能差异,我使用了scout,下面看看我们的成果吧:
MovieClipTest.swf的帧率:

QuadBatchTest.swf的帧率:

MovieClipTest.swf的3D绘制:

QuadBatchTest.swf的3D绘制:

我们从Stage3D的绘制记录就可以看出来了,未优化的版本,绘制次数太多,每帧都存在250次DrawCall,所以对帧率造成了巨大的影响,而优化的版本由于所有的250个动画其实状态都没有改变,所以可以合并为一次DrawCall,绘制记录甚至都不需要出现滚动条!这主要是由于批处理技术为我们极大的减轻了CPU同GPU进行数据交换的时间。
Starling高效游戏设计的好文推荐,精华都在这两个文章中了,看官们这个必读哦:
纹理集:
纹理集是把多个纹理(图片)集合到一个纹理(图片)的技术,需要配合一个数据文件来描述其中的某个图片的区域位置。
纹理集在2D渲染中并没有特别的好处,但在使用3D渲染2D的情况下有一个优势,因为该优势的存在,开发高效游戏时纹理集甚至是必须使用的!
还记得我们在批处理那一个笔记中谈到的状态改变么?如果渲染的纹理改变,则状态必须改变,那么就会多出一个DrawCall,如果我们有一个飞机纹理,同时有一个子弹纹理,那么绘制两个图形时必定会执行两次DrawCall,但是如果使用纹理集把这两个纹理合并了呢?没错,状态不会改变了,因为使用的是同一个纹理,仅仅是uv坐标不一致而已!所以,但我们的纹理集中的纹理越多,我们的绘制会越高效!
更多细节可以查看文章Starling性能优化方案
ATF:
Adobe Texture Format (ATF) 工具用户指南
ATF格式是由Adobe官方提供的转换工具从图片格式转换而得的,转换工具放在Gaming SDK的Utilities\ATF Tools文件夹内,鉴于从Adobe官方下载Gaming SDK比较坑爹,所以我上传到百度网盘供各位下载:
【Stage3D学习笔记续】山寨Starling(十):高效游戏设计、纹理集和ATF的更多相关文章
- 【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现
批处理是使GPU进行高效绘制的一种技术手段,也是整个渲染流程中最核心的技术,到目前为止我们并没有使用到这种技术手段,下面我们看看我们现在的渲染机制. 先想一想我们最开始是怎么向GPU绘制一幅图像的,可 ...
- Stage3D学习笔记(五):通过矩阵操作纹理
虽然我们上一节已经实现了正交矩阵的显示,但是可以明显的感觉到要调整显示纹理的坐标和尺寸是相当复杂的,需要对每个顶点进行操作,如果还要加上注册点和旋转的话,用上一节的方法来做是会让人发疯的! 所以我们距 ...
- 【Stage3D学习笔记续】山寨Starling(十二):总结和一些没提到的东西
我们的山寨Starling到这里就告一段落了,不得不说这是一个非常优秀的2D框架,他的设计和架构为后来的许多框架都提供了很好的参考,比如现在正在崛起的Egret,我们的一番解读也只是窥见了Starli ...
- 【Stage3D学习笔记续】山寨Starling(十一):Touch事件体系
我们的山寨Starling版本将会在这里停止更新了,主要还是由于时间比较有限,而且我们的山寨版本也很好的完成了他的任务“了解Starling的核心渲染”,接下来的Starling解析我们将会直接阅读S ...
- 【Stage3D学习笔记续】山寨Starling(二):VertexData探幽
还记得之前的学习笔记中我们的顶点缓冲数组中的顶点数据么,我们使用一个一维数组来记录所有的顶点数据,这是由于顶点缓冲上传数据时是使用的一维数组. 如果对顶点数据进行一层代码的封装,就能更加的方便我们来操 ...
- 【Stage3D学习笔记续】真正的3D世界(一):透视矩阵
如果各位看官跟着我的学习笔记一路看过来的话,一定会吐槽我的,这都是什么3D啊?从头到尾整个都是在使用GPU绘制一堆2D图像而已,的确,之前我们一直使用正交矩阵利用GPU加速来实现2D世界的展示,算不上 ...
- 【Stage3D学习笔记续】山寨Starling(四):渲染代码实现及测试程序
本章会实现最核心的代码,所以涉及点会比较多,这里会发布一个版本,方便日后的回退查看. 点击下载:https://codeload.github.com/hammerc/hammerc-study-St ...
- 【Stage3D学习笔记续】山寨Starling(三):Starling核心渲染流程
这篇文章我们剔除Starling的Touch事件体系和动画体系,专门来看看Starling中的渲染流程实现,以及其搭建的显示列表结构. 由于Starling是模仿Flash的原生显示列表,所以我们可以 ...
- 【Stage3D学习笔记续】山寨Starling(一):从事件说起
我在GitHub上新开了一个项目:https://github.com/hammerc/hammerc-study-Stage3D 山寨的Starling版本我取名叫做Scorpio2D,以后的笔记中 ...
随机推荐
- MSSQLServer基础05(联合查询,连接查询)
联合结果集union(集合运算符) 集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定.(可以用来连接多个 ...
- POJ3083——Children of the Candy Corn(DFS+BFS)
Children of the Candy Corn DescriptionThe cornfield maze is a popular Halloween treat. Visitors are ...
- Oracle命令(一):Oracle登录命令
1.运行SQLPLUS工具 C:\Users\wd-pc>sqlplus 2.直接进入SQLPLUS命令提示符 C:\Users\wd-pc>sqlplus /nolog 3.以OS身份连 ...
- Windows 7/8 创建WIFI热点
问题描述:很多人(特别是中国的大学生)都拥有一台联网的笔记本电脑,而手机使用的却是电信运营商提供的限制数量和速度的GPRS. 很多人不敢想象:联网的笔记本电脑能够将其流量以WiFi的形式共享出来供其它 ...
- Json.net 同过 JsonConverter 调整导出值(未完成)
public class TimeSpanConverter : JsonConverter { public override bool CanConvert(Type objectType) { ...
- OWIN katana注册中间件的几种写法
首先特别说明下在startup中注册完中间件的两个注意事项,看到有人写的东西有误导人的作用.关于startup启动发现类的内容,参照这里 http://www.asp.net/aspnet/overv ...
- UVa 673 (括号配对) Parentheses Balance
本来是当做水题来做的,后来发现这道题略坑. 首先输入的字符串可能是空串,所以我用了gets函数,紧接着就被scanf("%d", &n)后面的换行符坑掉了. 于是乎再加一句 ...
- JSOI2007建筑抢修
实际上和大多这类题一样(比如wikioi上的地鼠游戏),考察的都是堆的操作 这次改完之后就算把堆的模版定下来了 悲剧的是:大根堆打成了小根堆,导致一开始一直是10分…… 按结束时间排序,(经过验证,结 ...
- Spring Autowire自动装配介绍
在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间和精力用于创建和维护系统中的< ...
- Android 主题动态切换框架:Prism
Prism(棱镜) 是一个全新的 Android 动态主题切换框架,虽然是头一次发布,但它所具备的基础功能已经足够强大了!本文介绍了 Prism 的各种用法,希望对你会有所帮助,你也可以对它进行扩展, ...