参考ページ:

環境:

  • macOS Catalina v10.15.3
  • Xcode v11.3
  • VRoid Studio v0.8.3
  • Blender v2.82

1. VRoidStudioのモデルをBlenderに移動する

別の記事で書いています。コチラをご参照ください。

2. Blenderからモデルを出力する

  1. ファイル → エクスポート → Collada(デフォルト)(.dae)

Collada形式とは”COLLAborative Design Activity” の略。
読み方はコラーダ。らしいです。

3. 出力したデータの確認

  1. 出力ファイルが.daeの拡張子で出力できているか
  2. プレビューした時にグレー一色のモデルが表示されるか

Macのプレビューでモデルが表示されていない場合、おそらく出力に失敗しています。
(私は自分で追加変更したモデルがこの状態で少し悩みました)

4. Xcodeにモデルを追加する

  1. XcodeでSceneKitのプロジェクトを作成する(※1)
  2. ドラッグ&ドロップで画像の位置に.daeファイルを追加する
  3. 追加した.daeファイルを選択して、Editor → Convert to SceneKit file format (.scn)を実行する
  4. .scnファイルが出来上がります。Xcodeではこれを利用します。

※1: ここではプロジェクトの作成手順は載せません。
もしわからない方がいれば、上部の参考ページにやり方が載っていますのでそちらをご参照ください。

5. 実行してみる

// 書き換え
let scene = SCNScene(named: "art.scnassets/character.scn")!

// 以下はサンプルファイルのオブジェクトのためコメントアウト
// let ship = scene.rootNode.childNode(withName: "setar-001", recursively: true)!
// ship.runAction(SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: 2, z: 0, duration: 1)))

表示されました。
でも残念ながらテクスチャなどが反映されていません。

6. マテリアルの設定

  1. VRoidStudioからモデルをエクスポートした時に作成される「tex_******」の様なフォルダをXcodeに追加する。
  2. モデルのマテリアル情報プロパティに該当テクスチャを設定する

シェーディングタイプについて
Appleのドキュメントを見ると6種類のタイプがある。
テクスチャの種類からすると、blinn、phong、physicallyBasedのどれかになると思う。

パラメーターについて
テクスチャ名がパラメーター名に大体一致しているため、それを目安に設定する。
ここで詳しく書くと長くなるので、まとめる場合はまた別記事にします。

あ、あれ、くすんでる?影がさしているのが原因です。
影は必要ないので、光源を削除します。

// 以下の光源を追加しているコードを削除します。
//        // create and add a light to the scene
//        let lightNode = SCNNode()
//        lightNode.light = SCNLight()
//        lightNode.light!.type = .omni
//        lightNode.position = SCNVector3(x: 0, y: 10, z: 10)
//        scene.rootNode.addChildNode(lightNode)
//
//        // create and add an ambient light to the scene
//        let ambientLightNode = SCNNode()
//        ambientLightNode.light = SCNLight()
//        ambientLightNode.light!.type = .ambient
//        ambientLightNode.light!.color = UIColor.darkGray
//        scene.rootNode.addChildNode(ambientLightNode)

完成

無事Xcodeで動かすことができました。
それにしてもVRoidStudioのモデルが綺麗すぎる。