历经数月,蚂蚁互动图形引擎 Oasis Engine v0.8 正式发布,本次里程碑除了原本的 Engine 仓库外,为了 Oasis 生态更健康的发展,还为大家带来了包含一定业务向且具备通用性功能的工具包( Engine Toolkit )仓库。
Engine 物理方面增加了角色控制器,可以大幅减少角色类互动业务的开发成本,同时还引入了物理关节,可以快速完成弹簧、铰链等物理仿真效果。精灵方面增加了 slice(九宫)绘制模式。文字方面通过内部机制的优化大幅减少了内存占用,并提升了一定性能。在交互方面增加了 Pointer Button 功能 ,交互功能也逐步趋于完善。
Engine Toolkit 仓库除包含原有 Engine 仓库的相机控制器、GPU 拾取和性能数据统计功能外,本次里程碑还新增了辅助线框绘制、平面阴影材质、蒙皮骨骼预览、Gizmo、后处理外描边、线条绘制等功能,这些功能通常可以开箱即用,也非常欢迎开发者贡献该仓库。另外 Oasis Editor 的部分核心功能未来也由 Engine toolkit 提供支持,相信很多内行的同学已经看出本次里程碑新增的功能均为编辑器所需的核心功能。
Engine
- 仓库地址:https://github.com/oasis-engine/engine
- 0.8 里程碑完整日志:https://github.com/oasis-engine/engine/releases/tag/v0.8.0-beta.5
物理更新
新增角色控制器
新版引擎支持了角色控制器组件,角色控制器支持胶囊体或盒子形状 。通过角色控制器可以为角色提供更多基于物理的反馈,配合 Animator 动画能力可以轻松实现障碍物翻阅,爬坡运动等功能。
新增基础物理关节
另外还新增了固定关节,铰链关节和弹性关节,通过关节可以更加容易的控制动态碰撞器的运动约束,让物理仿真型互动效果更丰富,实现更简单。
2D 更新
文字
文字系统底层大重构,文字的纹理基于单个字符进行缓存,对于大量文字渲染,性能和内存均得到大幅提升,以官网示例文字弹幕为例,性能提升 20%,如下,上为重构前,下为重构后:
内存方面,基于字符缓存可以使内部字符纹理得到最大程度的复用,重构后文字弹幕示例内存至少节省了 50%,内存对比如下,上为重构前,下为重构后(空画布内存 33.6 M):
精灵
精灵部分进行了大量重构,主要迎来两个更新:
- 首先是渲染器可选择绘制模式
Simple
与Sliced
,Simple
为默认模式对应 0.7 版本中的绘制,Sliced
则为新增的九宫绘制,与之配套的是开发者可以设置Sprite
的Border
达到自己期望的拉伸效果。
94acb9d48272c971662af915de9b90d7.gif
- 同时,我们将控制渲染尺寸的属性放在了
SpriteRenderer
中,开发者可以通过width
和height
来设置。
交互更新
InputManager 新增三项能力,已经解除对 H5 原生事件的依赖:
- 支持滚轮,开发者可以在脚本系统中直接获取本帧滚轮改变的差值。
- 获取触控按键状态,开发者可通过
isPointerHeldDown
,isPointerDown
与isPointerUp
获取全局的触控按键状态, - 获取触控光标位置,开发者可通过
pointerPosition
与pointerMovingDelta
获取光标此刻在屏幕空间中本帧的位置与位移。
动画更新
BlendShape
动画在 webgl1.0 模式下能力得到增强,之前版本 webgl 1.0 模式下的 BlendShape
动画最大支持数量有一定限制,超过数量限制则在运行时中永远无法播放。新版本采用动态策略解决最大数量限制,运行时根据动画的权重比,动态播放权重影响较大的几个 BlendShape
动画,提升了 webgl1.0 降级模式下的动画效果和易用性。
其他
- 相机支持 Color、Depth、Stencil 原子化清除能力,可以更灵活的控制渲染混合效果。
Shader.getMacroByName
增加变量宏缓存能力,ShaderData
增加getMacros()
获取当前宏集合方法。- 数学类(
Vector3
、Vector4
、Color
等)增加copyFrom()
方法,支持和 Object 对象进行数据交互。 Renderer
增加priority
属性,增强渲染排序能力,解决深度相同对象渲染冲突问题。Sprite
的pivot
和reigion
调整至左下角。- 增加组件依赖装饰器
dependentCompoments
,配置组件依赖关系更简单。
Engine Toolkit
- 仓库地址:https://github.com/oasis-engine/engine-toolkit
- 0.8 里程碑完整日志:https://github.com/oasis-engine/engine-toolkit/releases/tag/v0.8.0-beta.1
辅助线绘制
三维空间中很多无形对象都需要可视化辅助调试,比如物理碰撞器、相机、光等。尤其是物理组件的调试一直是用户很大的痛点,此前的调试要么需要依赖 NVIDIA PhysX Visual Debugger,要么只能靠猜来判断碰撞器的位置。这个里程碑新增的 @oasis-engine-toolkit/auxiliary-lines 良好的解决了该问题。
骨骼查看器
我们在查看附带骨骼动画的模型时,不能一目了然的概览其骨骼情况,是令人非常头痛的问题。该特性可以帮助开发者快速预览模型骨骼概况,并根据骨骼权重展示不同长短以及大小,也支持颜色、粗细等配置。
Gizmo
新增 Gizmo 组件,可通过可视化的方式的进行物体拖拽、旋转、缩放,Gizmo 是三维可视化交互工具的核心功能之一。
描边
无论是在编辑器还是互动业务中,我们经常有高亮选中某个模型的诉求,Outline 采用全屏后处理的模式,可高亮显示模型以及子节点的外轮廓,并支持调整颜色和粗细。
平面阴影
增加平面阴影材质,平面阴影材质虽然有一定局限性,需要地面不能有明显凹凸,但在符合规范的场景下,其具备更好的性能,该效果通常在特定业务中被广泛使用。
画线
使用 WebGL 绘制宽度大于 1 的线一直是难点,新增的 Lines 工具可以渲染实线虚线,并且支持自定义线宽、lineCap 和 lineJoin 等功能,也是业务中很常见的需求,例如开发者可以将该功能用于制作地图导航线。
控制器
基于 InputManager
重构的 OrbitControl
和 OrthoControl
减少了70%
代码,同时支持键盘和鼠标的自定义快捷键。
文档更新
文档 | 更新内容 |
安装 Oasis | 更新引擎 0.8 包体结构 |
初始化画布 | 更新画布尺寸检查与画布尺寸更新时需要同步的操作 |
加载 3D 模型 | 补充支持的模型类型 |
第一个游戏 | 优化 2D 项目屏幕适配逻辑 |
引擎 | 优化标题层级 补充引擎状态接口描述 |
场景 | 补全增删改查描述 |
实体与组件 | 补全增删改查描述 |
变换 | 补充变化的一些基本概念 |
相机 | 优化结构 补充相机朝向,剔除与多相机相关内容 |
材质 | 优化内容结构,细化渲染状态与队列 |
纹理 | 增加 UV 坐标,纹理格式等相关内容。 |
纹理压缩 | 增加压缩纹理格式支持示例 |
精灵与精灵渲染器 | 更新渲染模式 更新 region 与 pivot 示意图 更新 SpriteRenderer 在三维空间的位姿示意 |
动画控制器 | 增加示例代码与动画控制器内的层级描述 |
物理 | 增加物理不同包的指标对比 增加物理追帧的描述 增加为 MeshRenderer 添加包围盒的示例 |
示例更新
0.9 里程碑预告
接下来会把更多的关注点放到用户层关注的高级功能,帮助开发者提升渲染效果和开发效率。渲染方面计划增加可支持大型场景渲染的实时阴影,动画方面会支持任意属性编辑,特效方面会增加拖尾效果。
小彩蛋
编辑器在这个里程碑经过了一次重大设计迭代和代码重构,支持 2D、3D、数字人等三类项目的创建,后续还会扩展更多实用的业务模板,比如 AR、动效等模板。此外,编辑器已支持第三方插件能力,基于插件机制可以快速支撑业务功能。接下去几个月,我们将在内部做进一步的测试和功能完善,期待年底开放与大家见面。
如下图所示,我们制作了数字人插件,用来实现捏脸、换装、动画等数字人业务需求。
如何进一步了解我们
Oasis 开源社区群 (钉钉):
Oasis 开源社区群管理员 (微信):
网站
官网地址
Engine 源码地址
https://github.com/oasis-engine/engine
Engine Toolkit 源码地址
https://github.com/oasis-engine/engine-toolkit