glTFエクスポータープラグイン

glTFとは

Khronos Gropuが開発している汎用3Dフォーマットで,データの圧縮性に優れているため,特にWebGLやVR,ARに使われています.

フォーマットの詳細な仕様については開発元(Khronos)ページを参照ください.
https://www.khronos.org/gltf/

glTFエクスポーターとは

Cinema 4DからglTFファイルを書き出すためのプラグインで,Maxon LABSで配布しています.
https://labs.maxon.net/

※ glTFエクスポーターはR20で動作するプラグインです.
※ エクスポータは今後の開発で機能追加や仕様の変更がある可能性があります.

プラグインのインストール方法

通常,Cinema 4Dを起動して〈一般設定〉を開き,〈一般設定フォルダを開く〉から開いたディレクトリに「plugins」フォルダがあるので,ここにzipを展開したフォルダをコピーします.プラグインが正しく認識されれば,〈ファイル〉メニューの〈エクスポート〉にglTFの項目が表示されます.

エクスポートダイアログについて

Export Normalオフの場合はフラットシェーディングになります.
Export UV CoordinatesUVをエクスポートするかどうか
Scaleエクスポートするスケールを定義します.
Export Texturesテクスチャをエクスポートするかどうか.
Double Sided背面カリングのオンオフ.オンの場合ポリゴンの両面が表示されます.
Export TRS Animations移動,回転,スケールアニメーションをエクスポートするかどうか
Export Morph Animationsポーズモーフ(またはPLA)をモーフとしてエクスポートするかどうか
Bake Animationsアニメーションを毎フレームごとにベイクするかどうか
SubstepsBake Animationする際のフレーム間におけるサブステップサンプル数
Flip ZZ軸の反転
Export as Binary(.glb)バイナリファイルとしてエクスポートするかどうか

他,細かな仕様についてはプラグインのページをご一読ください.https://labs.maxon.net/?p=3360

ジオメトリの注意点

2019年8月時点においてはインスタンスオブジェクトはサポートしていません.

マテリアル

glTFはPBRマテリアルをサポートしています.反射チャンネルのパラメータが使用されますが,いくつかのパラメータに制限があります.Cinema 4Dのマルチ反射レイヤーはサポートしていません.単一の反射レイヤまたはスペキュラレイヤを使用してください.
カラーはカラーチャンネルがオンならそれを使用します.そうでない場合は反射レイヤのレイヤカラーが使用されます.

PBR メタリックとラフネス

メタリック反射レイヤの鏡面反射強度
ラフネス反射レイヤの表面粗さ

テクスチャ

ベースカラーテクスチャ反射レイヤのレイヤカラー,またはカラーチャンネルのテクスチャ
メタリックテクスチャ反射レイヤの鏡面反射強度のテクスチャ(グレースケールテクスチャ)
ラフネステクスチャ反射レイヤの表面粗さのテクスチャ(グレースケールテクスチ)
ノーマルマップ / バンプマップノーマル,バンプチャンネルまたは,反射レイヤのカスタムノーマルマップ,カスタムバンプマップのテクスチャ
オクルージョンマップ拡散チャンネルのテクスチャ
発光および発光テクスチャ発光チャンネルのテクスチャ
アルファアルファチャンネルのテクスチャ

エディタ

オブジェクトマネージャでオブジェクトを非表示にした場合.完全なアルファによる透過扱いとなります.

アニメーション

TRS(位置,回転,スケール)アニメーション

TRS(PSR)アニメーションの書き出しが可能です.ただし,オブジェクトは一つのメッシュになっていることが前提です.別オブジェクトに分かれている場合は,それぞれ別のglTFファイルとして書き出さなくてはなりません.

Porse Morphについて

ポーズモーフタグで設定したモーフアニメーションまたはPLA(ポイントレベルアニメーション)をモーフターゲットとして出力できます.

glTF自体はPLAアニメーションをサポートしていませんが,Cinema 4DでPLAアニメーションを付けたモデルをエクスポーターした場合,PLAをモーフターゲットとしてキーフレームを記録してエクスポートします.

このような仕様から,ポーズモーフタグとPLAアニメーションはどちらか一方をglTFのモーフとして出力できます.エクスポートダイアログのExport Morph Animationで指定できます.

スキンアニメーション

