当前位置: 首页 > Web前端 > HTML5

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

时间:2023-04-05 14:32:43 HTML5

10月19日,白鹭开发者沙龙武汉站在武汉未来梦想空间举办。EgretEngine首席架构师王泽向在场的开发者介绍了名为《初探Egret3D》的Egret3D引擎。大家分享的话题是《初探Egret 3D》。这是EgretEngine首次在开发者沙龙以完整的演讲题目介绍Egret3D。首先,从这张整体架构图我们可以看出,Egret3D由四大部分组成,分别是运行时、编辑器、Unity3D导出插件和文档中心。在接下来的演讲中,我将为大家全面介绍这四项内容。第一部分是运行时。他指的是游戏在运行时所依赖的JavaScript逻辑代码,即开发者开发的游戏最终运行依赖于底层Egret引擎的库。这部分内容是完全开源的,每个开发者都可以通过GitHub或者EgretEngine工具下载,我们会每月更新运行时逻辑。当前版本号为1.2。第二部分是编辑器。EgretEngine的3D编辑器目前处于内测阶段。我们提供给20个使用Egret3D的研发团队免费试用。目标是在2018年12月对所有开发者开放。目前加入我们的内测计划也很简单,只需要将你的项目信息和公司信息发送到wangze@egret.com,我们会为你提供编辑器与您确认后尽快,并尽最大努力为您提供最完善的技术支持。第三部分是Unity导出插件。目前EgretEngine的3D编辑器主要用于基于实体组件系统模式编辑组件数据和场景信息。在3D资源编辑方面,比如3D粒子编辑,3D动画编辑,目前还没有实现,所以我们采用了Unity3D资源导出的方式。使这成为游戏的一部分。如果开发者已经开发了基于Unity3D引擎的游戏,可以直接将其资源替换为Egret引擎格式。我们目前计划在11月开源这部分。第四部分是文档中心。我们认为文档是引擎的一个非常重要的部分。自Egret3D发布以来,我们一直在不断提高文档的数量和质量。9月,我们文档中心Egret3D文档29篇,平均每篇590字。10月初,文章数增加到36篇,平均字数增加到900字。我们的目标是在每个版本中尽可能的增加文档数量和每个文档的平均字数,尽可能解决开发者在日常开发中遇到的问题。在简单介绍了这四个方面之后,我将更详细地介绍runtime和editor这两个部分。EgretEngine的运行时由三部分组成。第一部分是EgretEngine的实体组件体系,是Egret3D的整体框架;第二部分是3D渲染部分,第三部分是EgretEngine的3D和2D适配器。运行时库的第一部分是实践组件系统架构。Egret3D包含两个命名空间,分别是paper和egret3d。为什么会有这样的差异?开发者可以很容易理解,所有与实体组件系统架构相关的API都放在了paper命名空间中,因为这些内容与3D渲染无关,所以以后我们也会将Egret2D相关的内容整合到架构中这个实体组件系统。整体支持EgretEngine2D和3D。实体组件体系架构中的实体指的是游戏对象GameObject。每个实体实际上只是一个空壳,数据在GameObject挂载的Component中。原则上,组件只包含数据,不包含行为。真正的行为是由System决定的,也就是说,当游戏引擎底层运行时,整个引擎的运行是由不同的System驱动的。渲染、物理、动画等各个System都在寻找不同的组件,通过组件完成自己的逻辑。在开发者熟悉的Unity3D中,与这种架构不同的是,Unity3D的Behavior相当于Component,只不过是一个可以包含逻辑的Component。为了方便Unity3D开发者,我们也支持这种模式,让你可以继续按照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集成。EgretEngine目前支持在3D架构中随意添加2D内容。如果要将3D内容添加到2D内容中,会稍微复杂一些。您需要先创建3D内容,然后再添加现有的2D内容。本题涉及到游戏引擎的开发思路。Egret引擎在5年前首次发布时是一个2D引擎。如果要给2D引擎添加3D特性,第一种方式是做一个与2D无关的3D引擎,然后把2D的部分放到3D中,这就是现在EgretEngine所做的。另外还有第二种方法,就是在一个2D引擎的基础上不断扩展,不断往里面叠加新的3D功能,最终实现一个3D引擎。这种做法的好处是2D游戏可以比较简单的加入一些简单的3D内容,但是这样最终实现一个3D引擎就比较复杂了。所以我们没有采用这样的方法,而是用第一种方法开发了一个全新的Egret3D。客观地说,这样做的缺点是一开始对开发者的入门门槛略高,但从长远来看是值得的。在刚才的演讲中,我已经介绍了Egret3D的实体组件体系架构,GLTF文件格式,3D渲染过程,以及与Egret2D的集成方式。现在我们进入Egret3D编辑器的链接,相信这是开发者非常关心的。我们认为3D编辑器是3D游戏开发中不可或缺的环节。也许2D游戏不需要编辑器,但是3D游戏没有编辑器几乎是做不出来的。假设我们现在需要渲染一张图片,但是当前屏幕是黑色的,还没有渲染。在2D中,这个问题的原因很简单。对象未加载到舞台上,对象的透明度设置为0,对象的坐标在屏幕上。另外,没有加载物体的贴图,基本上就只有这几种可能了。但是在3D中,除了以上,还有很多情况。首先,坐标系不仅是x和y方向,还有z方向。也有可能是摄像头位置不对,摄像头方向不对,图片材质不对,灯光设置不对等等很多情况。在如此复杂的情况下,没有编辑器很难编辑。为了解决这个问题,EgretEngine的解决方案是为开发者提供一个3D编辑器。在游戏开发过程中,小编可以直接看到你游戏中所有的物体,比如角色,摄像机,灯光,这些东西在哪里,这样可以很直观的看出游戏物体没有正确渲染是什么根本原因。除了编辑器,我们还提供了一个名为Egret3DInspector的开源工具来提高开发者的开发效率。该工具是Egret3D编辑器的核心组件。可以在游戏运行时直接显示游戏中各个对象的属性,并在预览模式下调整其值。这样,即使你没有Egret3D编辑器,也可以使用这个工具来提高游戏开发效率。那我们接下来看看,有编辑器怎么开发3D游戏呢?有两种方式,第一种是在没有编辑器的情况下,可以在Unity3D中进行编辑,处理所有的场景、资源、Prefab等内容,通过白鹭引擎的Unity3D导出插件将这些内容发布到Egret3D中,以及然后直接在浏览器中看到效果,最后直接发布到微信小游戏,或者以后更多的平台。另外,如果您已经有Egret3D编辑器,您可以在Unity3D中的资源导出后,在Egret3D编辑器中进行二次编辑。我们开发团队的工作流程是在Unity3D中创建材质,然后在Egret3D编辑器中编辑场景、添加组件和调整组件值预览。然后可以看看EgretEgret3D的实战案例,《泡泡学园OL》,这款游戏的开发方式就是刚才说的,使用Unity3D制作模型,然后在Egret3D编辑器中进行二次编辑,主要是挂载组件,并调整数值和场景。我们已经发布了该游戏的小游戏版本。其中一些性能指标基本是Egret3D发布到微信小游戏的极限。Vertex数据可以更高,因为该游戏包含使用CPU计算的更复杂的碰撞引擎。而行为树AI,所以我们牺牲了一部分Vertex来换取更高的性能。如果开发者的游戏不需要这些高级功能,Vertex可以增加到20万以上。刚才给大家介绍了Egret3D的整个发展历程,我们来回顾一下我们今年的整体版本发布计划。我们在今年5月首次发布了白鹭引擎3D正式版,随后发布了0.9版本,支持微信小游戏版本。1.0版本为系统优化。在1.1版本中,3D引擎编辑器于10月8日开启内测,11日之后推出1.2版本。目前最高版本,我们发布了EgretInspector3D,以提高开发效率,拓展3D编辑器的内测方向。1.3版本将于2018年11月发布,我们将进一步扩大小编的内测范围,进一步完善底层性能和效果,尤其是光照。除了Egret3D,今天我也第一次向开发者介绍了2018年第四季度Egret2D部分的路线图。2018年第四季度,我们的目标是发布EgretEngine5.4正式版。在这个版本中,我们重点优化了这些方面。首先是编译速度会大大提高。预计开发者在编译上的时间将减少到原来的1/5。假设开发者每天工作10小时,其中1小时用于编译。希望以后可以把这个时间从1小时改成12分钟,这样理论上大家提前一个小时下班。二是发动机轻量化。EgretEngine的核心库中移除了一些旧的API支持。EgretEngine目前可以运行在IE9等老浏览器的内核上。我们以后不会将这部分支持作为引擎核心,而是作为第三方库提供给开发者,或者,如果开发者不需要支持这个设备,可以减小引擎的大小。我们的目标是减少大约50K。三是二维工作流工具的更新。我们将在2018年底升级EgretEngine的2D工作流程,在用户体验基本不变的情况下,我们会升级架构,解决一些长期存在的问题。.这部分我们已经做了将近一年的时间,将在2018年第四季度发布给开发者。最后一个,我觉得很重要,支持EgretEngine发布到更多的平台。今日白鹭引擎可发布至H5、IOS、Android,以及微信小游戏、QQ玩等,2018年Q4版本将支持发布至更多平台,敬请期待。