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

简介: 蚂蚁互动图形引擎 Oasis Engine v0.7 发布
🙋🏻‍♀️编者按:蚂蚁互动图形引擎 Oasis Engine v0.7 在图形、物理、交互、动画、基础等功能上都有哪些新的更新?本文中,Oasis 团队将带来详细介绍,欢迎享用~

历经数月,蚂蚁互动图形引擎 Oasis Engine v0.7 迫不及待和大家见面啦!

0.7 版本在图形方面新增了文字渲染器,完善了 2D 的基础能力,同时增强了 PBR 材质渲染效果,让真实感渲染效果更上一层楼。物理方面,深入结合 PhysX 的能力引入动态碰撞器组件,帮助开发者轻松利用几行代码实现物理类的互动。动画方面,升级了 BlendShape 动画动画倒播能力。交互方面,针对 PC 端的互动,增加了键盘交互能力。

除了以上功能的更新 ,根据社区的反馈大幅改善了文档结构和内容组织。接下来,让我们来看一下这些更新的详细内容吧!

图形更新

文字

新增了文字渲染器,解决了文字绘制的问题,2D 基础能力方面得到进一步完善。之前开发者在项目中只能用 HTML+CSS 技术实现文字绘制,整个互动项目的开发流程比较割裂。此版本的文字系统支持基础的系统字体的渲染,包括大小、颜色、加粗、斜体等样式设置(下方左图)。另外,也支持多行显示,并支持各种对齐方式(下方右图)。


文字系统也支持自定义 Shader,可以实现一些有意思的特效,比如官网示例中简单实现的 KTV 字幕效果:

材质

新增 ClearCoat
旧版的 PBR 材质设计是单一涂层模型,很难体现自然现实中的复杂材质表现,因此我们在材质的基础层上面增加了透明涂层(Clear Coat),用来模拟类似车子表面涂上一层透明涂层的渲染表现:


开启此功能非常便捷,只需要设置 PBR 材质的 clearCoat 属性为 0 ~ 1 的值即可:

material.clearCoat = 1.0 ;

除了设置 clearCoat 作为透明涂层的强度之外,引擎还提供了透明涂层纹理、透明涂层粗糙度、透明涂层粗糙度纹理、透明涂层法线纹理,用来控制涂层的综合表现,具体效果可以参考官网示例。

新增高光抗锯齿

旧版的材质在低粗糙度的时候,会有较强的镜面反射,且高光区域会很锐利,在一些模型边缘会表现的更加明,新版材质在 Shader 中内置了高光抗锯齿,改善了这一状况。

新增 AO 贴图 UV 通道切换

旧版引擎不支持多 UV 通道管理,大部分 AO 贴图(occlusion Texture)在建模导出的时候采用了第二个 UV 通道,因此会导致渲染异常。新版引擎新增了 AO 贴图 UV 通道切换的功能,glTF 解析的时候会自动切换 UV 通道,也可以手动切换,但注意,引擎限制了 AO 通道只能采用 UV0 或者 UV1:

material.occlusionTextureCoord = TextureCoordinate.UV1;

HDR 文件加载器

旧版引擎实现一个天空盒,必须使用立方体纹理加载器加载 6 张贴图,且结尾必须使用 px 、py、 pz 、nx 、ny 、nz。为了增加性能和易用性,新版引擎往资源加载器中增加了 HDR loader,用户可以直接加载各种分辨率的 HDR 贴图作为天空盒背景:

engine.resourceManager
  .load<TextureCube>({
    type: AssetType.HDR,
    url: "***.hdr"
  })
  .then((texture) => {
    skyMaterial.textureCubeMap = texture;
    // HDR output is RGBM format.
    skyMaterial.textureDecodeRGBM = true;
  });

纹理

新增 Texture2DArray
新增了 Texture2DArray 纹理类, Texture2DArray 是数组的形式的 Texture2D,常作为数据纹理使用,并且不会占用多个 GPU 纹理单元,开发者可以使用该纹理作为多种用途使用。优化 RenderTarget为了让 RenderTarget 从设计上更好的扩展任意纹理类型,精简了纹理结构,其中 RenderTarget 的 colorTexture 和 depthTexture 属性类型使用 Texture  替代旧版的 RenderColorTexture 和 RenderDepthTexture。

物理更新

新增动态物理碰撞器

新版引擎正式加入了由 PhysX.js 提供后端支持的动态物理碰撞器组件,通过该组件用户可以很容易为应用添加物理反馈的效果,并且可以触发碰撞响应的事件。

由于碰撞器组件会按照物理规律驱动组件运动,因此单步模拟的时间步长就显得非常重要。新版引擎将物理场景更新的时间间隔改成固定时间,每一个主循环内,会有一次或者多次更新,并且物理场景和 Entity 的变换也会同步多次。对于物理相关的脚本逻辑,增加了 onPhysicsUpdate 脚本函数,该函数在每次物理场景更新前被调用,保证用户设置的物理更新逻辑可以被执行。因此在脚本生命周期中,单个循环中可能会多次触发相应的物理事件:

解耦初始化接口

除了新功能,新版引擎优化了物理引擎的初始化方式,将物理引擎和 Engine 初始化解耦:

import {WebGLEngine} from "oasis-engine";
import {PhysXPhysics} from "@oasis-engine/physics-physx";
const engine = new WebGLEngine("canvas");
PhysXPhysics.initialize().then(() => {
  engine.physicsManager.initialize(PhysXPhysics);
  engine.run();
});

交互更新

键盘交互

新增键盘交互,开发者可以通过几个简单的接口实时获取键盘的交互情况,现在官网上的 Flappy Bird 可以用空格键玩啦!

