Release 1.0.0

Release 1.0.0

在下文查阅完整更新日志

Wonderland Engine 1.0.0 的目标是为未来版本构建坚实的基础:

通过集成 NodeJS 和 esbuild 进行打包,我们能够在保持之前内部打包器便利性的同时,使所有项目基于 NodeJS。我们还使得以 npm 包的形式共享组件比以往更加容易。

我们用 TypeScript 重写了 JavaScript API。即使您继续在项目中使用 JavaScript,您也会注意到由于这一变化,您的 IDE 能够提供更智能的建议。但您可能会错过一些新的炫酷功能,例如:

1@property.string('Hello TypeScript!')
2message!: string;

通过重写,我们创建了一个全面的测试套件并修复了大量的错误。可在我们的博客文章《Wonderland Engine 1.0.0 JavaScript 迁移》中查阅关于新 API 的详细信息。

在渲染方面,我们做了一些重要的改动,比如调整我们默认着色器的光照模型,以使用更直观的 intensity 设置代替 attenuation。这些改动为未来的出色渲染功能铺平了道路。

Wonderland Editor 是 Wonderland Engine 开发工作流程的核心。我们添加了一个新的实验性功能,可以将项目直接启动到 Android 设备上,例如独立的 VR 浏览器,并为您设置端口转发。

最后,开放的网络让您能够接触到广泛的用户。不仅设备兼容性,语言也可能是一个障碍。我们添加了工具来帮助您翻译项目,以覆盖更广泛的受众。

在下方查阅完整更新日志

重大变化 

因为我们非常注重向后兼容性,所以不常有机会打破现状。随同重大版本的切换,我们难得地有机会进行清理并做出改进。

我们进行了彻底的调整,但我们带着社区一起前行!您喜爱的库已经做好准备并与新版本兼容。

以下是我们做出的一些变化的示例以及我们如何决定它们。我们期待看到您对结果的看法。

示例: .getTranslationWorld().getTransformationWorld() 十分相似。即使在 IDE 的自动补全中,您可能也没有意识到自己在使用错误的函数。 现在,我们使用 “Position” 而非 “Translation” 来描述对象的位置。

示例: 旧 API 将所有内容存储在一个全局 WL 对象中。这样难以将 Wonderland Engine 嵌入到其他库中或在同一页面上运行多个实例。现在,Wonderland Engine 的实例被封装在一个 WonderlandEngine 类中,您可以完全控制它的实例化时间和方式。

更新日志 

Editor

  • 增加了基准测试视图
  • 增加了本地化视图以辅助 WebXR 体验的翻译
  • 增加了 WL_EDITOR JavaScript 宏,当编辑器打包组件时,该宏被设置为 true
  • 为颜色选择器增加了 alpha 值滑块
  • 图片压缩增加了 ETC1S(较小,默认)和 UASTC(更高质量)的选择
  • 为天空材质的 colorStop 属性增加了默认值
  • 增加了设备下拉列表,以便直接在连接的 Android 设备而非本地设备上启动页面(端口转发自动设置)
  • 包装:移除未使用的 VR 和 AR 按钮 SVG
  • Windows:修复了文件监视产生的随机错误信息
  • 现在具有空动画的动画组件在运行时处于非活动状态
  • 自动从脚本和 npm 包中检测组件
  • 修复了一个罕见的错误,其中在编辑器中添加的组件在运行时可能返回 undefined
  • 修复了在对项目进行各种更改时整个 UI 随机变暗的问题
  • 修复了具有不均匀缩放祖先的对象的旋转 Gizmo 行为
  • 修复了切换项目时的崩溃问题
  • 修复了一些 FBX 文件的重定向问题
  • 修复了一些 FBX 文件的崩溃和导入错误
  • 在重定向时,找不到新目标的轨道现在将被删除
  • 使所有颜色属性的 alpha 值默认设置为 1.0
  • 现在可以设置负值的文本组件间距
  • 移除了传统的 JavaScript 打包工具,采用默认的“esbuild” 打包工具
  • 移除了“8thwallToken”设置,转而在入口脚本中指定
  • 文本材质现在有缩略图
  • 字体现在有缩略图
  • CLI
    • 修复 –import 命令没有实例化场景的问题
    • 增加了令牌作为一种更安全的方法,将凭据传递给 CI 上的编辑器进行打包
    • 添加了基准测试框架
  • Linux
    • 修复了文件监视
    • 修复了修饰键状态
  • 视图
    • 资产浏览器:删除的文件现在被移至系统垃圾文件夹而不是永久删除
    • 资产浏览器:默认应用程序在双击时启动的工作目录现在为项目根目录
    • 控制台: 错误、警告、信息复选框状态现在在每个项目中保持
    • 控制台:修复了水平滚动
    • 项目设置:修复了更改编辑器服务器端口时的巨大延迟
    • 属性:修复了欧拉旋转的粘贴问题
    • 资源:添加了水平滚动,以确保即使在较小屏幕上也能读取表的全部
    • Profiler:改进了默认启用的性能分析部分
  • 场景导入
    • 优化了网格处理
    • 添加了更多光属性的导入

