About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Nov

    30

    周末闲着也是闲着么(一个不搞 3D 开发的人如何看 3D 引擎)。

    我第一次看到 Flash 3D 技术是在 2006 年的夏天的一个夜晚,一个朋友发给了我一个使用 Papervision3D(AS2版本的 PV3D)制作的 Flash 360 度旋转的全景案例。但因我个人比较喜欢 2D 唯美的东西,对他的 3D 演示产品并没有表示出很大的兴趣。因为我对 3D 的评价是:一张纸永远包不平一个球

    —— 所以位图材质被贴到模型上的时候,它总是需要以这样或那样的方式被拉伸、缩放、平滑、模糊等等,进行各种像素的插值计算—— 所以3D 即时渲染技术在我的印象中一直都是比较丑陋的。尤其是看到一些游戏角色的模型那些肌肉有棱有角,像个怪兽一样时,这种“丑陋”就会表现的淋漓尽致(我一直比较讨厌轩辕剑后来的那些 3D 版本,其实就是因为游戏里面的 3D 画质跟它们的 2D 宣传画真的是有着天壤之别)。

    在 Flash 加入 Stage3D 之前,PV3D 一直是 Flash 3D 引擎中最简单也是最完整的 3D 引擎,尤其是在 AS2 的时代,几乎国内外所有的 360 度全景展示或 360 环物展示产品都使用清一色的 PV3D。然而由于 PV3D 是基于 CPU 计算的方式,在 Flash 加入 Stage3D 技术后,从此末落(虽然 Papervision3D 曾经想要推出基于 Stage3D 的 PapervisionX 产品,但这么些年过去了至今未发布正式版本,应该算是“流产”了)

    但如果开发者没有任何 3D 基础(注意是没有任何3D基础),并且英语水平很囧,我会推荐从 PV3D 学起,但并不需要深入的学习全部,因为:PV3D 是至今为止拥有唯一完整和系统的中文基础教程的翻译版《Papervision3D Essentials》,这会帮助开发者了解 3D 中的术语是指哪些对象。而其它 3D 引擎除了 《Away3D 3.5 Essentials》,都是没有完整和系统的教程的。如果直接看 DEMO 的演示源代码——没有 3D 基础看 3D 的代码,很可能就像没有 AS 基础的人直接看 AS 源代码一样,可能会花了很多时间仍然看的一知半解,甚至看不懂——因为演示代码本身就是给有基础的人看的,有了基础便会一看就懂。

    我在这个周末大概花了将近3 个小时,通读了一边《Papervision3D Essentials 中文翻译》,既便是像我这样没有 3D 基础的人,再去看 Flare3D 官方提供的演示代码,也是很容易看懂的。然而 Flash 3D 技术并不景气,至少目前来说它并不景气,如果它一直这么不景气,那么类似《Away3D 3.5 Essentials》这样的英文书籍可能永远不会有人去翻译它(这书已经上市有个二三年了,虽然我没有看过它,但我觉的既然它出书了,那么应该是系统的教程)。

    其实开发者们应该都有接触过 Flash 页游,很多都是打着 3D 的口号,但实际上它们往往处在一种“伪 3D ”状态,只有角色是 3D的,而游戏地图往往是 2D,所以是没有景深透视的,不能像那些真正的 3D 端游那样旋转镜头之类的操作。这跟性能有着很大的关系,所以很多页游公司会放弃使用 Flash3D 技术,而采用类似 U3D 这样的技术,而 Flash 3D 页游开发者也会被迫的转到 U3D 之类的技术。

    我并没有真正的使用过 3D 引擎做过实际的项目,只是在看资料时测试过 PV3D 和 Flare3D 的几个示例代码。在查找资料的过程中其实我也发现到国内以 9RIA 论坛为例,在 3D 资料中,Away3D、Flare3D、Alternativa3D 的资料是比较多的,有 3D 牛人们都给他们出了一些单独的案例教程。

    也有国外的开发者对多种 Flash 3D 引擎进行了一个综合性的比较:《On the choice of a Stage3D engine》,有兴趣的可以看看,这位名叫 Arnaud Gatouillat 的作者相比较之下他喜欢 Flare3D。但我更喜欢这篇有针对性的文章Flare3D Vs Away3D in the creation of a simple game》,这个名叫 Emanuele Feronato 的作者提供了 Away3D 和 Flare3D 更具体更详细的比较,并且在最后也倾向于 Flare3D(这位作者将 Alternativa3D 也剔除了,我觉的它应该被剔除,因为 Alternativa3D 这名字也太长了,长到我都不知道怎么读,哈哈!!,所以取个简单易读的名字还是重要的,@_@)

    这两位作者喜欢 Flare3D 的原因有很大的两个共同点:1、帮助文档做的很棒;2、简单易上手(包括编码量也少。所以能用一行代码搞定的事件,别搞好几行;能用简单的名字,就别取那么长的名字。再次哈哈)。我一个没有 3D 基础的人仅仅只是通读了 《Papervision3D Essentials》 的翻译,就能看懂 Flare3D 的那些样例代码,这说明它真的很简单(至少入门真的是很简单)。

    还有一点很重要的是,这些新的基于 Stage3D 的 Flash 3D 引擎,在实际测试的几个案例中都会遇到一个相同的问题:那就是如果用户关闭了 Flash 播放器本身的硬件加速功能,这时候它们的锯齿现象就会变的很严重,并且帧速率也会大大的下降(很多笔记本用户其实都会有一个感受,就是在 Google Chrome 浏览器中如果去观看类似优酷这样的视频,或者玩一些 Flash3D 网页游戏时,显卡风扇会狂转,如果没有显卡风扇甚至可能会因为温度过高而自动关机,甚至莫名奇妙的连同 CPU 的使用率也会升高,CPU 风扇也是狂转。在百度上有很多这样询问的用户,因为我曾经也遇到过这样的情况,所以会不得不关闭 Chrome 播放器的硬件加速功能)。这种特殊情况下其实是不及 PV3D 的,因为 PV3D 从一开始就是基于 CPU 的,它的材质平滑处理、帧速率完全不受播放器是否开启硬件加速的影响。

    也许这篇闲谈跟开头说的有些不一样,既然我觉的这种“非照片级别的实时渲染 3D 技术”是丑陋的,那为什么又要去研究它呢,有一句话叫做:吐着吐着,你就习惯了。