关于Android和GPhone

      游戏开发 2007-12-13 2:56

汤锴 01:48:06
研究了一会,跑了一下Android的模拟器上的3D图形程序,一个方盒子在转,CPU占用率98%。
网上找到已经有人在Android上做了一个简单的模型浏览器,极慢PC上跑5FPS左右。
可以想见OpenGL ES的软件渲染模式效率的确不怎么样
汤锴 02:24:39
Android支持的OpenGL ES版本为1.0,同时也支持OpenGL ES 1.1的部分功能,但是官方说这些功能还不可靠,所以开发者最好不要使用
OpenGL ES 1.0的规范类似于OpenGL 1.3,是后者的一个子集
OpenGL ES 1.x都是Fixed pipeline,也就是vs,ps肯定是不用考虑了

另外一个很重要的事情:
OpenGL ES功能是作为Android的一个lib而提供的,在模拟器目录下能找到
OpenGL ES自带软件渲染实现,所以即使没有硬件支持,也能够运行
就连Android官方对3D lib的描述也是:“当有硬件加速可用时”使用硬件加速

换句话说,GPhone不见得一定会支持硬件加速,而如果不支持,3D应用将工作在软件渲染模式下,而OpenGL ES的软件渲染效率很低(不要相信官方的说辞),根本不可能用于3D游戏(最多是那种极其简单的游戏)

这里我并不是吹嘘S3D的软件渲染优化得如何,只是OpenGL ES作为一种通用的标准,必然要考虑到通用性,而通用和效率肯定是矛盾的,OpenGL ES的软件渲染肯定不可能优化得像S3D一样好

所以,如果GPhone最终并不包括硬件加速,那么用OpenGL ES开发出来的3D游戏,其效果和效率绝对远远不如我们用S3D开发的游戏。

那么GPhone最终是否会包括硬件加速呢?我查了很多资料都没有结果,也不可能有结果,因为GPhone的样板机都还在开发中。
从今天在刘磊机器上看到的视频来推断,GPhone的样板机肯定不止一种型号,有可能很多家厂商都在做。视频中我看到横屏和竖屏两个版本,其中竖屏版本演示了一个3D的地球,甚至运行了硬加速模式下的Quake.那么很显然这个竖屏样板机就包括了硬件加速,而横屏我猜大概就没有.
但GPhone最终会选择哪一种硬件配置呢?这只有鬼才晓得,正如PS3的发布,只要还没上市,硬件规范每一天都会改来改去,谁都说不清楚.
甚至有可能,首发的GPhone包括好几种机型,分成低中高三个档次,而其中只有最高档的GPhone才具备硬件加速功能.
另外我注意到一个细节:Android提供的模拟器,其界面和视频中横屏的GPhone完全一致,而横屏的GPhone我猜测是不包括硬件加速的,这是否能说明什么?
从另一个角度说,在手机中集成显卡,现在市面上还很少见,基本上只有一些最高端的“试验机”才有可能,毕竟成本,重量,耗电量,都有比较显著的增加。
如果GPhone足够理智,我是否可以推断它最终不会采用硬件加速?
而这样一来,内嵌的OpenGL ES用途就大大削弱,由于效率的关系,就不太可能开发大规模的实时3D应用了,做一做Google Earth或者一些花哨的UI倒是可以。。。

