メインコンテンツまでスキップ

Bone

3Dキャラクターやオブジェクトに動きをつけるための「骨組み」として機能する内部構造

なに?

ボーン(Bone: 骨)は、3DCGにおいてアバターなどの3Dキャラクターや物体のアニメーションを作成する際に使用される、仮想的な「骨」を指します。仮想的なものなので、VRChat上では普段は目には見えません。ボーンはキャラクターやオブジェクト内部に配置され、物体の形状を変形させて動かす基盤となります。3Dモデルの表面に影響を与えることで、キャラクターの歩行、手足の動き、髪のなびきを自然に表現することが可能になります。

たとえば、3Dアニメーションで人間のキャラクターを動かす場合、腕や脚、首などの部位にボーンを配置し、これを動かすことでキャラクター全体が動くように設定します。ボーンの階層構造により、リアルな動きが再現されます。

VRChat向けアバターの場合、ボーンの階層構造はUnityのヒューマノイドアバター1 として定義されているボーンの一覧2 を基準に作られていることがほとんどです。その理由は、Unityのリグ設定3 では3Dモデルのボーン構造を自動で認識してくれる機能がありますが、要件を満たすためにはボーン構造をヒューマノイドアバターで定義されている通りにする必要があるからです。

以下に、標準的なUnityヒューマノイドアバターの要件を満たすボーン構造の例を示します。(8階層以降(各指のボーン)は省略)。この構造は、Unityのヒエラルキーウィンドウで皆さんが普段使うアバターの「Armature」以下の構造を辿ってみると、おおむね同じようになっていることが分かるかと思います。ちなみに、購入したアバターのファイル一式にFBXファイルが含まれている場合、Blender等のモデリングツールでファイルを読み込むことでも以下の構造になっていることが確認できるので、興味のある方はやってみてください。

0階層1階層2階層3階層4階層5階層6階層7階層説明
Armatureこれ自体は「フォルダ」のようなものでボーンではない
Hipsお尻のボーン
Spine背骨の第一ボーン
Chest胸のボーン
Neck首のボーン
Head頭のボーン
LeftEye左目のボーン
RightEye右目のボーン
Shoulder_L左肩のボーン
UpperArm_L左上腕のボーン
LowerArm_L左ひじのボーン
Hand_L左手のボーン
以下省略(左手の指のボーンが各指3個ずつ、計15個)
Shoulder_R右肩のボーン
UpperArm_R右上腕のボーン
LowerArm_R右ひじのボーン
Hand_R右手のボーン
以下省略(右手の指のボーンが各指3個ずつ、計15個)
UpperLeg_L左太もものボーン
LowerLeg_L左ひざのボーン
Foot_L左足首のボーン
Toe_L左つま先のボーン
UpperLeg_R右太もものボーン
LowerLeg_R右ひざのボーン
Foot_R右足首のボーン
Toe_R右つま先のボーン

人体の骨の数は実際には206個ですが、Unityの標準的な人体ボーンは上記の通り50個程度とかなり少なくなっています。あくまでも外部からの見た目として「それらしい動き」を表現するためのものであり、むやみにボーンを増やすことは負荷の上昇や、単純に制作コストが膨大になるからです。

なお、ボーンとアバターの位置関係の対応については、以下のハオランくん4 のボーン構造の図を参考にしてください。

ハオラン君の骨

また、VRCSDKにおけるPhysBoneは名前こそ「Bone」が含まれてますがPhysBone=本記事のボーン、ではありません。本記事のボーンとは異なる概念なので注意が必要です。

PhysBoneはコンポーネントの一種ですが、ボーンは相当するコンポーネントが存在しないことに注意してください。より詳しくはUnityにおけるBoneの表現についてを参照してください。

余談ですが、ヒューマノイドアバターで定義されているボーンの名前を他のオブジェクトで使うと不具合が生じるおそれがあります5 。たとえば、アバターの顔のメッシュにあたるオブジェクトの名前を頭部のパーツだから、と「Head」にするとHeadボーンと名前の競合が起こり、リグ設定時にエラーとなります。

更に余談ですが、大抵のアバターにおいて顔のオブジェクトが「Body」、体のオブジェクトが「Body_Base」という名前が付けられる慣習があるのは、この競合によるエラーを避けるためと、アバターを所謂ダンスワールドで踊らせるためには顔のオブジェクトの名称を「Body」にしないとうまく認識ができないためです。

なぜ?

ボーンは、CGキャラクターの動きや姿勢を効率よく制御するために使われる技術です。3DCGの初期から、リアルな動きを再現するためにキャラクター内部にボーンを配置し、各部位の位置や角度を計算して動かす手法が使われてきました。ボーンを使うと、個々の頂点を手動で動かす必要がなくなり、スムーズで自然な動きを表現できます。

具体例として、3Dゲームではプレイヤーキャラクターのアニメーションにボーンが多く使われます。ジャンプや走行といった動きの際に、ボーンによって関節が自然に動くようになり、動きがリアルに見えるため、ゲーム体験がより魅力的になります。

Footnotes

  1. https://docs.unity3d.com/ja/2022.3/Manual/AvatarCreationandSetup.html

  2. https://docs.unity3d.com/ja/2022.3/ScriptReference/HumanBodyBones.html

  3. https://docs.unity3d.com/ja/2022.3/Manual/ConfiguringtheAvatar.html

  4. https://booth.pm/ja/items/3818504

  5. https://signyamo.blog/unity_humanoid_error/