Oasis 周年回顾和未来规划

本文重点:Oasis Engine(下文简称 Oasis)是蚂蚁集团 RichLab 互动科技团队自研的一款移动优先、web 优先的互动引擎。本次分享中,Oasis 首席架构师尘沫将为大家带来 Oasis 过去一年的总结、 2022 年的规划以及 Oasis 编辑器的开放计划,欢迎享用。
蚂蚁校招开始啦,23 届同学快到碗里来~

大家好,我是 Oasis 引擎架构师-尘沫,今天我和大家分享的是《Oasis 周年回顾和未来规划》。

今天我分享的内容一共分为三部分,首先是开源一周年回顾,然后是 Roadmap2022,最后我会和大家分享 Oasis 编辑器开放计划。

我们做了什么

过去一年我们一共做了四个里程碑,从 0.3 到 0.6。如果有同学是从去年开源发布会就开始关注我们,那么这一年一定可以感受到我们的进步。这四个里程碑一共包含了引擎提升官网改版文档提升丰富案例开源建设

技术大图

我们先来看一下引擎的技术大图,这张图中的功能一共有三种状态。其中深绿色和浅绿色表示现在已经有的功能,区别为浅绿色是我们 2021 年重点重新设计和新增的部分,空心的图标表示我们已经在规划,但目前还未实现的功能。这里重点强调一下 2021 年我们的关注功能。首先是节点和组件部分。节点组件部分我们重新设计和新增了动画网格物理、  Sprite 、 SpriteMask、  Spine 和 Lottie 等。

渲染的环境部分我们新增了背景环境光, 材质部分我们重新设计了 PBRUnlit 还有 BlinnPhong。资产部分我们重构了行业的标准 glTF, 还新增了私有资产网格材质纹理和 SpriteAtlas。Input 交互方面我们新增了 Pointer 交互。

Mesh

我们对整个 Mesh 系统进行了重新设计和精简。首先我们移除了原有的 GeometryRenderer,只保留了 MeshRenderer。MeshRenderer 数据源调整为两种,分别是 BufferMesh 和 ModelMesh。BufferMesh 主要面向 GPU,数据以 Buffer 为概念,以功能强大、灵活和高性能设计为目标。ModelMesh 是面向模型,数据以顶点为概念,对接的行业的模型标准,以功能易用简洁为设计目标。

ModelMesh 的使用案例就是 glTF,glTF 经过解析后就变成了 ModelMesh。BufferMesh 的典型的案例就是我们的 Spine 生态,利用 BufferMesh 重新设计后,性能得到了大幅提升。如果开发者对 GPU 原理比较熟悉,可以使用 BufferMesh 实现高性能的几何体数据操控。另外还有一些常用的基本网格,比如 Cube、 Sphere 和 Plane 等。我们提供了静态的 PrimitiveMesh 工厂方法,可以通过一个静态方法直接创建这些基本网格,返回类型同样也是 ModelMesh。我们移除了 SphereMesh 和 PlaneMesh 这些独立类的存在。对于开发者来说,多一个类就多一个概念,多一个概念就多一个学习成本。在引擎设计中我们一直追求适度抽象,甚至做减法。

Material

我们对材质进行了重新梳理和优化,具体包含 UnlitMaterial、 BlinnPhongMaterial、PBRMaterial 和 PBRSpecularMaterial。我们做了三个统一降低开发者的使用成本,首先统一各渲染器的材质接口,我们把对各渲染器设置材质的功能放到了渲染器的父类。所以无论是 MeshRenderer 还是 ParticleRenderer 它的材质相关的接口功能都保持一致。第二我们将材质的渲染状态进行了统一,比如是否透明和混合模式。最后是基本功能属性的统一,我们将四种材质的基本功能属性统一为 baseColor、baseTexture 还有 tilingOffset。因为无论任何材质都有主纹理和主颜色的概念,在 BlinnPhong 含义是 diffuse,在 PBR 含义是 albedo。通过材质相关 API 的统一和梳理,从开发者学习和使用的角度提升了易用性。