各ジョイントに設定されたPSR(位置,スケール,角度)トラックを出力します.コントローラにトラックがある場合,最終的にジョイントにベイクする必要があります(Bake Animationオプションを有効にします).また,glTFでは各頂点に影響できるウェイトのジョイント数は4つですので,それ以上のジョイントが影響している場合正しい結果で再現できません.

テクスチャアニメーション

現在のglTFではサポートされていません.また,UVアニメーションもサポートしていません.

テスト1: 実際にCinema 4DからglTFをエクスポート

前述したように,カラーは〈カラーチャンネル〉か,〈反射レイヤ〉の〈レイヤカラー〉が使用されるので,いずれかを設定しておきます.
ラフネスとメタルネス用にテクスチャを使用する場合は予め設定しておきます.〈反射レイヤ〉の〈表面粗さ〉,〈鏡面反射強度〉に読み込んでおきます.

〈法線〉,〈アルファ〉も必要に応じて読み込んでおきます.

シンプルなPBRティーポットを書き出してThree.jsで読み込んだ例https://maxonjapan.jp/gltf_tutorial/sample_1_teapot/index.html

テスト2: デフォームアニメーションをつけてみる

デフォーマによるアニメーションは予めPLAとしてベイクする必要があります.試しにスクワッシュ&ストレッチ,ツイスト,ジグルのアニメーションをベイクしてglTFで出力します.

タイムラインメニューの〈ファンクション〉→〈オブジェクトをベイク〉から〈PLA〉にチェックを入れて実行し,キーフレームに変換した状態でエクスポートします.エクスポートダイアログでは〈Export Morph Animation〉を「PLA」にセットしておきます.
実際に出力したファイルを読み込んみると,デフォーㇺアニメーションが確認できます.

シンプルなデフォームティーポット https://maxonjapan.jp/gltf_tutorial/sample_2_deformedteapot/index.html

テスト3: MoGraphやダイナミクスアニメーションの出力

MoGraphやダイナミクスはそのままではアニメーションを出力できないので,ここではAlembicにベイクしたものをエクスポートしています.
クローナーを選択し,オブジェクトマネージャの〈オブジェクト〉→〈Alembicとしてベイク〉を実行します.

この状態ではまだアニメーションはalembicファイルを参照しているので,すべてのalembicオブジェクトを〈オブジェクトをベイク〉を実行してキーフレームに変換します.すべてのフレームでキーを記録するため,〈トラックを整理〉は「オフ」にしておきます.

できたalembicオブジェクトには法線タグがあるので,必要に応じてオブジェクトを選択して〈ジオメトリ法線〉を「オフ」にして使用しないようにします.alembicオブジェクトをエクスポートします.

シンプルなエフェクタとダイナミクスのアニメーション https://maxonjapan.jp/gltf_tutorial/sample_3_dynamics/index.html

ARアプリ上でダイナミクスアニメーションを確認.

テスト4: キャラクターアニメーション

スキンデフォーマ(ジョイント)

スキンアニメーションはエクスポートダイアログのExport Skin Animationオプションを有効にします.ジョイント自体にトラックが必要ですので,IKゴールやコントローラを用いたアニメーションでは最終的に”ジョイント”にキーフレームをベイクして出力します (Bake Animationを有効にします)

また,”ジョイントのルートオブジェクトにヌルがある場合は削除”しておきます.

キャラクターのリグにIKを使う場合は,IKチェーンの影響下にあるジョイントの角度が180度を越えないようなジョイント軸方向でセットした方が安全です.THREE.jsでglTFを読み込むと,反転したフレームで軸が一回転してしまいました.

角度の符号が反転する様子
角度の符号が反転した場合,ジョイントが一回転してしまう

上記の理由から,FKの場合は180度以上になっても特に問題は起こりませんが,IKの時は注意が必要です.角度値の符号が反転しないようにIKを組んでアニメーションを書き出したものは次のようになります.

https://maxonjapan.jp/gltf_tutorial/sample_4_character/index.html

MixamoからダウンロードしてインポートしたデータはそのままglTFへ出力しても問題なさそうです.
https://www.maxonjapan.jp/gltf_tutorial/sample_5_mixamo/index.html

glTFビューワー

なお,書き出したglTFを手っ取り早く確認したい場合はビューワーがあるので,下記URLへアクセスしてglTFファイルどドラッグ&ドロップしても良いです.
https://gltf-viewer.donmccurdy.com/