Apple Engine

Apple, iPhone, iOS, その周辺のことについて

iOS で SceneKit を試す(Swift 3) その59 - Blender で Collada (.dae) をエクスポートし Scene Editor で読み込む

とりあえず、手軽に試すため Blender でオブジェクトを DAE でエクスポートして、Scene Editor で読み込んでみる。

Apple 自体、Maya からエクスポートしている感じがしているので、Blender でエクスポートしたものが必ず上手く使えるわけではないので注意。
(確か、Blender の DAE のエクスポートは Secound Life 用だったはず)

 

Blender から DAE エクスポートし Scene Editor で読み込めるもの

  • ジオメトリ
  • マテリアル情報 / UV 情報
  • ボーン(Blender でいう Amarcher)
  • アニメーション(IK 不可)
  • カメラ
  • ライト

 

Scene Editor で読み込めないもの

  • デフォーム / IK
  • パーティクル
  • モーフィング

ファイルフォーマット的な問題でできない。

モーフィングは可能だが Blender の書き出し時に変形先の頂点情報がおかしくなる。

 

Blender から DAE をエクスポート

まず、Blender をダウンロード
起動するとこんな感じ。

f:id:x67x6fx74x6f:20170809121651p:plain

 

エクスポートの際、カメラとライトはいらないのと、新たらしいジオメトリを配置する。

シーン上のものを右クリックして選択、X キーで削除。

f:id:x67x6fx74x6f:20170809121718p:plain

 

Shift + A を押して Mesh > Monkey を選択

f:id:x67x6fx74x6f:20170809121837p:plain

 

お猿の顔のジオメトリが置かれる。
ポリゴンがカクカクなので、必要であれば Smooth を押す。

f:id:x67x6fx74x6f:20170809121739p:plain

 

準備完了。 File > Export > Collada でエクスポート。

f:id:x67x6fx74x6f:20170809121809p:plain

 

今回はジオメトリしかないので設定そのままで保存。

 

エクスポートされた DAE ファイル。

f:id:x67x6fx74x6f:20170809122014p:plain

 

Scene Editor で DAE をインポート

いつものように、Xcode で iOS の Game テンプレートを作成。

Project Navigator (Command + 1) にファイルをドラッグ&ドロップ。

f:id:x67x6fx74x6f:20170809122035p:plain

 

.dae を .scn に変換しても良いし、
.dae のジオメトリを Command + C でコピーし、
現状ある ship.scn にペースとしても良い。

f:id:x67x6fx74x6f:20170809122519p:plain

 

注意点

残念ながら Blender と SceneKit では座標系が異なる。
エクスポート時に軸の変換ができないため、読み込んだジオメトリを-90度回転させる必要がある。

 

うっかりミス

Blender 上でマテリアルを設定していないため、Scene Editor でからになっている。

Material Inspector (Command + Option + 5) から「+」ボタンで新規で作成してみる。

f:id:x67x6fx74x6f:20170809122923p:plain

 

コードで DAE を読み込む

オブジェクトデータは Xcode 上では Scene File と同様なので、普通に SCNScene で読み込める。

let scene = SCNScene(named: "art.scnassets/monkey.dae")!

 

SCNSceneSource でシーン内の一部、例えばアニメーションのみなどを読み込むことができるが、こちらの説明はまたいつか。

 

余談

Scene File は他の Scene File を参照することができる。
結構な量のものを配置したい場合はこちらを使用するのも良いかもしれない。

  f:id:x67x6fx74x6f:20170809122614p:plain

 

今回はここまで