我们还对材质相关的功能进行了强化。渲染器新增了多材质能力和实例材质功能。多材质能力主要用于支持典型的 submesh 功能,一个网格可以对应多个材质。实例材质的功能主要用于避免通过脚本修改共享材质,导致多个模型受影响 。通过修改 instanceMaterial 接口可以让材质效果保持独立。 另外我们还对 PBR 的 API 和渲染流做了调整和优化。

接下来看一下刚才说到的 PBR 渲染流,其实 PBR 它不光是本身的材质算法,还包含了环境光,甚至线性渲染空间。我们首先对场景的环境光进行了增强。原来我们的环境光漫反射只有纯色模式,现在我们增加了球谐模式。球谐模式相对于纯色色彩更细腻,我们使用了三阶球谐。我们的镜面反射部分使用预烘培的纹理。我们将不同粗糙度的反射数据烘焙到了立方体纹理的不同的 mipmap。

其实无论是漫反射球谐还是反射纹理都需要一定的预计算,这种是一种在效果和性能是比较可观的方式,在没有开放编辑器前我们提供了独立的在线烘焙工具。开发者只需要把 HDR 环境贴图拖拽到这个在线烘焙工具,就会生成一个环境光的二进制文件。生成后直接加载环境光文件即可。未来我们开放编辑器之后会更易用,整个流程几乎是无感的。

然后是线性空间的改进,使用线性空间无论从光的衰减和亮度曲线的增长都更自然。经过一系列优化和调整后 PBR 的渲染流在效果和性能上都得到了一定程度的提升。

glTF

glTF 标准一直作为 Oasis 的一个标准模型格式。glTF 是一个行业标准,过去我们一直采用其作为运行时格式。我们也设计自己的私有资产格式,因为无论从扩展性还是文件尺寸极致的小,还有加载速度解析极致的快,都需要私有资产。但是 glTF 作为一个行业标准,相对来说比较好用并具备一定标准性价值,我们对 glTF 的支持会长期保留。即使使用私有资产也会适用 glTF 作为美术桥接。

我们对 glTF 的解析管线进行了重构,采用了管道式的解析,并且支持自定义扩展。中间是我们目前官方支持 glTF 插件列表。如果开发者觉得这些插件功能还不够,甚至有一些没有实现,可以参照我们的官方文档实现自定义的 glTF 扩展。同样在编辑器没有开放的阶段,我们在官网提供了一个小而美的 glTF 查看器,开发者只要把 glTF 模型拖拽到查看器就可以预览在 Oasis 中的渲染效果 。整体 glTF 的稳定性在去年重构后得到了大幅提升,功能和扩展性也得到了一定提升。

Animation

动画其实对于引擎来说非常重要,属于几大核心系统之一。我们去年对动画系统进行了大幅的重新设计和功能新增。首先我们新增了动画过渡,动画过渡是两个动作进行切换时更自然,如果没有动画过渡的话,动画切换是闪切的效果,相对来说比较生硬。

接下来是动画混合,动画混合可以完成动画的组合模式,例如 FPS 游戏中常见的上下半身分离,如上半身开抢,下半身可以跑步也可以蹲下,这时就可以使用动画混合完成。

动画事件我们也进行了调整。原来我们的动画事件和我们的脚本系统是割裂的。现在动画事件和脚本系统 Script 进行了深度集成。 Oasis 在架构设计上给开发者的传达是清晰且有条理的,无论是动画逻辑还是更新逻辑,都是使用脚本。

除了 Animator 进行了重新设计,我们还做了 BlendShape(Morph Target) 动画。BlendShape 动画的原理是直接对模型顶点进行插值和修改。和蒙皮动画比相对更暴力一些,但 BlendShape 动画具备一些独有的优势,比如一些精细动画的表达,如面部表情动画等。