Engine

  • 渲染
    • 固定天空着色器上的纹理接缝
    • 更新至最新的 Slug 库
  • 修复了由于内部阴影计数未更新而导致的阴影错误
  • 改进了 GPU 性能分析查询
  • 动画速度为负时现在将动画倒放
  • 着色器现在异步编译,以进一步加快加载速度
  • 支持 UASTC 压缩
  • 为即将推出的功能更换了动画引擎
  • 系统性地修复由于数组越界访问引起的各种罕见崩溃
  • 去除了光的 “attenuation”,改用更直观的 “intensity”
  • Phong
    • 通过将环境颜色与漫反射项相乘来检索环境项
    • 漫反射颜色现在与漫反射纹理相乘
    • 顶点颜色现在与漫反射纹理和颜色相乘
    • 默认光距离模型现在是标准的逆平方衰减 (旧行为已弃用,但仍可通过功能复选框使用)
    • 增加了基础的 TONE_MAPPING 功能
  • Flat
    • 顶点颜色现在与颜色和纹理相乘
  • 优化了纹理流的 CPU 时间
  • 修复了各种罕见的纹理流崩溃问题
  • 向 Profiler 添加了更多分析部分

Runtime

  • PWA: 修复了服务工作者未缓存的各种文件以供离线使用
  • 修复了 Profiler 中的潜在崩溃
  • 固定输入类型 “Head”
  • 完全使用的 .bin 文件数据在加载后现在被丢弃,改善了内存使用
  • 现在可以在单个网页上使用多个引擎实例
  • 为了更好的调试体验和旧版 iOS 硬件的兼容性,将 WebAssembly 可用最大内存降至 512 MB
  • WebAssembly 现在已正确模块化,可与任何其他 WebAssembly 模块一起使用
  • 通过 ResizeObserver 处理大小调整

JavaScript API

  • TypeScript
    • 添加了 @property.<type> 装饰器,用于直接在类主体中定义可配置属性
    • 彻底在 TypeScript 中重写了 API
  • 增加了 PhysXComponent.group, PhysXComponent.block 以及许多缺失的属性
  • 增加了 XR.currentReferenceSpace, XR.currentReferenceSpaceTypeXR.referenceSpaceForType
  • 增加了 XRWonderlandEngine.xr 以访问与 WebXR 相关的状态
  • 增加了大量新的自动化测试
  • 增加了一种新的 Color 属性类型
  • 为 Mesh、Material、Texture、Animation 和 Skin 添加了 equals() 方法
  • 增加了 LightComponent.setColor
  • 增加了 _wl_nextUpdate_wl_nextFrame 以启用组件的自动化测试
  • 增加了剩余的 LightComponent 属性
  • LightComponent.color 现在仅返回 RGB 的 3 个元素
  • 增加了运行时和 API 版本兼容性检查
  • 增加了 onRegister 以允许在组件注册时运行附加行为
  • API 的所有全局状态已被移除
  • 自定义组件现在是类:export class CustomComponent extends Component
  • 修复了 AnimationComponent.state 返回错误的枚举值
  • 修复了 Object3D.lookAt() 并在文档中澄清了其行为
  • 通过 Object3D.addComponent(type, otherComponent) 修复了组件的克隆
  • 修复了 Component.destroy() 仅销毁但不从对象中移除组件的问题
  • 修复了 RayHit.objects 元素在未使用的索引上不是 null 的问题
  • 使默认参数的应用与编辑器一致
  • 移除了 onXRSupported 回调,因为 WonderlandEngine.arSupportedWonderlandEngine.vrSupported 从应用程序启动时就可用
  • Material.shader 重命名为 Material.pipeline
  • 用新的 Emitter 类替换了回调数组(onSceneLoaded, onXRSessionStart, …)
  • onXRSessionStart 现在是一个 RetainEmitter,如果 XR 会话已经运行,将立即触发回调。
  • AnimationComponent.animation 现在在未设置时正确返回 null
  • 新场景加载时现在调用 Component.onDestroy
  • Object 现在为 Object3D 以避免遮蔽内建JavaScript 类型
  • Scene.load()Scene.append() 现在是 async
  • 为避免与 Transform 函数混淆,将 Translation 函数重命名为 Position

Components

  • 将所有组件转换为类
  • 将某些组件转换为 TypeScript
  • 增加了轨迹组件
  • 增加了平面检测组件
  • 增加了锚组件
  • cursor-target: 不建议使用 add*Function,而建议使用 onClick, onHover, onUnhover, onMove 事件发射器

已知问题

  • 通过 WebXR Emulator 扩展进行输入无效
  • 在 Windows 上缺少自定义组件可能导致打包循环
Last Update: May 1, 2023

保持更新。