glTFインポートでスキンジョイントの読み込み方式を選択する

  • エクスポート用のシーンの解説
  • スケルトンのルートをパートとして読み込む
  • スケルトンのルートをボーンとして読み込む
  • ジョイントノード以下のノードをパートとして読み込む
  • Shade3DとglTFとのスキンの扱いの違い
Shade3D Ver.26.2より、glTFのインポート時にglTFファイルのスキン情報内にある「スケルトンノード(スキンのジョイントノードのルート)」やスキンジョイント以下のノードのジョイント化の要不要を選択できるようになりました。

ここでは、サンプルシーンを使用したこれらのオン、オフを確認するための手順を紹介します。
※glTFはShade3D Professional以上の製品に登載された機能です。

1.最初にエクスポートするためのシーンを用意する

1-1.使用するシーン

glTFfファイルとしてエクスポートするためのシーンを用意します。ここでは「ボーン」によるスケルトン(ジョイントの階層構造)2つと、スキンを適用するためのポリゴンメッシュを配置したシーンを用意しました。このサンプルシーン「gltf_import_skeleton_sample.shd」はこちらよりダウンロードすることができます。

1-2.シーンの構成

A.スキンをバインドする形状をポリゴンメッシュで作成しています。

B.スケルトンは3つ作成しました。
2つはポリゴンメッシュの2つの突起に「ボーン」を3つ直線上に配置したものをそれぞれ配置。「Right1~4」と「Left1~4」に名称設定しています。
1つは土台の位置に「ボーン」を1つ配置。「Base1~2」に名称設定しています。
これら3つのスケルトンを「パートA」パートにまとめています。

※「ボーン」についてはこちらの記事をご覧ください。

C.「スキン」は「頂点ブレンド」でポリゴンメッシュの2つの突起部分にスケルトン「Right」と「Left」をバインド。残りの土台部分にスケルトン「base」をバインドしています。

※スキンのバインド(割り当て)についてはこちらの記事をご覧ください。
※バインドするジョイントの指定についてはこちらの記事をご覧ください。
※Shade3DとglTFでのスキンの扱いの違いについてはこちらの記事をご覧ください。

2.glTF形式でエクスポートする

サンプルシーンをglTF形式でエクスポートします。
A.メインメニュー > 「ファイル」 > 「エクスポート」 > 「glTF(gltf/glb)…」から「glTF Export」ダイアログボックスを開きます。
「出力」を「全ての形状」、「ボーンとスキンを出力」を「オン」にして「OK」します。

B.表示されるダイアログボックスで任意の名前を付けて保存します。ここでは「gltf_skeleton」としました。

3.「スケルトンのルートをボーンとして読み込む」をオフでインポートする

「スケルトンのルートをボーンとして読み込む」を「オフ」
「ジョイントノード以下のノードもボーンとして読み込む」を「オン」でインポートします。

3-1.新規シーンを作成する

メインメニュー > 「ファイル」 > 「新規シーン」で新しいシーンを作成します。

3-2.エクスポートしたglTFファイルをインポートする

A.メインメニュー」 > 「ファイル」 > 「インポート」 > 「glTF(gltf/glb)…」で表示されるダイアログボックスから保存したglTFファイルを選択します。

B.表示される「glTF Import」ダイアログボックスで「スケルトンのルートをボーンとして読み込む」を「オフ」、「ジョイントノード以下のノードもボーンとして読み込む」を「オン」に設定して「OK」でインポートします。

「ブラウザ」で結果を確認する

「ブラウザ」では「ルートパート」の子にファイル名「gltf_skeleton.glb」パートがあり、その子の「ルートパート」以下の構成は、エクスポートしたサンプルシーンの「ルートパート」以下と同じものとなります。
インポートしたシーンをglTF形式でエクスポートする必要がない場合や、glTFのスキンの制約に合わせる必要がない場合などにこの設定を使用できます。
※glTFでは「スケルトンノードはすべてのジョイントノードの祖先ノード(自身を含む)である必要がある」という制約があります。

4.「スケルトンのルートをボーンとして読み込む」をオンでインポートする

「スケルトンのルートをボーンとして読み込む」を「オン」
「ジョイントノード以下のノードもボーンとして読み込む」を「オン」でインポートします。
A.「3-1」の手順で新規シーンを作成し、「3-2」の A、Bの手順で「glTF Import」ダイアログボックスを開きます。
「スケルトンのルートをボーンとして読み込む」を「オン」、「ジョイントノード以下のノードもボーンとして読み込む」を「オン」に設定して「OK」でインポートします。

「ブラウザ」で結果を確認する

「ブラウザ」ではサンプルシーンでの「パートA」パートが「ボーン」としてインポートされているのが確認できます。
インポートしたシーンをglTFのスキンの制約に合わせたglTF形式でエクスポートする必要がある場合にこの設定を使用します。
※glTFの「スケルトンノードはすべてのジョイントノードの祖先ノード(自身を含む)である必要がある」という制約を満たすためにルートとなる「パート」を「ボーン」として読み込んでいます。

5.「ジョイントノード以下のノードもボーンとして読み込む」をオフでインポートする

「スケルトンのルートをボーンとして読み込む」を「オフ」
「ジョイントノード以下のノードもボーンとして読み込む」を「オフ」でインポートします。
A.「3-1」の手順で新規シーンを作成し、「3-2」の A、Bの手順で「glTF Import」ダイアログボックスを開きます。
「スケルトンのルートをボーンとして読み込む」を「オフ」、「ジョイントノード以下のノードもボーンとして読み込む」を「オフ」に設定して「OK」でインポートします。

「ブラウザ」で結果を確認する

「ブラウザ」ではサンプルシーンでのジョイント構造の末端である「ボーンR4(スタンダード)」と「ボーンL4(スタンダード)」が「パート」としてインポートされているのが確認できます。
glTFではスキンで対応付け(バインド)されていないジョイントはパートとして扱われるため、エクスポート時に「パート」に変換されているためこの設定がオフの場合は、そのまま「パート」として読み込まれます。
※Shade3Dでジョイントの末端にさらにボーンを追加する必要がある場合はこの設定を「オン」にして「ボーン」としてインポートします。

6.Shade3DとglTFのスキンの扱いの違い

Shade3Dではスキン割り当ての無い頂点を混在できますが、glTFでは混在できません。そのためそのようなシーンはエクスポート時にそのポリゴンメッシュの親パートをジョイントにして割り当ての無い頂点に「1.0」でバインドし、全ての頂点にスキンが割り当てられているシーンに変換されます。
サンプルシーンから「Base」のスケルトンを削除してエクスポートし、「スケルトンのルートをボーンとして読み込む」をオフでインポートすると「ルートパート」がジョイントに変換されているのが確認できます。

「スケルトンのルートをボーンとして読み込む」オフ / 「ジョイントノード以下のノードもボーンとして読み込む」オフ

glTFに変換されたままの構成でインポートされます。「ルートパート」がボーンとなり、「パートA」はパートのまま、「Right4」と「Left4」はパートに変換されています。

「スケルトンのルートをボーンとして読み込む」オン / 「ジョイントノード以下のノードもボーンとして読み込む」オフ

すでに「ルートパート」がスケルトンのルートとして変換されているのでオフの構成と変わりありません。

「スケルトンのルートをボーンとして読み込む」オフ / 「ジョイントノード以下のノードもボーンとして読み込む」オン

「パートA」もジョイントノード以下のノードとして「Right4」、「Left4」と同様にボーンに変換されます。

カテゴリー: 未分類