10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RealityKitで動画テクスチャを設定する

Last updated at Posted at 2020-07-29

WWDC2020で Video materials が発表されました。こちらの動画 "What's new in RealityKit" で映像付きで解説されています。RealityKitでオブジェクトに動画を設定し再生できる新機能です。

この機能だけ試したくなりましたが、RealityKitで新規プロジェクト作成すると Experience.rcproject を読み込んで別シーンを表示する構成で簡単には試せません。そこでシンプルに平面を配置し動画を流すまでの部分を作成してみました。

output2.gif

AR空間に配置されたPlaneで自動的に動画を再生します。
ソースコードは こちら に置いています。

環境

  • Xcode 12.0 beta 2
  • iPadOS 14 beta
  • iPad Pro 11 inch (第2世代)

プロジェクト作成

今回は Content TechnologyRealityKit で、InterfaceStoryboardで作成しました。

スクリーンショット 2020-07-29 3.22.30.png

video001.mp4 をプロジェクトに追加しておきます。

output.gif

実装

ソース全体

ViewController.swift

import UIKit
import RealityKit
import AVFoundation

class ViewController: UIViewController {
    
    @IBOutlet private var arView: ARView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // ① Anchorの追加
        let anchor = AnchorEntity()
        arView.scene.anchors.append(anchor)

        // ② Playerの生成と動画再生
        let asset = AVURLAsset(url: Bundle.main.url(forResource: "video001", withExtension: "mp4")!)
        let playerItem = AVPlayerItem(asset: asset)
        let player = AVPlayer()
        player.replaceCurrentItem(with: playerItem)
        player.play()

        // ③ Plane生成とVideoMaterial設定
        let planeMesh = MeshResource.generatePlane(width: 0.8, height: 0.45)
        let material = VideoMaterial(avPlayer: player)
        let planeModel = ModelEntity(mesh: planeMesh, materials: [material])
        planeModel.position = SIMD3<Float>(0.0, 0.0, -1.0)
        anchor.addChild(planeModel)
    }
}

① Anchorの追加

ARViewに対してAnchorを追加。

② Playerの生成と動画再生

再生対象の動画からAVPlayerItemを生成。AVPlayerに設定しplay()で再生開始。

③ Plane生成とVideoMaterial設定

MeshResource.generatePlaneでPlaneを生成。数値は現実世界でメートルです。これにより「0.8m x 0.45m の横長の板」が生成されます。VideoMaterialを生成後、ModelEntityEntity生成。positionはzに-1.0を設定し「1メートル手前」を設定。anchorにaddChildで追加。

この状態で起動すると

output2.gif

無事再生されました!

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?