初探Egret3D——白鹭引擎架构师王泽演讲实录

10月19日,白鹭开发者沙龙武汉站在武汉将来梦境空间举办。白鹭引擎首席架构师王泽在现场以《初探Egret3D》为题为到场的开发者介绍了Egret3D引擎,咱们整理了现场速记分享给你们,详见下文:浏览器

王泽:各位开发者下午好,今天我为你们分享的题目是《初探Egret 3D》。这是咱们白鹭引擎第一次在开发者沙龙中用一个完整的演讲主题中介绍 Egret3D。首先咱们经过这张总体架构图来看,Egret3D 包含了四大部分,分别是运行时,编辑器,Unity3D导出插件以及文档中心。接下来的演讲中我会针对这四项内容给各位开发者作一个完整的介绍。微信

图片描述

第一部分是运行时。他指的是游戏在运行时所依赖的JavaScript 逻辑代码,也就是开发者开发的游戏最终运行依赖于底层白鹭引擎的 Library。这部份内容是彻底开源的,每一位开发者均可以经过 GitHub 或者白鹭引擎的工具来下载,咱们会以每个月更新一次的节奏对运行时逻辑进行更新。目前版本号是1.2。架构

第二部分是编辑器。白鹭引擎的3D编辑器目前正在处于内测阶段,咱们免费提供给二十个使用Egret3D的研发团队进行试用,目标是在 2018年12月份向全部开发者开放。目前加入咱们的内测计划也很是的简单,只须要将您的项目信息和公司信息发送给 wangze@egret.com,咱们就会在和您确认后尽快将编辑器提供给您,并在咱们力所能及的范围内为您提供尽量完备的技术支持。框架

第三部分是Unity导出插件。目前白鹭引擎的3D编辑器主要用于编辑基于实体组件系统模式的组件数据以及场景信息,在3D资源编辑方面,好比3D粒子编辑、3D动画编辑目前还没有实现,因此咱们采用了 Unity3D资源导出的方式来为游戏制做这部份内容。若是开发者已经开发了一款基于Unity3D引擎的游戏,能够直接把它的资源置换白鹭引擎的格式。这部分咱们目前计划在11月份将其开源。编辑器

第四部分是文档中心。咱们认为文档是引擎中很是重要的一部分。自从Egret3D 发布后,咱们一直在不断提高咱们的文档数量和质量。在九月份,咱们文档中心有29篇Egret3D文档,平均每篇文章590字,在10月初,文章数量提高到了36篇,平均字数提高到了900字。咱们的目标在每个版本都把文档数量以及每篇文档的平均字数字都尽量的提升,一遍尽量的解决开发者在平常开发时所遇到的问题。工具

对这四方面进行了简单介绍后,接下来我将对运行时和编辑器这两部分进行更详细的介绍。性能

白鹭引擎的运行时包含了三大部分组成,第一部分是白鹭引擎的实体组件系统,他是Egret3D的总体框架;第二部分是3D渲染部分,第三个是白鹭引擎的3D和2D的适配器。学习

图片描述

运行时库的第一部分是实习组件系统架构。Egret3D中包含了两个命名空间,分别是 paper和egret3d。为何有这样区别呢?开发者能够这样简单理解,全部与实体组件系统架构相关的API,咱们放在paper命名空间内,由于这些内容是与3D渲染无关的,这样在将来,咱们会把与Egret2D相关的内容也集成到这个实体组件系统的架构中。白鹭引擎2D、3D做为总体来支持。优化

实体组件系统架构中的实体指的是游戏对象GameObject,每个实体其实只是一个空壳,数据在GameObject挂载的Component中,原则上组件只包含数据,不包含行为。真正的行为由System来决定,也就是说在游戏引擎底层运行的时候,由各个不一样的System驱动整个引擎的运行。每个System,好比渲染、物理、动画,都去寻找不一样的组件,并经过组件分别完成属于本身的逻辑。动画

在开发者比较熟悉的Unity3D中,和这套架构有些区别的是,Unity3D的Behaviour至关于Component,可是是能够包含逻辑的Component,为了Unity3D开发者开发方便,咱们也支持这种模式,容许在Component中添加行为,您能够继续按照Unity那样的方式作你的一款3D游戏。

