HTML5 2D/3D渲染引擎调研(2020年)

最近因工作需要,调研了下 H5 2D/3D渲染引擎。不过网上找到的都是些比较旧的文章,所以在这里,对一些数据和内容做下更新,以便保鲜这个主题。

首先,根据平时的印象,大致罗列了“怎样算作一款不错的渲染引擎”的评判因素(个人观点欢迎补充):

形象工程:官网形象,官方 example,github star,issue 处理,
技术层面:技术栈,技术文档,性能测评
生态周边:工具链支持,社区反馈,成熟产品


Part 1: 信息的搬运工

基于上述评判标准,接下来开始大面积搜集信息。边搜集边下结论,过滤掉一些不太合适的,使结论趋于收敛。

1、一些主流引擎库的特性比较

说明:表格数据未经严格验证-不是此处的重点.jpg

对表格做下展开:

  • Three.js:作为老牌的3D库,它已经有众多案例,在PC多网页3D中是目前不错的选择。
  • Phaser:文档教程,和案例方面都很不错,功能也算的上丰富。非常适合独立游戏开发和小团队使用。
  • Pixi.js:作为渲染器,其渲染性能绝对是非常优秀的,游戏功能方面支持很差,适合极客程序员把玩。
  • Egret:性能不错,在工作流方面支持非常优秀,适应中度和重度HTML5游戏开发,有较多商业项目验证,非常适合商业团队使用。
  • enchant.js:性能偏差,不太推荐
  • craftyJS:文档教程等方面不太完善,很难找到对应技术支持,不推荐
  • Turbulenz:性能极佳,但捆绑其自身业务,不太适合国内市场。
  • cocos2d-js:老牌引擎,其性能在排名中居中,工作流支持相对完整,推荐。
  • PlayCanvas:重度3D游戏开发引擎,本文不对3D做推荐。
  • melonJS:性能不理想,不推荐
  • Quintus:不支持WebGL模式,性能较差,不推荐
  • Hilo:阿里前端团队作品,偏向于前端开发工程师,与游戏专业开发距离较大,推荐做HTML5营销小交互的使用

参考:
1、来自简书:HTML5游戏引擎深度测评
2、2016年文章:HTML5游戏引擎对比分析调研
3、2018年文章:H5游戏引擎的选择
4、2018年文章:10 JavaScript Engines To Develop Your Own Mobile And Web Games
(本文介绍的最后几款我去看了官网,很糟糕,前排的几个和上面调研结论一致)

2、github 项目概览

github 上的项目介绍和相关数据,本身也将问题说的清楚明白,此处以表格形式略作展示。

markdown不兼容-手动截图1.png
markdown不兼容-手动截图2.png

数据统计时间:2020-7-10,在线表格在这里

仔细浏览过一遍 github 项目介绍后,对于哪个引擎能干什么,基本会有一个大致了解。很显然,排名中上游的引擎是在一番优胜劣汰中沉淀下来的优胜者,所以有着比较充分的理由选用它们。

然而,值得说明的是,大家需要结合自己的项目需求,有时强大并不一定适合,中游的未必不可取。强大者入手门槛高,很难在较短时间驾驭,中等体量的反而上手快。

比如在我看来,选择一款引擎,不仅要满足项目需求,对自己而言也意味着一项长期技术投入。在长时间的使用过程中,填坑写插件几乎是不可避免的,你是否愿意投入精力,是否恰好对这个方向感兴趣,决定了你选择的体量。

好了,搜集了那么多信息,也酝酿了一番,这里就进一步收敛下:

Three.js 很强大,但并不是我的项目要用的东西。

工具链上,白鹭 egret 引擎无疑是最完善的,但这不作为最大权重去考虑。一些后来居上的引擎,也可能逐步弥补工具链。

完善的工具链,固然是一大优势,但初期会考虑偏轻,快速启动的项目去体验。

所以,我基本只打算聚焦于 pixiphaser 这 2 套引擎。

3、demo 进一步体验

这些引擎都非常棒,demo 做出的效果足够吸引人。颜值即正义,所以再多看几眼。

1、巴比伦 https://doc.babylonjs.com/examples/

2、turbulenz 也很酷 http://biz.turbulenz.com/samples

3、pixi https://pixijs.io/examples/

4、phaser https://phaser.io/news/category/game

4、主要引擎/库介绍

似乎意犹未尽,似乎犹豫不决。早先对这个方向其实了解不多,所以这里再对这些优秀的引擎/库做下介绍说明。

2D 引擎库

pixi.js

一般来说,WebGL 的渲染速度都会比 Canvas 快,这是由俩者的绘制路径决定的。Pixi 最大的特点在于,Pixi 具有完整的 WebGL 支持,却并不要求开发者掌握 WebGL 的相关知识,并在需要时无缝地回退到 Canvas 。相较于很多同类产品,它的渲染能力是比较强大的。然而,Pixi 也有不足的地方,Pixi 对于动画的支持是比较缺乏的,在实际开发中,常常需要引进额外的动画库,如 GSAP。

Phaser

是一款专门用于HTML5 2D游戏开发的开源框架,提供 JavaScript 和 TypeScript双重支持,内置游戏对象的物理属性,采用 Pixi.js——在渲染方面直接封装了 Pixi渲染引擎(Phaser2 如此,Phaser3 已放弃),以加快Canvas 和 WebGL 渲染;架构方面,Phaser 内嵌了4个物理引擎,提供粒子系统、动画、预下载和设备适配方案;兼容性方面,Phaser 的焦点是放在移动端浏览器上的;API 方面,Phaser 能实现丰富的游戏功能,适合复杂度高的游戏开发。

