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はコンポーネントの一種ですが、ボーンは相当するコンポーネントが存在しないことに注意してください。
余談ですが、ヒューマノイドアバターで定義されているボーンの名前を他のオブジェクトで使うと不具合が生じるおそれがあります5 。たとえば、アバターの顔のメッシュにあたるオブジェクトの名前を頭部のパーツだから、と「Head」にするとHeadボーンと名前の競合が起こり、リグ設定時にエラーとなります。
更に余談ですが、大抵のアバターにおいて顔のオブジェクトが「Body」、体のオブジェクトが「Body_Base」という名前が付けられる慣習があるのは、この競合によるエラーを避けるためと、アバターを所謂ダンスワールドで踊らせるためには顔のオブジェクトの名称を「Body」にしないとうまく認識ができないためです。
なぜ?
ボーンは、CGキャラクターの動きや姿勢を効率よく制御するために使われる技術です。3DCGの初期から、リアルな動きを再現するためにキャラクター内部にボーンを配置し、各部位の位置や角度を計算して動かす手法が使われてきました。ボーンを使うと、個々の頂点を手動で動かす必要がなくなり、スムーズで自然な動きを表現できます。
具体例として、3Dゲームではプレイヤーキャラクターのアニメーションにボーンが多く使われます。ジャンプや走行といった動きの際に、ボーンによって関節が自然に動くようになり、動きがリアルに見えるため、ゲーム体験がより魅力的になります。