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 Coordinates | UVをエクスポートするかどうか |
Scale | エクスポートするスケールを定義します. |
Export Textures | テクスチャをエクスポートするかどうか. |
Double Sided | 背面カリングのオンオフ.オンの場合ポリゴンの両面が表示されます. |
Export TRS Animations | 移動,回転,スケールアニメーションをエクスポートするかどうか |
Export Morph Animations | ポーズモーフ(またはPLA)をモーフとしてエクスポートするかどうか |
Bake Animations | アニメーションを毎フレームごとにベイクするかどうか |
Substeps | Bake Animationする際のフレーム間におけるサブステップサンプル数 |
Flip Z | Z軸の反転 |
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/