BlendShape 也可以通过 Animator 进行驱动,Animator 更像一个导演,它可以驱动任何元素,还有材质和骨骼等也可以使用 Animator 进行驱动。蒙皮动画就是通过 Animator 驱动骨骼实现的。Animator 在重新设计之后整个引擎的动画性能提升了 30%。动画系统在易用性、性能、功能三个方面都有一定提升。

物理系统

新增了物理功能,针对目前 Web 上可用的物理引擎均存在一定不足的现状,我们做了多后端物理系统设计。比如 PhysX 虽然功能最强大,但是 PhysX 的 wasm 运行库的尺寸却比较大,会导致加载时间较长。Bullet 的 wasm 运行库的尺寸尚可,但功能会弱一些。所以我们做了多后端的物理系统架构,实现了 physics-PhysX 和轻量的 physics-lite 两套双后端,开发者可以任意切换后端的物理引擎,在前端调用的一些接口保持不变。

在物理功能组件方面,我们提供两种 Collider,一种是静态的 StaticCollider,一种是动态的 DynamicCollider。物理事件也是在脚本中深度集成。和前文提到的动画事件逻辑心智保持一致,物理逻辑也使用脚本 Script 编写。目前物理系统只实现了触发器模式,不包含物理反馈。今年会新增非触发器模式,开发者可简单快速的完成一些带有物理反馈的趣味性互动。

场景

我们对场景也进行了功能新增,主要是 Background 和 AmbientLight。Background 目前提供了三种模式,分别是颜色模式、纹理模式和天空模式。颜色模式为纯色效果,纹理模式使用一张纹理作为背景,在一些互动营销或模型展示的场景较为常用,开发者可以设置纹理不同的拉伸模式。最后是天空,天空开放了 mesh 和 material 两个属性,灵活性很高,开发者可自定义天空渲染,如大气散射算法自定义 shader 等。

最后是 AmbientLight。AmbientLight 是之前提到的 PBR 渲染流的一部分,我们增加了漫反射球谐模式和立方体镜面反射纹理,上文已经介绍过,这里不再赘述。

2D

Oasis 的目标是 2D/3D 一体化的互动引擎,我们会持续建设 2D 能力。我们重新设计了 SpriteRenderer 和 Sprite,新增了 SpriteMask。新增的 SpriteMask 包含了内遮罩和外遮罩。Sprite 持了自定义着色器,新增了 flip 翻转等小功能。我们还重构了 Sprite 的底层的渲染管线,重构后性能提升了 2.1 倍。还新增了 SpriteAlas 资产, SpriteAtlas 是一种行业常规的 2D 优化手段,可减少精灵的 DC。

2D 生态

Oasis 始终对行业的一些生态保持开放性。我们重新设计了 SpineAnimation,还新增了 LottieAnimation。SpineAnimation 是之前介绍的 BufferMesh 接入的,几乎所有 GPU 的功能都可以在 BufferMesh 中灵活的使用,且没有一些过度封装,性能可以做到非常的极致。SpineAnimation 重新设计之后性能提升了 2.1 倍,功能也有一定增强,支持了全套皮肤换装、单附件换装,还有混搭换装。我们还新增了 LottieAnimation,LottieAnimation 的接入使用了引擎的 Sprite 能力。

Input

新增了 Input 系统,早期的 Input 交互,框架层一般会区分 mouse 和 touch。我们采用了现代化的设计统一了鼠标和触控,抽象了 Pointer 指针的概念。无论是鼠标还是触控点都抽象为一个指针点。交互逻辑的编辑我们在 Script 中提供了 onPointEnter/onPointDown/onPointUp 等事件。对于点击区域的描述,我们使用物理组件与其协作,如果想实现点击一个盒子变成绿色的功能,只需要添加一个 Box 形状的物理组件,然后在脚本的 onPointDown 中编写将材修改为成绿色的代码就可以了。

官网

介绍完了引擎功能,我们介绍一下官网的改进,官网支持中英文双语,包括文档和案例,Oasis 引擎是面向行业内全球开发者的,我们希望能在全球将 Web3D 技术普惠行业,降低前端开发者开发互动的门槛。样式上无论是官网主页还是教程文档均采用了全新的设计。案例新增了 67 个,今年还会增加一些展示案例和 demo 教学案例,让开发者能快速上手 Oasis。

