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

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


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

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

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

  Engine

物理更新

新增角色控制器

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

新增基础物理关节

另外还新增了固定关节,铰链关节和弹性关节,通过关节可以更加容易的控制动态碰撞器的运动约束,让物理仿真型互动效果更丰富,实现更简单。

2D 更新

文字

文字系统底层大重构,文字的纹理基于单个字符进行缓存,对于大量文字渲染,性能和内存均得到大幅提升,以官网示例文字弹幕为例,性能提升 20%,如下,上为重构前,下为重构后:

内存方面,基于字符缓存可以使内部字符纹理得到最大程度的复用,重构后文字弹幕示例内存至少节省了 50%,内存对比如下,上为重构前,下为重构后(空画布内存 33.6 M):

精灵

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

  • 首先是渲染器可选择绘制模式 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 良好的解决了该问题。

骨骼查看器

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


Gizmo

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

描边

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

平面阴影

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

画线

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

控制器

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

  文档更新

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

  示例更新

  0.9 里程碑预告

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

  小彩蛋

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

如下图所示,我们制作了数字人插件,用来实现捏脸、换装、动画等数字人业务需求。

  如何进一步了解我们

Oasis 开源社区群 (钉钉):

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

网站

官网地址

https://oasisengine.cn

Engine 源码地址

https://github.com/oasis-engine/engine

Engine Toolkit 源码地址

https://github.com/oasis-engine/engine-toolkit


相关文章
|
Java 物联网 Maven
Spring Boot 如何集成 MQTT,实现基于 MQTT 协议的消息传递?
Spring Boot 如何集成 MQTT,实现基于 MQTT 协议的消息传递?
5098 2
Spring Boot 如何集成 MQTT,实现基于 MQTT 协议的消息传递?
|
C++
error C2220: 警告被视为错误 - 没有生成“object”文件
原文:error C2220: 警告被视为错误 - 没有生成“object”文件 这种错误的原因是:原因是该文件的代码页为英文,而我们系统中的代码页为中文。
6542 0
|
8月前
利用Applitools Eyes识别视觉bug
Appilitools eyes是一款检测不同次运行页面是否相同的软件。同样运行一个测试程序,可能呈现出来的结果不同。不同的结果可能是bug,也可能是每次展现给用户的结果不同,比如百度搜索,淘宝页面,这里以百度搜索作为案例
426 22
|
10月前
|
数据可视化 关系型数据库 数据处理
手把手教你选对ETL工具:从理解到实战的完整指南
在数字化时代,ETL(抽取、转换、加载)是数据处理的关键环节。本文详解ETL概念、作用及工具选型技巧,助你高效管理企业数据。
|
安全
静态IP代理的最佳实践如何选择合适的方法
在信息化时代,网络成为生活的重要部分,为保护个人信息安全,使用静态IP代理变得越来越普遍。本文介绍了五种实现静态IP代理的方法:租用服务、自建服务器、云服务、ISP提供及转发代理,帮助用户根据需求选择最合适的方式。
693 2
|
JavaScript Docker Python
下个时代的开发工具-Nix:声明式的运行环境构建器、简单场景下的docker替身
Nix 是一个独特的包管理工具和构建系统,采用声明式方法管理软件包和运行环境。它通过精确控制依赖关系和环境配置,确保软件的可重复性、隔离性和可追溯性。Nix 支持多语言开发环境,提供声明式配置、环境隔离、回滚与版本控制等核心功能,适用于复杂开发场景,有效解决依赖冲突和环境不一致问题。
2157 4
|
开发框架 JSON 定位技术
uniapp中map组件动态加载marks标记
uniapp中map组件动态加载marks标记
1906 5
|
人工智能 前端开发 算法
【2023五福】创新科技与传统年俗的有机融合 - AI 年画
23 年兔年,五福项目将传统的写福字升级成了年画,用户通过绘制兔子轮廓可以得到活动的兔子,同时由 AI 生成对应的兔子年画,整个过程给用户带来很强的惊喜感,同时将具有传统氛围的年画与科技感拉满的 AI 作图有机结合,为大家带来全新的年俗体验。AI 年画作为 23 兔年五福的创新项目,在玩法和技术方案上都采用全新的实现,前后端技术、AI 算法深度,以及美术互动等深度协同,实现了玩法了技术的双创新,最
【2023五福】创新科技与传统年俗的有机融合 - AI 年画