A-Frame 是一个框架,它简化了为 Web 构建虚拟现实 (VR) 内容的过程。它提供以下功能:
- 使用声明性 HTML 构建 3D 场景的能力。
- 在多个平台上开箱即用的响应式 WebVR 场景。
- 一个 实体-组件-系统模式,它促进了可组合性和可扩展性。
经过三个月令人愉快的繁忙开发工作,我们很自豪地宣布 A-Frame 版本 0.2.0 发布。此版本的主题是可扩展性。为了让 WebVR 在 VR 仍然被封闭的原生生态系统主导的时期快速发展,A-Frame 需要支持开放式实验和快速迭代。A-Frame 的固有可扩展性赋予开发者无许可创新权,使其成为 VR 版本的 可扩展 Web 宣言。
*如果你不熟悉 A-Frame,请阅读 Mozilla Hacks 上 A-Frame 的先前介绍。
自发布以来
A-Frame 通过在 Web 上实现沉浸式 3D 内容创建的民主化获得了压倒性的积极反响。从数字上看:
- 在 A-Frame GitHub 存储库 上获得了超过 1500 个星标、25 位贡献者和 550 次提交。
- 超过 470 人加入了 A-Frame 社区 Slack 频道,以提出问题、展示项目,以及一般社交。
- 在 awesome-aframe 存储库 上列出的个人创建了超过 100 个很棒的作品。
- 在 Made With A-Frame Tumblr 上展示了超过 50 个项目。
社区成员将 A-Frame 用于一些有趣的用例:
- Donovan Kraeker(DrawVR 的成员)构建了 多个 VR 商店,以增强他现有的电子商务属性。
- Ryan James(华盛顿大学的博士生和研究员)已经 将虚拟现实应用于医学教育。
- Don McCurdy(Google 的软件工程师)已经重新创建了热门独立游戏 Monument Valley 的场景。
A-Frame 还获得了高知名度的使用:
- 大赦国际英国分部 与设计公司 Junior 合作创建了 360 Syria,这是一个将观众带到叙利亚阿勒颇被围困城市以见证桶炸弹袭击其公民造成的破坏的体验。
- 华盛顿邮报 发布了火星:互动旅程,将人们带到红色星球表面,了解太空探索计划。
A-Frame 0.2.0 中改进的可扩展性
A-Frame 将实体-组件-系统 模式带入了 HTML。场景 中的所有内容都是一个 实体。实体是一个通用的占位符对象,它本身不会执行任何操作,也不会渲染任何内容。组件是可重用数据和逻辑的容器;当插入到实体中时,组件会为它们提供外观、行为和功能。开发者可以编写组件来执行他们想要的任何操作,直接访问 three.js,然后与社区共享这些组件。在 A-Frame 中可以实现的所有内容都可以在 three.js 和 WebGL 中实现。
自 A-Frame 首次发布以来,我们一直在努力改进 组件 API。我们经历了创建组件、发现 API 中的局限性,然后编写补丁来改进 A-Frame 的循环。通过使用我们自己的框架,我们能够发现扩展 A-Frame 时遇到的障碍:
- 组件 API 通过属性类型、模式配置以及更多生命周期方法(
pause
、play
、tick
)得到了增强。 - 基元(诸如
<a-sphere>
之类的便利元素)能够接受组件。
此外,我们为开发者提供了更多用于深入研究的逃生通道。他们现在可以:
- 为更灵活的组件 API 定义自定义属性类型。
- 注册 GLSL 着色器或 three.js 材质。
- 注册基元。
- 注册系统以向组件提供全局范围和服务。
阅读 完整的 0.2.0 版本发行说明 以获取更多详细信息。
可扩展 VR Web 的体现
可扩展 Web 鼓励想法和 API 之间的良性竞争。只有在新兴想法和 API 成熟之后,才应该将其标准化。为了让 WebVR 取得成功,必须遵循这种理念,否则将再次出现 Web 落后于时代的局面,届时所有筹码都被吃掉了。A-Frame 就是这些理念的体现。
如前所述,由于 A-Frame 是建立在实体-组件-系统模式之上的,开发者可以编写、共享和插入组件,以扩展新功能。如果某个功能尚不存在或未达到要求,社区就可以着手开发。生态系统已经包含社区构建的组件,这些组件能够支持游戏手柄控制、语音识别和物理模拟。借助这种短期创新方案,开发者可以快速尝试想法,以帮助推动 A-Frame 以及 WebVR 的发展。
例如,Don McCurdy 在他的 A-Frame playground 存储库中迭代了标准的 A-Frame 组件,而 A-Frame 核心团队则致力于支持可扩展性。在此基础上,他重构并增强了 A-Frame 的整个控件系统和物理系统。在这些组件得到验证后,我们将它们上游集成到标准 A-Frame 组件集合中。
社区中的一些人一直在寻找一种方法,将文本和 HTML 元素作为纹理渲染到 A-Frame 中。学生 Max Krieger 挺身而出,编写了组件来支持使用 <canvas>
元素作为纹理以及支持文本换行。
此外,Ben Nolan(SceneVR 的成员)最近移植了他的客户端代码以使用 A-Frame。他正在开发能够支持交互式多用户体验的组件,这是 A-Frame 核心团队今年晚些时候的目标。更重要的是,Ben 正在开发一个用于 A-Frame 场景的 所见即所得 编辑器。我们也在开发一个编辑器。
社区支持功能并共享组件的这种良性循环,继续成为 WebVR 生态系统的巨大福音。我们没有在闭门造车,而是构建了 A-Frame,将整个 Web 社区纳入到这项工作中。我们将一起尝试很多事情,然后逐渐专注于那些有效的事情。
展望未来
我们将致力于构建更多演示、改进交互性和提高性能。一旦 polyfill 稳定下来,我们将快速在 A-Frame 中发布 WebVR 1.0 支持。
关于 Kevin Ngo
Kevin 是 Mozilla 的虚拟现实开发者,也是 A-Frame(一个开源 WebVR 框架)的核心开发者。他的 Twitter 账号是 @ngokevin_。
2 条评论