顺便说一下,在Android中调用OpenGL ES的方法很简单,只需要:
import android.graphics.OpenGLContext;
import javax.microedition.khronos.opengles.GL10;
然后:
GL10 gl = (GL10)(mGLContext.getGL());
那么利用gl就可以直接访问OpenGL ES的API了,比如:
gl.glViewport(0, 0, w, h);
gl.glMatrixMode(gl.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(-ratio, ratio, -1, 1, 2, 12);

然后我又研究了一下在Android上用C,C++开发应用的可能性,看了一些文档之后,我认为是完全可能的,其实就相当于绕过Android,直接开发linux应用程序。
这一点已经有人实现了,他使用native c做了一个很简单的demo,并且在模拟器上运行成功。
但是:
1 这样就绕开了android,和他的思路背道而驰,估计不会被提倡,除非等到官方自己提供c++ SDK
2 不知道如何调用图形或者网络等高级功能,只能编写最简单的基于std c lib的exe
3 虽然在模拟器上通过abd加载可以运行正常,但是到了真机上,很可能会无法安装

看来现阶段用c++开发android游戏还不太现实,看了些信息,有可能2008年初会公布C++ SDK(有人猜测现阶段暂时只提供java  SDK的原因是java比较简单,我晕倒)
不过这个靠不住,而且如果我们等到那个时候再开始移植,肯定也来不及了

所以还是只有先用java开工,然后一边留意着最新的消息,可怜我还从未做过正规的java application,那个啥啥叫Elpase?我都没用过。。。tb,wt,靠你们搭框架了。。。框架搭好,我帮忙一起移植(java的语法我还是略知一二的),写GL代码。。。

回到3D渲染的话题,除非GPhone所有的机型都内置显卡,否则,软件渲染还是有用武之地的。只要GPhone存在不支持显卡的版本,那么就一定有支持的必要,而且一般来说,中低档手机才是市场的主流。
也就是说,如果有可能,注意我说如果有可能,我们可以同时提供参赛作品的两个版本:软件渲染版本(内核是S3D),以及硬件加速版本(内核是GLES),这有一点复杂但是应该是可以实现的,只要统一出一套接口就行了,如果用C++我可以轻易做到这一点(恶心的java我不知道行不行)
我想这样应该可以进一步提高我们作品的实用性和技术含量,以及价值,当然我们的代价和需要考虑的东西就会更多一些(其实这倒恰好不是非常关键,因为我们本来就要开发软件渲染的版本用于IMGA)

从另一个角度说,现在OpenGL ES在PC模拟器上跑得那么慢,如果我们真的用它开发了7Days的硬加速版本,那岂不是慢得象爬?(必然的)
而大赛第一阶段GPhone是还没有出来的,肯定是提交模拟器版本,这样慢得象爬的东西,我们怎么拿得出手?难道要求评委必须使用一台超级配置的PC运行游戏?像这样慢得像爬的版本,即使评委足够专业,能够相信最终手机版的效率,又怎么去评判呢?(我们假设评委运行游戏,Oh GOD只有1帧,然后评委用力按住方向键看着主角慢慢地移动。。。Oh GOD就象幻灯片。。。然后评委极其愤怒地关闭游戏)(估计这也是很多准备做3D游戏参赛的人,正在头痛的问题,呵呵,他们手里没有S3D)

嗯,先说这些
汤锴 02:33:26
睡了,现在看来,把S3D移植到Android并不是很复杂的事情,从Android SDK的sample来看,结构很简单也很清晰,tb和wt可以研究一下
使渲染同时支持S3D和GLES,并且做到对上层代码透明,应该也不会特别难,毕竟不涉及shader,只要封装得好就没有问题

倒是有个问题比较麻烦:如果同时做软硬两个版本,美术资源怎么办,总不能要求软版本渲染硬资源吧。。。做两套资源又很麻烦,我在考虑有没有什么捷径之类的。。。
汤锴 02:34:20
其实还有些问题没有想通,睡醒了再讨论吧
汤锴 02:35:35
好事者翻译的文档:http://www.androidcn.net/wiki/index.php/Documentation
我还没看
另外 www.androidcn.net 这个网站不错
汤锴 02:38:44
样板机的规范众说纷纭:

以下内容是目前Android的SDK中内核所对应的SOC平台的SPEC

Supports WCDMA/HSUPA and EGPRS networks
Multimedia Broadcasting Multicast Service (MBMS)
Integrated ARM11? applications processor and ARM9? modem
QDSP4000? and QDSP5000? high-performance digital signal processors (DSP)
528 MHz ARM11 Jazelle? Java? hardware acceleration
Support for BREW? and Java applications
Qcamera?: Up to 6.0 megapixel digital images
Qtv?: Playback at 30 fps VGA
Qcamcorder?: Record at 30 fps VGA
Q3Dimension?: Up to 4 million triangles per second, and 133 million depth-tested, textured 3D pixels per second fill rate
gpsOne? position-location assisted-GPS (A-GPS) solution
Support for Linux? and other third-party operating systems
Digital audio support for MP3, aacPlus? and Enhanced aacPlus
Integrated Mobile Digital Display Interface (MDDI), Bluetooth? 1.2 baseband processor and WiFi support

还有

# dmesg
dmesg
<5>Linux version 2.6.23-gcc3bc3b4 (arve@arvelnx.corp.google.com) (gcc version 4.
2.1) #3 Tue Oct 30 16:28:18 PDT 2007
<4>CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00003137
<4>Machine: Goldfish

不知道哪个版本是真的

根据资料整理,我认为CPU是Armv5te的可能性比较高,也就是并不很强。
汤锴 02:45:02
Q3Dimension?: Up to 4 million triangles per second, and 133 million depth-tested, textured 3D pixels per second fill rate
这个。。。  不知是否可靠:每秒400万三角形,填充率是每秒1.33亿个开了深度测试并且有贴图的像素点(看模拟器好像大约是640*480的?那相当于每秒可以刷屏432次,如果游戏运行在30帧,那么就是每帧可以刷14次,嗯,14次全屏的重画,看来半透明的OBJ和特效不成问题了)

汤锴 02:45:56
这下真的去睡了

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}