文档和案例

API 文档和教程文档也做了大量的改良和补充,欢迎大家学习。稍微提一下,文章中的小黄鸭不是一张静态图片,而是一个实时互动的程序,甚至还可以实时修改代码看效果,这也是 web3D 引擎的一个小优势。

开源建设

Oasis 是认真做开源的一个团队,做开源并不是仅仅把代码丢到了 Github 上而已,我们所有的开发和开发管理都在 Github 进行。我们做了两个透明,首选是开发管理透明化,从每年的 Roadmap 规划到具体的里程碑开发。我们会把一些重点功能列为 Project 纵向长期追踪,然后根据阶段性成果进行横向切割,也就形成了我们的 Milestone,Milestone 的开发进度我们使用 Wiki 进行公开管理。

第二个是引擎设计透明化,除了源代码,引擎设计文档也都对外公开。另外今年我们还新增了 Sponser 渠道,所获的捐助将全部用于引擎的开源建设。我们希望可以通健康的开源技术管理和建设吸引行业的优秀开发者一起参与到 Oasis 的开源建设中,做开源,我们是认真的。

Roadmap 2022

在阐述 2022 年的具体规划前我们先重申一下 Oasis 的设计理念:

  • 首先是移动为先,Web 为先,赋能前端业务新形态,设备终端侧开始逐渐多样化,包括手机、VR/AR 眼镜,还有智能车机等,用户侧对体验感、趣味性甚至是温度感的需求逐渐提升,前端是我们的业务主力军,前端需要一套可以支持 UI、3D、XR 等技术的一体化开发的创作平台和业务需求协同发展。
  • 引擎追求功能、性能和易用性的平衡,作为一体化的互动创作平台引擎侧过度倾斜某一侧都会为另外两侧带来负面影响,Oasis 在引擎侧的设计更追求综合体验极致。
  • 编辑器追求极简的工作流和人机交互,端+云服务一体化,与引擎侧不同,编辑器更关注工作流和人机交互,希望通过极简和人性化的工作流帮助业务开发团队提升开发和协作效率,同时我们会利用端+云服务组合的方式为开发团队带来极致的体验。
  • 功能可灵活拆解、组合,引擎可独立使用, 无论是组件系统架构还是引擎的分包机制都验证了这条理念,Oasis 做互动创作平台以功能可灵活拆解、组合的方式实现架构轻量化,而不是只做单一维度的功能轻量化。
  • 打造功能闭环的创作平台,保持拥抱行业生态,Oasis 致力于打造一站式服务的创作平台,互动开发的刚需功能可形成自闭环,同时保持拥抱行业生态打通行业工作流上下游。

接下来我们看一下 2022 年的重点主题,主要有 7 个重点,分别是:

  • 继续建设引擎 2D 能力(文字、GUI 等),打造 2D/3D 一体化引擎。
  • 完善物理功能、维开发者提供丰富的物理效果。
  • 提升引擎渲染能能力(PBR 材质、光、影、烘培等),带来更好的渲染图效果。
  • 完善动画并开发关注特效功能,为设计师提供动效创作能力。
  • 增加批处理合并管线,提升性能。
  • 探索 XR 等技术,布局未来业务形态。
  • 编辑器对外开放。

我们首先看一下物理部分的重点:

  • 物理碰撞器增加带物理反馈的非触发器模式,可快速实现带有物理反馈的互动需求。
  • 增加物理关节,例如铰链、弹性关节、固定关节等。
  • 增加角色碰撞器,可快速模拟角色的物理特性。

渲染我们分为三部分,分别是 PBR、Light 和 Shadow:

  • PBR 会增加质量分级对应不同的复杂度的 PBR 算法,开发者可在效果和性能之间做倾向调整。还会增加 Clear coat, Sheen 等功能。
  • Light 部分,我们会重新设计光照类的 API 和重写光源管理。例如使用 forward+,forward+ 可在移动端支持大量的点光和聚光。还会支持 Lightingmap 以及局部反射探针烘焙。
  • 阴影部分我们会重写阴影渲染,例如 CSSM,CSSM 是稳定性分割阴影,可以解决大型场景的阴影渲染。