目前项目最新进展是,Phaser4(Phaser 第4个大版本)正在开发中,并且已经得到 Facebook 支持。

CreateJS

CreateJS 官方提供了 TweenJS 支持动画开发,同时通过 SoundJS 和 PreLoadJS 提供了音频和预下载的支持,对于 H5 游戏基础功能的支持是足够的。在兼容性方面,CreateJS 支持 PC 端和移动端几乎所有的浏览器。此外,CreateJS 还支持用 flash CC 开发导出由 CreateJS 渲染的 H5 游戏。

Cocos2d-x

Cocos2d-x 是业界比较老牌的游戏引擎了,同时支持 C++ ,Lua 和 JavaScript 三种开发语言,官方用例来看更倾向于 C++ 开发,适合做一些中大型游戏开发。Cocos2d-x 提供 Cocos Creator 游戏开发工具,组件化,脚本化,数据驱动,跨平台发布。

3D 引擎库

Three.js

相信对于很多有关注 3D 游戏的开发者来说,Three.js 早已经耳熟能详了。实际上,Three.js 官方定位并不是游戏引擎,而是一个 JS 3D 库。Three.js 更倾向于展示型的视觉呈现,比较少直接拿 Three.js 来开发 H5 游戏。渲染环境上,Three.js 支持 WebGL 和 CSS3D 两种渲染模式。

aotu.io 一篇 Three.js 的教程

PlayCanvas

从渲染支持程度来看,PlayCanvas 不仅支持 3D WebGL渲染,同时保持到 VR 的支持,拥有比较好的拓展性。在工具流的支持上,提供了在线编辑器和发布托管等服务。从官方教程上看,教程也是比较详细的。

5、测评&体验

补充一则关于 pixi, egret, layabox 的测评


Part 2: 一个初步结论

Pixi 和 Phaser 二选一,我倒向 Phaser。不可否认它们都非常优秀,但我是从自己的实际需求触发。以下内容作为结论支撑。

1、希望轻松的开发小游戏

pixi 专注于渲染。我尝试这个 example 时,就遇到了插件库未及时根据版本的问题,最终不得搁置。——也就是说它单纯做渲染引擎,非常优秀(phaser2 内置它作为渲染引擎,phaser3 已脱离 pixi ),但是作为游戏引擎,它还需要用户手动拼装很多第三方插件。这容易让没有多少游戏基础的我们,陷入技术细节。

phaser 可以让我直接入门游戏开发。从完全小白开始,3个小时 2 个 demo 都顺利跑起来(官方示例中由于版本差异及旧代码未同步,有些小坑要补一下,不过问题可忽略),rollup + typescript + phaser3 实现起来非常顺手。

stackoverflow这里 的回答,也支持了我的选择。

2、社区丰富

非常容易的搜索到学习资料。比如:

1、开发者文档 http://book.phaser-china.com
2、官网中文支持 https://www.phaser-china.com
3、phaser API github-phaser3-docs

4、中文教程 http://phaser.io/tutorials
5、facebook 即时游戏 guide http://phaser.io/tutorials
6、模版项目多 phaser3-typescript-project-template

7、比如一个教程 https://www.phaser-china.com/
8、某中文社区 http://club.phaser-china.com
9、江湖大牛 http://blog.xiiigame.com
10、百度贴吧 https://tieba.baidu.com

11、游戏产品1 https://tarutarolegends.com

有关 Phaser 的信息非常容易获取,模版项目紧跟技术节奏。(其他很多框架就没见到开发者去帮他做模版项目的,足见得开发者的热情)

另外 Phaser4 已经在 2019 年底开始开发了,这回是得到了 Facebook 爸爸的支持。

3、丰富功能

市面上的 H5 引擎并不少,但是 Phaser 可以说是 2D 中尤为出色的一个。

Phaser 提供的功能非常全面,比如物理引擎,Phaser3 默认内置4种物理引擎,Arcade,P2,Ninja, Matter.js,各自有各自的适用场景,使用起来也非常方便。

同时,Phaser 还支持瓦片地图、定时器、渐变动画、帧动画、滚动背景、对象池、照相机、粒子系统、图形绘制、位图、像素图、图集、加载管理、多点触摸、音视频等等几乎你能够想到的所有做游戏需要的基础功能,是目前市面上 2D 的 H5 游戏引擎中功能最丰富的一个。

4、超强定制能力

Phaser 的定制能力到底有多强,可以从两方面来讲。

第一,Phaser 的插件机制。Phaser 可以允许开发者通过插件来引入其他强大的能力,比如通过插件你可以引入box2d物理引擎,引入spine骨骼动画,引入列表控件等等。Phaser 的插件机制为 Phaser 提供了无限可能性,强大的插件功能使得Phaser 几乎无所不能。

第二,Phaser 的模块化编译。由于 Phaser 是源码开放的,我们可以从官方 github上获取其源码进行编译,从而编译出我们自己的 Phaser。同时,官方的源码写得非常漂亮,在设计之初就考虑到了模块化编译,比如你不需要 p2 引擎,那么你就可以编译一个 phaser-arcade-physics 版本,甚至你不需要物理引擎,那么你可以编译一个 minimum 版本。只需要在编译的时候添加一个参数就好,十分方便。

5、移动端及 I/O 支持

多端支持在 Phaser2 就开始了,Phaser3 则做的更好更全面。

6、周边相关工具

1、青瓷引擎,基于 Phaser 引擎

2、白鹭对几个主要引擎提供的龙骨动画插件 DragonBones

3、Unity https://zhuanlan.zhihu.com

没有最棒,只有更适合。读者也可以按照自己的思路,选择一款最适合自己口味的渲染引擎。

整理信息不易,转载请著名作者和文章链接。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269