图片描述

运行时库的第二部分是3D渲染。Egret3D目前采用 WebGL1.0的接口,并以 Extension的方式添加部分 WebGL2.0特性。之因此这样是由于WebGL2.0目前的设备覆盖率仍是比较低的,而WebGL1.0的设备覆盖率已经超过了90%。目前只有iOS8.0、Android5.0以前的设备是不支持WebGL1.0的,而这些设备的总体市场份额已经几乎能够忽略。

图片描述

在一款3D游戏中,须要大量的模型资源与配置资源,Egret3D使用 GLTF 这一标准格式。这种格式有个很是好的优势是,它是为OpenGL/WebGL接口而设计的格式,所以底层的解析效率会很是高。我举一个实际的例子,Egret3D在去年发布了内测版本,他的具体模型解析流程是这样的:第一步须要加载一个模型文件,而后将模型文件进行解析,而后生成WebGL所须要的数据格式,最后提交到GPU中,这样才是一个完整的过程。接下来咱们看看今年发布的 Egret3D正式版的架构。咱们如今添加的模型文件是一个 GLTF格式文件,这种格式在加载后无需进行解析和生成,只须要对其进行一个很是简单的切割,就能够将它的数据直接上传到GPU 中。你们会发现,解析模型和生成WebGL数据这两个很是耗时的操做被直接绕过去了。实现了从浏览器加载到提交数据之间的无缝对接,经过这种设计,Egret3D与去年的内测版相比,模型解析速度提高了170%,内存下降了一倍,用户能够感知到的加载速度也提高了30%。

图片描述

在3D渲染中下一个值得一提的话题是如何将 3D部分与2D进行集成。白鹭引擎目前支持在3D的架构中随意添加2D内容,若是想在2D内容中添加3D内容则会稍微复杂一些,您须要先建立3D内容,再把现有的2D内容添加进去。这个问题涉及到游戏引擎的开发思路。白鹭引擎在5年前刚发布的时候是一款2D引擎。若是想在2D引擎中添加3D特性,第一种作法是作一款与2D没有关联的3D引擎,而后将2D部分放在3D之中,这也是白鹭引擎如今的作法。

除此以外还有第二种作法,就是在一款2D引擎的基础上进行不断扩展,不断在其中堆叠新的3D功能,最终实现一款3D引擎。这种作法的优点在于2D游戏能够相对简单的添加一些简单的3D内容,可是想经过这样的方式最终实现一款3D引擎则是比较复杂的。所以咱们没有采用这样的方法,而是用第一种作法开发了全新的Egret3D。客观来说,这样作的缺点,这是对开发者而言最开始学习的入门门槛稍微高一点,可是从长远来看这个是值得的。

刚才的演讲中,我已经介绍了Egret3D运行的实体组件系统架构,GLTF文件格式,3D渲染流程,以及与 Egret2D的集成方式。如今咱们进入Egret3D 编辑器的环节,我相信这也是开发者们很是关心的。

图片描述

咱们认为3D编辑器是3D游戏开发中不可或缺的一个环节。也许2D游戏能够不须要编辑器,可是3D游戏没有编辑器几乎是步履维艰。假设咱们如今须要渲染一张图片,可是目前屏幕是黑屏的没有渲染出来,在2D中,致使出现这个问题的缘由很简单,对象未加载到舞台、对象的透明度设置为0,对象的坐标在屏幕外,对象的纹理没有加载,基本只有这几种可能。可是在3D中,除了上述这些以外,还有不少状况。首先,坐标系不仅是x,y两方向,还引入了z方向。还有多是摄像机的的位置不对,摄像机的朝向不对,图片的材质不对,灯光设置不对等诸多状况。在这么复杂的状况下若是没有编辑器进行编辑是很是困难的。为了解决这个问题,白鹭引擎的解决方案是为开发者提供一款3D编辑器。在游戏开发过程当中,编辑器的时候直接能够看到你游戏中全部的对象,好比说人物,摄像机,灯光,这些东西他们在哪里,,这样就会很是直观的看到游戏对象没有正确渲染的本质缘由是什么。

