Oasis Engine v0.9 正式发布,本次里程碑后 Oasis Engine 正式成为蚂蚁互动技术品牌 Ant Galaxy 旗下核心基础引擎,原 Github 官方组织名 oasis-engine 已修改为 ant-galaxy。未来 Ant Galaxy 旗下会孵化诞生更多基于 Oasis Engine 的图形互动类产品,敬请期待。
Engine 在渲染方面阴影支持了 CSSM ,可支持中大场景渲染,并带来了更好的性能和渲染效果。文字新增了自定义字体加载。Shader 支持了多 pass,编写多 pass 效果更简单。动画方面 Animator 支持了任意目标属性动画,进一步加强了动画管理和驱动能力。Input 支持了多 Pointer 事件回调,编写多点触控逻辑更简单。另外天空、Mesh、资产加载等功能均有不同程度的加强。
Engine Toolkit 新增 Navigation Gizmo 支持高效控制相机运动,Infinity Grid 材质绘制无限大小的网格平面,Sketch Geometry 绘制模型线框,法线,切线和副法线。Auxiliary Lines 支持渲染包围盒辅助线绘制,原有的 Gizmo 和 Control 组件均进行了重构。
官网(oasisengine.cn/)从 github pages 静态网站升级为动态网站,降低了引擎各版本的文档的维护成本,更好地支持了内容搜索。开发者可以通过 github 的文档仓库贡献 PR,合并后将自动更新网站内容。
Engine
- 仓库地址:github.com/ant-galaxy/…
- 0.9 里程碑完整日志:github.com/ant-galaxy/…
阴影更新
完整重新设计了引擎原有的阴影系统,调整为 Cascaded Statble Shadow Map (CSSM) 稳定性级联阴影,大幅提升了中大型场景的阴影渲染质量和性能,并且还提供了多种质量配置,方便开发者针对性做剃度降级。同时该阴影系统还会自动根据 WebGL2 或 WebGL1 选择最佳的系统实现。
对于追求物理真实的场景,结合 PBR 材质和物理模拟可以获得非常逼真的交互效果:
但在上述场景下,材质如果是透明的则无法接收任何阴影。有时候会希望增加一个透明的阴影接受物,例如在 AR 场景中嵌入一个实时渲染的模型。在这种情况下,可以复用经过重构后的阴影着色器模块,从而实现自定义阴影渲染。如下图背景图由离线渲染得到,加入一块透明平面接受阴影,可以使得实时渲染的物体更好加入到场景中:
文字更新
Font 字体新增了 ttf、otf 和 woff 自定义字体格式的支持,通过自定义字体抹平系统字体在不同平台下的显示差异,也可以给项目提供更酷炫丰富的文字样式。
着色器更新
Shader 新增多 pass 能力,一个 Shader 可包含多个着色 pass ,方便开发者编写多 pass shader 效果,无需像之前新增额外的 Renderer,更专注于 Shader 本身的创作。未来还会投入更多能力帮助开发者提升开发者创作 Shader 效率。
网格更新
ModelMesh 新增 calculateTangents 方法,对于没有切线数据的模型,可以通过该方法计算切线信息,以此在着色器中支持使用 TBN 矩阵结合法线贴图计算法线方向。目前引擎内置的 PrimitiveMesh 均已增加切线数据。另外,修复了线数据上传时丢失 w 数据的问题,使得着色器中可以正确的计算出副法线的值。
天空更新
重新整理了天空相关的渲染逻辑,修复了在正交相机下天空盒的渲染问题。同时规避了在某些机型上,因为计算精度造成的天空盒被剔除的问题。另外对于天空 Shader 编写,用户可以更加自然的编写天空着色器,不需要在着色器中做任何特殊的处理。
动画更新
Animator 新增自定义 AnimationClip 目标属性的能力,以前只能使用 glTF 模型内置的动画,如蒙皮动画和 Blend Shape 动画。现在可以通过 AnimationClip 自定义任意组件属性的动画,比如灯光的位置、材质颜色、相机位置和视角等。Animator 对动画的管理和驱动能力也从定制化变为通用化。SkinnedMeshRenderer新增 localBounds 和 rootBone 属性,为开发者提供了更精准的蒙皮模型渲染包围盒更新机制,当默认包围盒不满足时还可以手动调整局部包围盒和其跟随根骨骼。
物理更新
物理的 Collidershape 支持设置旋转属性,可以更加自由的组合基础几何碰撞器构造复合碰撞盒,例如以下通过胶囊组成的圆环碰撞器案例:
交互更新
更新后每个 Pointer 保持独立逻辑,并单独处理各自的触控事件,同时在 Pointer 的回调函数中可以直接拿到触发此动作的 Pointer,因此我们可以使用更简单的逻辑实现多点触控能力。
其他更新
Loader加载Texture支持format和mipmap配置参数。Loader加载glTF支持keepMeshData配置参数,可保留 CPU 模型数据。Entity新增siblingIndex属性,可快捷调整和获取其在父 entity 子队列中的位置。Texture新增depthCompareFunction属性,当纹理为深度纹理时可设置其采样比较模式,通常用于 ShadowMap 等阴影效果实现。ShaderData新增getProperties和getPropertyValue方法,开发者可获取其所有已设置的着色属性和值。glTF解析新增了子资产模式。glTF解析新增了纹理过滤模式。Animator新增默认动画配置。
Toolkit
- 仓库地址:github.com/ant-galaxy/…
- 0.9 里程碑完整日志:github.com/ant-galaxy/…
Transform Gizmo
Gizmo 进行了完整的重构,并且优化开发者调用的API,操作更跟手。整体样式调整,便于选择。新增锚点选项(center/pivot),和坐标系选项(world/local),支持同时选中多个实体。并且增加了复合模式,集位移、旋转、拖拽为一体。
Navigation gizmo
和 Gizmo 不同,新增 Navigation gizmo 可以在可视化、无键盘操作的场景中更加方便地调度相机相。它提供切换三视图功能,简单拖拽即可使得场景相机绕特定点移动。并且实时同步场景相机在空间中的方位,方便用户观察。
无穷网格材质
该材质在直接在屏幕空间中渲染无穷大的网格,同时该材质同时支持2D空间(x-y平面)和3D空间(x-z平面)中的网格。支持两种网格之间的切换。
线框渲染模式与法线,切线,副法线渲染
由于 WebGL 没有几何着色器,因此渲染网格线框,法线,切线,副法线等辅助视图比较困难。用户常需要可视化这些模型数据以检查模型资产和着色器的准确性。0.9 版本的 Toolkit 新增这些数据的渲染,并且支持引擎当中的 GPU 蒙皮动画,GPU 顶点动画。实现的方法基于将整个 Mesh 转换成一张纹理,由此着色器可以很容易得到模型的全局数据,由此将顶点着色器转换成通用的 GPGPU 计算单元。
文档更新
Oasis 官网文档与 API 支持了关键词搜索功能,我们将持续投入精力优化开发者的开发体验。
| 文档 | 更新内容 |
|---|---|
| 引擎 | 修正初始化错误描述,补充对初始化参数的描述 |
| 文字渲染器 | 补充支持自定义字体格式 |
| 材质总览 | 补充动态替换材质贴图代码 |
| 资源加载 | 补充资产加载透传参数 调整环境光相关描述 |
| 物理管理器 | 修正配图错误(右手坐标系) |
| 动画组件 | 新增动画暂停/恢复描述 优化运动状态描述 新增自定义动画状态描述 新增默认播放描述 新增数据复用描述 |
示例更新
| 案例 | 缩略图 |
|---|---|
| CSS 跟随 3D 移动 | |
| 自定义透明阴影 | |
| 新阴影系统 | |
| 级联阴影 | |
| 线框渲染器 | |
| 无穷网格 | |
| Gizmo | |
| 自定义动画片段 |
如何联系我们
Oasis 开源社区群管理员 (微信):zengxinxin2010
网站
官网地址
oasisengine.cn
Engine 源码地址
github.com/oasis-engin…
Engine Toolkit 源码地址
github.com/oasis-engin…