💻

Blenderで作成したUSDZアニメーションをvisionOSアプリで再生してみる

2024/02/06に公開

概要

BlenderでUSDZがサポートされていると情報を見かけたこともあり、Blenderで作成したアニメーションを含むUSDZを、visionOSのアプリで動作させることを試してみました。

https://wiki.blender.org/wiki/Reference/Release_Notes/3.5/Pipeline_Assets_IO

1. 【Blender】3Dアニメーション作成

既存の作成されている3Dモデルを活用して、アニメーションはシンプルにキーフレームを打って作成します。

blender0.png

よしなに簡単なアニメーションつけます。こんな感じです。

movie.gif

2. 【Blender】USDZでExport

次にUSDZでExportしていきます。

上部メニューから[File] -> [Export] -> [Universal Scene Description(.usd*)]と選択してください。

blender1.png

選択するとメニューが表示されます。ただ、初期状態だと拡張子がusdcになっています。

blender2.png

USDZでExportするには拡張子のusdcusdzに書き換えます。また、今回はアニメーションを含めたいので、右側のメニューから[Animation]にチェックしてください。

そして、右下の[Export USD]ボタンを押下するとUSDZでモデルがExportされます。

blender3.png

USDZでのExport完了です。

blender4.png

https://developer.apple.com/documentation/realitykit/loading-entities-from-a-file

3. 【Xcode】USDZをImport&表示

次に、USDZの3DモデルをvisionOSのアプリに入れていきます。

今回は新規のXcodeプロジェクトに入れて試します。
visionOSを選択し、よしなにXcodeプロジェクトを作成します。

Demo_CoreLocation_2.png

xcode1.png

そして、先ほどExportした3Dモデルをドラッグ&ドロップしてXcodeプロジェクトに入れます。

xcode3.png

ファイルを追加する時にオプション選択があるので以下を設定します。

  • Copy items if neededにチェックON
  • Create groupsを選択

右下の[Finish]ボタンを押下するとImportされます。

xcode4.png

xcode5.png

Importしたモデルをアプリで表示するために、
ContentViewのスクリプト処理を以下のようにします。

ContentView.swift
import SwiftUI
import RealityKit
import RealityKitContent

struct ContentView: View {
    var body: some View {
        Model3D(named:"mesonlogo") // インポートしたUSDZのファイル名を設定
    }
}

#Preview(windowStyle: .automatic) {
    ContentView()
}

すると、シンプルにUSDZの3Dモデルを表示することができました。

xcodex6.png

4. 【Xcode】USDZのアニメーション再生

最後に、簡単にですがアニメーション再生するために、
ContentViewのスクリプト処理を以下のように変更します。

ContentView.swift

import SwiftUI
import RealityKit
import RealityKitContent

struct ContentView: View {
    var body: some View {
        RealityView { content in
            if let mesonlogo = try? await Entity(named: "mesonlogo"),
               let animation = mesonlogo.availableAnimations.first {
                
                // setting posision / size
                mesonlogo.position.y = -0.1 // pivot考慮
                mesonlogo.scale *= 0.75
                
                // start animation
                mesonlogo.playAnimation(animation)
                
                content.add(mesonlogo)
            }
       }
    }
}

#Preview(windowStyle: .automatic) {
    ContentView()
}

これでアニメーションが動きました。

movie2.gif

アニメーションを再生するスクリプトは、WWDC2023セッションの中で紹介もされていたものを参考にしました。
https://developer.apple.com/videos/play/wwdc2023/10080/

おわりに

今回は、Blenderで作成したアニメーション付きUSDZを、visionOSアプリで表示&アニメーション再生を試してみました。

3Dモデルのアニメーションとしても、アプリの動作としても非常にシンプルに試しましたが、インタラクションによるアニメーション再生や、シェイプキーなど活用した場合も扱えるのか等、気になることも出てきたので引き続き試していこうと思います。

また、OpenUSDの動向も気になるところですね。
https://www.moguravr.com/openusd/

書いた人

AND

安藤 正仁

C向けの自社プロダクトを開発・運営するベンチャーにて、Webエンジニアとしてバックエンド・フロントエンド・インフラも少々と様々な領域を経験。その後、XRを扱う企業にて、WebバーチャルファションショーやスマホARなど、XRのアプリ開発をいくつか経験。フリーランスになりMESONで業務委託としての携わりを経て2022年7月に入社。

X

MESON Works

MESONの制作実績一覧もあります。ご興味ある方はぜひ見てみてください。

https://meson.tokyo/works

MESON Works

Discussion