除了编辑器以外,咱们还提供了一款开源的名为 Egret3D Inspector的工具用于提高开发者的开发效率。这个工具是Egret3D编辑器的核心构成,能够在游戏运行时直接显示游戏每个对象的属性,并在预览模式下对其数值进行调整。经过这种方式,哪怕您没有Egret3D编辑器,也能够经过这款工具提高游戏的开发效率。

那接下来看的,若是有编辑器你是如何开发一款3D游戏的?有两种方式,第一种是没有编辑器的状况,您能够在Unity3D里面编辑,把全部场景,资源,Prefab等内容所有处理好,经过白鹭引擎的Unity3D导出插件,把这些内容发布到 Egret3D中,而后在浏览器直接看到效果,最后直接发布到微信小游戏,或者将来的更多平台上。

图片描述

除此以外,若是您如今已经有了Egret3D编辑器,能够在Unity3D中的资源导出后,在 Egret3D编辑器中进行二次编辑。咱们开发团队的工做流是,在Unity3D中负责制做素材,而后在 Egret3D 编辑器中负责编辑场景、添加组件和调整组件数值预览。

图片描述

而后具体实际案例能够看看白鹭Egret3D的案例,《泡泡学园OL》,这款游戏的开发手段就是我刚才说的那样,使用 Unity3D 制做模型,而后在Egret3D 编辑器中进行二次编辑,主要是挂载组件,以及调整数值和场景。这个游戏咱们已经发布了小游戏版本,其中一些性能指标基本是目前Egret3D能发布到微信小游戏的极限,其中 Vertex数据能够更高一些,因为这款游戏包含了比较复杂的使用CPU计算的碰撞引擎和行为树AI,因此咱们牺牲了部分Vertex来换取更高的性能。开发者若是作的游戏不须要这些高级功能,Vertex能够提高到200,000以上。

图片描述

刚才跟你们介绍是Egret3D的整个发展状况,咱们回顾一下咱们今年的总体版本发布计划。咱们在今年5月份的时候第一次发布了白鹭引擎3D的正式版本,而后接下来发布了0.9版本,支持微信小游戏版本,1.0版本是系统优化,在1.1版本的时候,3D引擎编辑器提供了内测,在10月8号的时候,过了十一以后发了1.2版本,目前最高的版本,咱们发布了Egret Inspector 3D提高开发效率,并扩大了3D的编辑器的内测方位。会在2018年11月份发布1.3版本,咱们会进一步扩大编辑器的内测范围,并对底层性能和效果,特别是灯光方面进行进一步的完善。

除了 Egret3D以外,今天我也首次向开发者介绍一下Egret 2D 部分在2018年第四季度的路线图。2018年第四季度咱们的目标是发布白鹭引擎 5.4 正式版本,在这个版本里面咱们重点优化这几个方面。

图片描述

第一是将大幅度提高编译速度,预期是把开发者在编译上的时间变成原来的1/5,假设开发者天天工做10小时,其中1个小时的时间是用在编译上,但愿把这个时间将来能从1小时变成12分钟,这样理论上你们早下班一个小时。

第二个就是引擎瘦身。白鹭引擎的核心库里面去掉一些老旧API的支持,白鹭引擎目前能够运行在 IE9等老式浏览器内核上,这部分的支持咱们将来不会做为引擎核心,而是做为一个第三方库提供给开发者,这样若是开发者无需对这种设备提供支持的话,就能够下降引擎体积,咱们的目标是下降50K左右。

第三就是2D的工做流工具更新,咱们会在 2018年末将白鹭引擎的 2D工做流进行一个较大的升级,在用户体验基本不变的状况下,进行架构升级,解决一些长久以来的遗留问题。这一部分咱们已经进行了接近一年时间,2018年Q4是会中释放给开发者。

最后一条,我认为很是重要,支持白鹭引擎发布到更多的平台,今天白鹭引擎能够发布到H5,IOS,安卓,还有微信小游戏、QQ玩一玩等等不少的平台,2018的Q4版本咱们将支持发布到更多的平台上,敬请期待。

相关文章
相关标签/搜索