見出し画像

Facemotion3dの.scnファイルインポート機能について

Facemotion3dアプリのバージョン1.1.1で、.scn形式の拡張子の読み込み機能が追加されました。あまり使われることの多くないマイナーな拡張子なため、実装の経緯と使用方法についてこの記事で説明をします。

.scn拡張子についての解説と実装経緯

iOSのアプリ開発では、SceneKitと呼ばれるiOS標準のビューポートのような仕組みを利用します。Facemotion3dで最初起動時に読み込まれるキャラクター等は、SceneKitを利用して表示されています。

SceneKit内で表示・読み込みが出来る拡張子は、私が知る限り、この記事の執筆時点で.scnと.usdzのみです。

ただし、この記事の執筆時点でUSDZファイルはBlendShapeのエクスポート等の機能が未完成なため、USDZファイルを使ってもBlendShapeを動かせません。

そのため、今回iOSアプリ内に.scnファイルを読み込む機能を追加しました。

.scnファイルの作成方法

.scnファイルを作成するのは多くのユーザーにとってはあまり簡単ではありません。しかし、MacユーザーであればXcodeというPCソフトウェアを使用することで作成することが出来ます。今回、Macユーザーの方からカスタムアバターをインポートしたいという要望をもらったのでこの機能を実装しました。

まず、.scnファイルを作成する前に、MayaやBlender等でDAE(COLLADA)ファイルをエクスポートします。dae自体が多くの人にとっては、あまり聞きなれない拡張子だと思いますが、多くのDCCツールに標準でエクスポート機能として搭載されています。

DAEファイルは、ライトをエクスポートすることも出来るため、ライトと一緒にエクスポートしてください。ライトをDAEファイル内に含めないと、アプリ内でオブジェクトが真っ暗になる可能性があります。

Blenderの場合は分かりませんが、Mayaでdaeファイルをエクスポートする前に、オブジェクトのピボットポイントをベイク処理しておくことをお勧めします。エクスポートし終わったら、テキストエディタ等でdaeファイルを開き、中身を一部書き換えます。テキストエディタで、「RELATIVE」と書かれている箇所を「NORMALIZED」に書き換えます。

その後、中身を書き換えたDAEファイルを、MacのXcodeというソフトに読み込み、.scnファイルに変換してください。

.scnファイルのインポート

実際にアプリ内に.scnファイルを読み込むには、アプリ内の十字マークになっているボタンを押して読み込みます。

画像1

オブジェクトのスケールや位置は、アプリ内のプログラムがオブジェクトのバウンディングボックスを調べて自動的に調整するため、作成時に特に意識する必要はありません。

アバターの詳細設定の項目から、頭のボーン名等を指定する箇所があるので、それを使って名前をつけてあげてください。

画像2

BlendShapeを動かす部分に関しては、シーン内のBlendShapeを持っているノードを全て走査して動かすため、特に名前を指定する必要はありません。Facemotion3dのBlendShapeの命名規則に従って作成するだけで問題ありません。.scnファイルに変換するとBlendShapeの名前の最後に「Mesh」という名前が追加されます。例えば、「eyeBlinkLeft」のBlendShapeを作成して、.scnに変換すると「eyeBlinkLeftMesh」が生成されます。しかし、この「Mesh」の名前はアプリ内で無視されるようになっています。

.scnファイルはテクスチャを内包していないため、アプリ内でテクスチャのパスをリンクし直す必要があります。アプリ内にテクスチャをリンクする機能があるので、それを使用してください。

画像3

使用できるマテリアルの種類

基本的には、phongとlambertとblinを使用します。Facemotion3dのデフォルトアバターは、phongシェーダのみで構成されています。

他の対応しているマテリアルはXcode上で確認してください。

VRMインポートとSCNインポートの違い

 Facemotion3dにはVRMインポートの機能も付いています。VRMは、Unity上でランタイムに読み込むには適していますがiOSアプリ内で読み込むためにはいくつかのデメリットがあります。iOSアプリ内でUnityを起動すると、デバイスの温度が上昇したり、音声を録音できなくなったりするデメリットがあります。

 そのため、長時間の配信に使用したり、音声を伴う録音などを持つFacemotion3dとはやや相性が悪いです。また、VRMのマテリアルは基本的にトゥーンシェーダーなので、それ以外を使いたい人には.scnを使うのが良いでしょう。

 また、アプリを開発している私自身がVRMアバターの作成方法を理解していないため、聞かれても答えられないという問題があります。scnファイルの作成方法なら聞かれても答えられるという意味でも実装を行いました。

この記事が気に入ったらサポートをしてみませんか?