蚂蚁互动图形引擎 Oasis Engine v0.8 发布

avatar
花呗借呗前端团队 @蚂蚁集团

历经数月,蚂蚁互动图形引擎 Oasis Engine v0.8 正式发布,本次里程碑除了原本的 Engine 仓库外,为了 Oasis 生态更健康的发展,还为大家带来了包含一定业务向且具备通用性功能的工具包( Engine Toolkit )仓库。

Engine 物理方面增加了角色控制器,可以大幅减少角色类互动业务的开发成本,同时还引入了物理关节,可以快速完成弹簧、铰链等物理仿真效果。精灵方面增加了 slice(九宫)绘制模式文字方面通过内部机制的优化大幅减少了内存占用,并提升了一定性能。在交互方面增加了 Pointer Button 功能 ,交互功能也逐步趋于完善。

Engine Toolkit 仓库除包含原有 Engine 仓库的相机控制器、GPU 拾取性能数据统计功能外,本次里程碑还新增了辅助线框绘制、平面阴影材质、蒙皮骨骼预览、Gizmo、后处理外描边、线条绘制等功能,这些功能通常可以开箱即用,也非常欢迎开发者贡献该仓库。另外 Oasis Editor 的部分核心功能未来也由 Engine toolkit 提供支持,相信很多内行的同学已经看出本次里程碑新增的功能均为编辑器所需的核心功能。

Engine

物理更新

新增角色控制器

新版引擎支持了角色控制器组件,角色控制器支持胶囊体或盒子形状 。通过角色控制器可以为角色提供更多基于物理的反馈,配合 Animator 动画能力可以轻松实现障碍物翻阅,爬坡运动等功能。详情参考 角色控制器组件
Jul-28-2022 2-12-23 PM.gif

新增基础物理关节

另外还新增了固定关节,铰链关节和弹性关节,通过关节可以更加容易的控制动态碰撞器的运动约束,让物理仿真型互动效果更丰富,实现更简单。详情请参考 基础物理约束组件
Aug-01-2022 11-35-14 AM.gif

2D 更新

文字

文字系统底层大重构,文字的纹理基于单个字符进行缓存,对于大量文字渲染,性能和内存均得到大幅提升,以官网示例文字弹幕为例,性能提升 20%,如下,上为重构前,下为重构后:
image.pngimage.png
内存方面,基于字符缓存可以使内部字符纹理得到最大程度的复用,重构后文字弹幕示例内存至少节省了 50%,内存对比如下,上为重构前,下为重构后(空画布内存 33.6 M):
image.pngimage.png

精灵

精灵部分进行了大量重构,主要迎来两个更新:

  • 首先是渲染器可选择绘制模式 SimpleSlicedSimple 为默认模式对应 0.7 版本中的绘制,Sliced 则为新增的九宫绘制,与之配套的是开发者可以设置 SpriteBorder 达到自己期望的拉伸效果。

94acb9d48272c971662af915de9b90d7.gif

  • 同时,我们将控制渲染尺寸的属性放在了 SpriteRenderer 中,开发者可以通过 widthheight 来设置。

交互更新

InputManager 新增三项能力,已经解除对 H5 原生事件的依赖:

  • 支持滚轮,开发者可以在脚本系统中直接获取本帧滚轮改变的差值。
  • 获取触控按键状态,开发者可通过isPointerHeldDownisPointerDownisPointerUp 获取全局的触控按键状态,
  • 获取触控光标位置,开发者可通过 pointerPositionpointerMovingDelta 获取光标此刻在屏幕空间中本帧的位置与位移。

动画更新

BlendShape 动画在 webgl1.0 模式下能力得到增强,之前版本 webgl 1.0 模式下的 BlendShape 动画最大支持数量有一定限制,超过数量限制则在运行时中永远无法播放。新版本采用动态策略解决最大数量限制,运行时根据动画的权重比,动态播放权重影响较大的几个 BlendShape 动画,提升了 webgl1.0 降级模式下的动画效果和易用性。

其他

  • 相机支持 Color、Depth、Stencil 原子化清除能力,可以更灵活的控制渲染混合效果。
  • Shader.getMacroByName 增加变量宏缓存能力,ShaderData 增加 getMacros() 获取当前宏集合方法。
  • 数学类(Vector3Vector4Color 等)增加 copyFrom() 方法,支持和 Object 对象进行数据交互。
  • Renderer 增加 priority属性,增强渲染排序能力,解决深度相同对象渲染冲突问题。
  • Spritepivotreigion 调整至左下角。
  • 增加组件依赖装饰器 dependentCompoments ,配置组件依赖关系更简单。

Engine Toolkit

辅助线绘制

