Release 1.0.0
在下文查阅完整更新日志。
Wonderland Engine 1.0.0 的目标是为未来版本构建坚实的基础:
通过集成 NodeJS 和 esbuild 进行打包,我们能够在保持之前内部打包器便利性的同时,使所有项目基于 NodeJS。我们还使得以 npm 包的形式共享组件比以往更加容易。
我们用 TypeScript 重写了 JavaScript API。即使您继续在项目中使用 JavaScript,您也会注意到由于这一变化,您的 IDE 能够提供更智能的建议。但您可能会错过一些新的炫酷功能,例如:
通过重写,我们创建了一个全面的测试套件并修复了大量的错误。可在我们的博客文章《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.currentReferenceSpaceType
和XR.referenceSpaceForType
- 增加了
XR
和WonderlandEngine.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.arSupported
和WonderlandEngine.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 上缺少自定义组件可能导致打包循环