Enhance your spatial computing app with RealityKit
Spatial Computing 进阶 20m

用 RealityKit 增强你的空间计算 app

Enhance your spatial computing app with RealityKit

2023年6月5日

在 Apple 官方观看视频

一句话判断

RealityKit 在空间计算平台上加入了 Attachment、VideoPlayer、Portal 和粒子系统,能做的事远超你想象。

这场 Session 讲了什么

RealityKit 在空间计算平台上获得了大量新功能。Session 以一个太阳系探索 app 为例,逐步展示了这些新特性的使用方式。

RealityView Attachment 允许你将 SwiftUI 视图嵌入到 RealityKit 场景中。通过 attachments view builder 提供视图,在 make closure 中通过 entity(for:) 获取对应的实体,然后像添加普通实体一样将其放置在场景中。

VideoPlayerComponent 是一个全新的组件类型,用于在 3D 场景中嵌入视频播放。它自动根据视频宽高比生成矩形 mesh,支持所有 AVFoundation 支持的格式,包括 2D 视频和 3D MV-HEVC 视频。视频默认 1 米高,通过缩放实体调整大小。

Portal(传送门)可以打开一扇通往另一个世界的窗户。Particle Emitter API 为场景添加视觉特效。Anchor 功能将 3D 内容附着到现实世界的位置(如墙面)。

值得深挖的点

Attachment 的数据流设计值得注意。SwiftUI 视图在 attachments view builder 中声明,带上 tag 标识符。然后在 RealityView 的 make/update closure 中,通过 entity(for:) 获取对应的 ViewAttachmentEntity 实体。update closure 在 SwiftUI 视图状态变化时被调用,允许你动态更新实体。

VideoPlayerComponent 的 mesh 自动生成行为与 SwiftUI 的 VideoPlayer 和 Core Animation 的 AVPlayerLayer 类似。但因为 RealityKit 是 3D 框架,视频以带有 mesh 的实体形式存在,可以在 3D 空间中自由移动和定位。

代码片段

// Attachment - 将 SwiftUI 视图嵌入 3D 场景
RealityView { content, attachments in
    let earthEntity = try await Entity(named: "Earth")
    content.add(earthEntity)
    
    if let label = attachments.entity(for: "earth_label") {
        earthEntity.addChild(label)
        label.position = [0, -0.2, 0]
    }
} attachments: {
    Text("地球")
        .tag("earth_label")
}

// VideoPlayerComponent - 3D 场景中的视频播放
let player = AVPlayer()
let videoComponent = VideoPlayerComponent(avPlayer: player)
entity.components.set(videoComponent)
entity.scale *= 0.4 // 缩放到 40 厘米高
player.currentItem = AVPlayerItem(url: videoURL)
player.play()

最佳实践

  • 使用 Attachment 为 3D 内容添加标签和说明
  • VideoPlayerComponent 默认高度 1 米,记得缩放到合适大小
  • 使用 glassBackgroundEffect 为 Attachment 添加毛玻璃背景
  • Portal 适合创建通往另一个沉浸式世界的入口
  • 利用 fromToByAnimation 为视频实体添加淡入效果

还有什么值得关注

  • 参考 “Build spatial experiences with RealityKit” 了解基础概念
  • “Work with Reality Composer Pro content in Xcode” 提供更详细的 Attachment 用法
  • “Deliver video content for spatial experiences” 讲解 3D 视频内容制作
  • Anchor 可以将 3D 内容附着到现实世界的墙面等位置
WWDC 2023