三维空间中很多无形对象都需要可视化辅助调试,比如物理碰撞器、相机、光等。尤其是物理组件的调试一直是用户很大的痛点,此前的调试要么需要依赖 NVIDIA PhysX Visual Debugger,要么只能靠猜来判断碰撞器的位置。这个里程碑新增的 @oasis-engine-toolkit/auxiliary-lines 良好的解决了该问题。
Jul-28-2022 2-23-54 PM.gif

骨骼查看器

我们在查看附带骨骼动画的模型时,不能一目了然的概览其骨骼情况,是令人非常头痛的问题。该特性可以帮助开发者快速预览模型骨骼概况,并根据骨骼权重展示不同长短以及大小,也支持颜色、粗细等配置。
2022-08-01 12.16.25.gif

Gizmo

新增 Gizmo 组件,可通过可视化的方式的进行物体拖拽、旋转、缩放,Gizmo 是三维可视化交互工具的核心功能之一。
gizmo.gifgizmo1.gifgizmo2.gif

描边

无论是在编辑器还是互动业务中,我们经常有高亮选中某个模型的诉求,Outline 采用全屏后处理的模式,可高亮显示模型以及子节点的外轮廓,并支持调整颜色和粗细。
2022-08-01 11.31.19.gif

平面阴影

增加平面阴影材质,平面阴影材质虽然有一定局限性,需要地面不能有明显凹凸,但在符合规范的场景下,其具备更好的性能,该效果通常在特定业务中被广泛使用。
Aug-01-2022 10-42-08 AM.gif

画线

使用 WebGL 绘制宽度大于 1 的线一直是难点,新增的 Lines 工具可以渲染实线虚线,并且支持自定义线宽、lineCap 和 lineJoin 等功能,也是业务中很常见的需求,例如开发者可以将该功能用于制作地图导航线。
2022-07-30 20.35.03.gif

控制器

基于 InputManager 重构的 OrbitControlOrthoControl 减少了70%代码,同时支持键盘和鼠标的自定义快捷键。

文档更新

文档更新内容
安装 Oasis更新引擎 0.8 包体结构
初始化画布更新画布尺寸检查与画布尺寸更新时需要同步的操作
加载 3D 模型补充支持的模型类型
第一个游戏优化 2D 项目屏幕适配逻辑
引擎优化标题层级
补充引擎状态接口描述
场景补全增删改查描述
实体与组件补全增删改查描述
变换补充变化的一些基本概念
相机优化结构
补充相机朝向,剔除与多相机相关内容
材质优化内容结构,细化渲染状态与队列
纹理增加 UV 坐标,纹理格式等相关内容。
纹理压缩增加压缩纹理格式支持示例
精灵与精灵渲染器更新渲染模式
更新 region 与 pivot 示意图
更新 SpriteRenderer 在三维空间的位姿示意
动画控制器增加示例代码与动画控制器内的层级描述
物理增加物理不同包的指标对比
增加物理追帧的描述
增加为 MeshRenderer 添加包围盒的示例

示例更新

案例地址缩略图
角色控制器oasisengine.cn/0.8/example…image.png
物理约束oasisengine.cn/0.8/example…image.png
碰撞器辅助线oasisengine.cn/0.8/example…image.png
文字弹幕oasisengine.cn/0.8/example…image.png
九宫格oasisengine.cn/0.8/example…94acb9d48272c971662af915de9b90d7.gif
骨骼显示器oasisengine.cn/0.8/example…image.png
描边工具oasisengine.cn/0.8/example…image.png
画线oasisengine.cn/0.8/example…image.png
平面阴影oasisengine.cn/0.8/example…Aug-01-2022 10-42-08 AM.gif

0.9 里程碑预告

接下来会把更多的关注点放到用户层关注的高级功能,帮助开发者提升渲染效果和开发效率。渲染方面计划增加可支持大型场景渲染的实时阴影,动画方面会支持任意属性编辑,特效方面会增加拖尾效果。

小彩蛋

编辑器在这个里程碑经过了一次重大设计迭代和代码重构,支持 2D、3D、数字人等三类项目的创建,后续还会扩展更多实用的业务模板,比如 AR、动效等模板。此外,编辑器已支持第三方插件能力,基于插件机制可以快速支撑业务功能。接下去几个月,我们将在内部做进一步的测试和功能完善,期待年底开放与大家见面。
image.png
如下图所示,我们制作了数字人插件,用来实现捏脸、换装、动画等数字人业务需求。
image.png

如何进一步了解我们

Oasis 开源社区群 (钉钉):

JPG.png

Oasis 开源社区群管理员 (微信):

image.png

网站

官网地址
oasisengine.cn
Engine 源码地址
github.com/oasis-engin…
Engine Toolkit 源码地址
github.com/oasis-engin…