注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

穷到掉渣的超级奶爸阿赵

阿赵的博客

 
 
 

日志

 
 

闲谈Flash3D  

2012-11-20 22:42:56|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

      最近阿赵我过得非常不爽,因为虽然在上班,但却没有项目做。大家都在热火朝天的赶项目,但作为as3白痴的我,却一点都帮不上忙。不过我也不是得过且过的人,这段时间我也在不断的学习。

      不止一次听到有人谈论Unity发布swf的话题了,很多资深的as3程序员估计是挺看不起Unity要发布swf的,因为flash已经有了Stage3D这个新技术,而且也有《封神无双》这样的成功flash3D页游案例摆在眼前。我之前也被问到,Unity3D和Stage3D比较起来怎样。但以前我一直没有了解过Stage3D,所以一直无法给出答案。这几天我比较认真的了解了Stage3D,终于可以谈谈我的看法。

      我感觉Unity3D和Stage3D没有可比性。我这样说并不是表示Stage3D很差,而是,这两个东西不是同一级别的产品,所以无法很有针对性的作出比较。

      Unity3D是3D引擎,它包含了自己的底层渲染方式,包含了物理引擎,包含了各种模块工具和可视化编辑工具。而Stage3D只是flash的一个底层渲染的解决方案,没有各种模块功能和可视化编辑工具,并不能直接当引擎来使用的。如果真的要比较,可以拿一些支持Stage3D的flash3D引擎来和Unity3D比较,比如away3D的4.0版本之类,而不是直接拿Stage3D来比较。

      那么我们撇开Unity3D引擎,单独的说一下Stage3D的情况吧。说白了,Stage3D的革命性地方,就在于可以把flash的一个位于最低层的stage里面的内容交由GPU去运算,从而释放了CPU的性能。

      这个最底层的stage,含义就是,它位于舞台(stage)的最下面一层,原生的flash的displayObjects(比如用传统flash做的UI界面)可以覆盖在stage3D的上面,但stage3D的东西并不可以覆盖在displayObjects上面。而且由于它是独立一层的,所以Stage3D的内容也并不在flash的DisplayList上面,它不属于displayObjects,所以也不能通过addchild方法来添加到场景,而只能通过绘制三角形物体的方式绘制出来。

      Stage3D由于它不是一套引擎,所以也并没有所谓的支持什么样格式的三维模型文件,也没有专门的导入导出模型的工具。它是通过最底层的获取模型顶点信息、索引信息、法线信息等,然后保存在显卡的缓存里面,然后再通过着色器程序去处理这些缓存里面的数据,并绘制图形的。这样的缺点是显而易见的,就是我们如果需要往Stage3D里面导入自己的模型,必须自己去编写三维模型文件数据的解析器,定义缓存数据的格式,这是一件比较困难的事情。但好处也是有的,就是能比较自由的去控制自己想要的模型信息,并按照自己的需要去编写解析工具。

      暂时我学习到的情况是,Stage3D可以通过导出obj格式的三维模型来解析。obj格式的模型里面的内容非常的规范,每一行都有标识字符和顶点的内容,可以很容易的通过解析字符串来获得顶点信息。但问题也跟着来了,假如是使用obj格式来解析,复杂的蒙皮信息、动画信息将很难导出到Stage3D来使用了。

      Stage3D的着色器(shader)程序和传统的着色器程序一样都是由顶点程序和片段程序这两部分构成的,不同的是,Stage3D的着色器程序还是比较的落后,只能用简单的类似于汇编语言的写法来写一些简单的运算,比如矩阵乘法、加减乘除、复制等30种比较简单的运算。在这一点上面,Unity3D的shader就要先进很多了,不单有自己的shaderlab编写规范,还可以使用先进的CG语言编写复杂的效果。还有一点比较奇怪的地方是,Stage3D的shader程序里面并不包括深度检测、混合模式检测和背面消隐的处理,而这些处理,是直接在Stage3D的基类Context3D里面做处理的……

      至于物理引擎方面,其实我也不需要多说,Stage3D本身是没有物理引擎这个概念的,而熟悉flash的朋友其实也不会去太关心物理引擎的问题,因为在flash里面我们一直都是自己用各种方法来模拟物理效果的。当然了,我们可以把之前写好的物理模拟类封装起来,也可以变成了Stage3D独有的物理引擎,不过这就是各位开发者自己的事情了。

      我个人感觉,由于Stage3D是一样这么纯粹的东西,所以假如所有的框架我们都来自己重新写一遍,让它变成一个属于我们自己的3D引擎的话,Stage3D的渲染效率还是很高的。这是因为所以需要显示的东西都可以由我们亲自控制,精确到每一个顶点。而Unity3D由于它的丰富,而包含了太多我们不可以控制的东西,所以在某些情况下,它会比较臃肿。

      当前的情况是这样,由于Stage3D刚是推出不久,而导致了它不论是学习的文件,还是较为成熟的引擎框架都是比较缺乏。而且由于shader语言的级别比较低,大概只能是处于第一代3D引擎的水平,所以一些十分绚丽的效果它是暂时做不出的。但由于flash开发人员的3D情结由来已久,而且flash之前也有不少的3D引擎解决方案,所以我相信第三方的支持Stage3D的3D引擎会很快的发展起来。而作为flash最大的用途网页游戏来说,一边也很少用到非常逼真的效果,所以暂时的shader级别还是够用的。

      在这之后,阿赵我会继续研究支持Stage3D的引擎,并结合着Unity3D发布swf的功能,试图找出一个比较合适3D网页游戏制作的解决方案。

  评论这张
 
阅读(2716)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016