class KeyScript extends Script {
  onUpdate() {
    const { inputManager } = this.engine;
    if (inputManager.isKeyHeldDown(Keys.Space)) {
      // 现在还按着空格键
    }
    if (inputManager.isKeyDown(Keys.Space)) {
      // 这帧按下过空格键
    }
    if (inputManager.isKeyUp(Keys.Space)) {
      // 这帧抬起过空格键
    }
  }
}

动画更新

BlendShape 动画数量提升

旧版本中 Mesh 存储的 BlendShape 动画数量上限最大为 4,新版引擎改进了内部实现,BlendShape 动画上限提升,通过浮点数纹理实现模式解除了数量上限的限制,几乎可以支持任意数量的 BlendShape 动画混合,下面案例为 8 个 BlendShape 的混合动画,旧版本只支持 4 根柱子有动画。

动画倒播

新增 Animator 倒播的能力,  animator.speed 为负值时,动画可以进行倒播,开发者可以编写个性化的播放逻辑:

animator.speed = -1;

网络异常,图片无法展示
|

基础更新

变换

优化 Transform API 的使用方式,提升了高频 API 的使用体验,例如,过去我们想修改 position、rotation、scale 等属性的单轴分量值需要通过以下步骤完成,使用相对繁琐:

const transform = lightEntity.transform;
const position = transform.position;
position.y += 0.1;
transform.position = position;

优化后开发者可以直接修改单轴分量即可,无需回设完整属性,使用方式更自然:

const transform = lightEntity.transform;
transform.position.y += 0.1;

文档更新

文档目录结构做了较大更新,将内容以功能模块进行划分,让开发者能够更快地定位到所需功能:

示例更新

  • 图形:text KTV effect、text renderer、text wrap alignment、pbr clear coat、HDR Loader
  • 物理:physx attractor、physx compound、physx select

0.7 里程碑信息

0.8 里程碑预告

  • 在下个里程碑当中,物理组件方面会引入角色控制器和物理约束,这些物理技术可以很容易与动画系统结合起来,可以增强开发者对于角色的控制能力。
  • 文字渲染器将会持续优化内部实现,采用逐字符缓存的方式,减少文字内存占用。
  • 特效相关功能的开发和规划。

如何联系我们

Oasis 开源社区群 (钉钉):

Oasis 开源社区群 (微信):


如果微信二维码失效
可添加群管理员微信:zengxinxin2010

相关文章
|
缓存 移动开发 数据可视化
蚂蚁互动图形引擎 Oasis Engine v0.8 发布
蚂蚁互动图形引擎 Oasis Engine v0.8 发布
227 0
|
算法 IDE 区块链
关于佛萨奇系统开发源码搭建方案丨Meta Force魔豹联盟系统开发技术讲解
关于佛萨奇系统开发源码搭建方案丨Meta Force魔豹联盟系统开发技术讲解
155 0
|
存储 人工智能 区块链
Meta Force佛萨奇2.0元宇宙项目系统开发技术讲解方案
Meta Force佛萨奇2.0元宇宙项目系统开发技术讲解方案
228 16
|
移动开发 前端开发 JavaScript
国内再添开源图形引擎:蚂蚁 Oasis Engine 实践之路
随着互联网技术的发展,Web 前端也出现了不同分支,除了传统网页开发以外,前端图形领域也逐渐独立为一个重要方向。虽然目前从整体上来看,前端图形领域还是比较小众的领域,但从发展势头来看,其未来发展前景还是值得关注。
695 0
|
JavaScript 前端开发 小程序
五福背后的 Web 3D 引擎 Oasis Engine 正式开源
Oasis 从开源走向新的起点,用 3D 化的交互和表达让世界变得更美好。
五福背后的 Web 3D 引擎 Oasis Engine 正式开源
|
Kubernetes Cloud Native Java
Gopher China 2021 讲师专访之周正喜:首次参会分享—阿里基于 Go 的应用管理和交互引擎
Gopher China 2021 大会又准时和大家见面了, 2015年由 Go 中国社区发起的第一届 Gopher China 大会在上海成功举办,历时五年已成为国内最权威和最干货的Go大会
Gopher China 2021 讲师专访之周正喜:首次参会分享—阿里基于 Go 的应用管理和交互引擎
|
移动开发 人工智能 开发框架
|
Kubernetes 网络协议 容灾
【阿里云新品发布·周刊】第28期:Web应用托管服务商业化首发--上云新方式,颠覆传统Web+
新产品、新版本、新技术、新功能、价格调整,评论在下方,下期更新,关注更多内容!
278 0
【阿里云新品发布·周刊】第28期:Web应用托管服务商业化首发--上云新方式,颠覆传统Web+
|
数据库 数据安全/隐私保护 Python
菜鸟玩GAE(Google App Engine)完全指南,互联网营销
GAE是什么?   从实用的角度说是GAE可以提供我们稳定的免费网站空间,空间支持语言是python、java,数据库是google专有的数据库,数据库和空间可以免费使用1G,超过了1G就要买了,还提供Google的带宽,这个带宽约可以支撑一月500万次访问请求,超过500万次就要买了……对于一般网站这免费的资源就足够了,另外GAE还支持域名绑定,就相当于个人买的虚拟空间一样。
3667 0
|
定位技术 C++ 容器
ArchSummit分享 | 高德地图App架构演化与实践
郝仁杰,高德地图无线开发专家。在7月13日落幕的2019年ArchSummit峰会上就高德地图近几年的App架构演化和实践进行了分享。
10852 0