3
3

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.

[Swift]3DモデルをSCNSceneに変換する方法2つ

Last updated at Posted at 2020-09-16

Swiftで3DモデルをSCNSceneに変換するにはModelIOを経由する方法とscnファイルを作成する方法の2つがあります。
片方を実装するともう片方を忘れることが多くてその度に調べることになっているので、備忘録として残しておきます。

前提条件は以下の通りです。

  • Swift 5
  • Xcode 11.7
  • iOS 13.7

#ModelIOを経由する方法
ModelIOのMDLAssetを使い、そこからSCNSceneを読み込みます。
最初にModelIOをimportしておきましょう。注意点としては本体ではなくSceneKitの方にあるものをimportすることです。

example.swift
import SceneKit.ModelIO

変換したい3Dモデルはプロジェクトに追加しておきます。
階層はどこでもいいですが複数の3Dモデルを使うのであればちゃんと1つのディレクトリにまとめておく方がいいでしょう。
今回は"hoge.usdz"という3Dモデルを追加しているものとしています。
あとはBundleから3DモデルのURLを取得して、そのURLをもとにMDLAssetを作成し、作成したMDLAssetからSCNSceneに変換します。

example.swift
guard let url = Bundle.main.url(forResource: "hoge", withExtension: "usdz") else { return }
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)

URL取得時のforResourceにはファイル名を、withExtensionには拡張子を指定します。
今回はusdz形式ですがobjでもgltfでも大丈夫です。

#scnファイルを作成する方法
コードで実装せず最初からscnファイルを作成しておく方法です。
まずはModelIOを経由する方法と同じように3Dモデルをプロジェクトに追加します。
その後追加した3Dモデルを選択した状態で、Xcode上部のメニューにあるEditorから Convert to SceneKit file format (.scn)を実行します。
pic.png
するとプロジェクトに3Dモデルのファイルと同名の.scnファイルが追加されます。
例)hoge.usdz → hoge.scn
このscnファイルをSCNSceneで直接読み込みます。

example.swift
let scene = SCNScene(named: "hoge.scn")

どちらの方法でも難しいところはありませんが、ModelIOをimportしたりMDLAssetを作成する手間を考えると、scnファイルを作成する方法が便利ではないかと思います。

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?