动效部分的改建包含 BlendAnimation、Animator 和 Effect:

  • BlendAnimation 会提高混合数量的上限,现在的 BlendAnimation 最多只支持四个动画。帧数上会支持多帧,目前只支持一帧。
  • Animator 会增加动画状态机,增加一些动画倒播的小功能。
  • Effect 方面会增加 TrailRenderer 和 ParticleRenderer,TrailRenderer 可以支持拖尾效果。 ParticleRenderer 目前相对较弱,后续会进行完全重写。无论在效果和性能上都会提升。

2D 部分的重点:

  • 支持文字渲染基础功能。还会新增 GUI 框架,优先支持 canvas、text 和 button 等基本功能,再逐步增加其他功能。
  • Oasis 会接入 WebXR 建设 XR 能力,并且深度集成 XR 功能。提供一体化的 API,有效降低前端业务开发 3D 和 XR 业务的门槛,这也是 Oasis 作为引擎商的使命。
  • Shader 方面我们会抽象着色器框架,简化着色器的编写成本,通过着色器框架,我们让着色器可以和脚本解耦,可使用独立的文件编写。shader 框架还会支持多 pass,设置混合状态和降级等功能。今年还只是 shader 框架层面的,未来还会做着色器的交叉编译,支持跨平台。

资产方面的重点:

  • Oasis 为了文件极致的小和快,还有不影响引擎的功能扩展设计做了自己的私有资产设计。去年我们已经设计完了纹理、Mesh 和材质的私有资产。今年更多的是编辑器侧的资产接入。除此之外我们还会实现场景和 Prefab 的资产,场景资产可以让开发者在不同的场景之间加载切换,Prefab 可以让开发者加载预制的模板模型。
  • 性能是 2D/3D 引擎永恒的话题,今年我们会做批处理优化,批处理是从 GPU 原理侧的性能提升。Oasis 之前在里程碑的性能提升,更多是从架构侧和算法侧获得的收益。首先是支持静态批处理,提升场景静态渲染物体的性能。二是支持 GPU instance 处理,提升场景动态相似物体的渲染性,其实这都属于图形引擎的常规优化手段,未来 Oasis 接入 WebGPU 后可以利用现代化图形 API 做更深入的优化。

最后是一些小功能和优化方面的改进。首先是简化纹理结构利于 Texture3D、TextureXXArray 等纹理类型的新增。Input 交互去年我们做了 Pointer 交互,今年会支持键盘交互能力。接下来是优化 Transform API ,降低 position 等属性的使用成本。然后是增加声音组件和简化 Engine 的初始化 API 等优化。

编辑器开放计划

降低前端互动业务开发门槛需要现代化的互动工作流,现代化的互动工作流离不开可视化编辑和清晰的职责分工。我们要根据不同公司实际的业务特点和团队规模做工作流的定义和推荐引导。我们要去思考程序员、设计师、产品策划等角色如何高效的配合,并让其发挥各自最大的价值,而不是把压力都集中到程序身上,逻辑开发只是互动业务的一环。而支撑现代化的互动工作流除了引擎本身外,必然需要优秀的配套编辑器串联各角色的分工和高效的开发。

我们 2022 年 12 月我们会开放编辑器的 1.0 注册,主要以稳定基础功能为主,包含 2D/3D 场景编辑、脚本编写和项目构建预览等。2023 年到 2024 年,我们会逐步开放动画编辑、GUI 编辑、场景烘焙、多人协作、资产和插件化市场和桌面应用等功能。

感谢大家的倾听,今天我的分享就到这里。

最后

如果您想观看完整的视频内容,详见:Oasis 周年回顾和未来规划

猜你喜欢

转载自juejin.im/post/7074845673698361374