見出し画像

ボーン名の左右の表記揺れについての現状分析と目安となる指針について

概要

 結論から述べると、「UpperLeg_L」「UpperLeg.L」 といったフォーマットが望ましい。この二つの内どちらを使うのかについては、どちらでもよいが、強いていえばアンダーバーが望ましい(補足を追記)。

 筆者は本記事で一定の目安となる指針を示すが、これはその他の形式を否定するものではない。また、これは VRChat 用のアバターの改変・販売を主眼においた指針である。末尾に詳細な注意点を述べる。

ユーザー側の指針

 望ましいと思われるボーン名テンプレートを以下に示す。

Hips 尻のボーン
UpperLeg_L 左太もものボーン
UpperLeg_R 右太もものボーン
LowerLeg_L 左ひざのボーン
LowerLeg_R 右ひざのボーン
Foot_L 左足首のボーン
Foot_R 右足首のボーン
Spine 背骨の第一ボーン
Chest 胸のボーン
Neck 首のボーン
Head 頭のボーン
Shoulder_L 左肩のボーン
Shoulder_R 右肩のボーン
UpperArm_L 左上腕のボーン
UpperArm_R 右上腕のボーン
LowerArm_L 左ひじのボーン
LowerArm_R 右ひじのボーン
Hand_L 左手首のボーン
Hand_R 右手首のボーン
(指のボーンは省略)

 ここでいうユーザーとは、アバターを改変したり、または販売する人を指す。

開発者側の指針

 表記揺れを考慮するとキリがないので、名前に依らないターゲティングを実装するのが望ましい。

 ここでいう開発者とは、アバター改変支援ツール等を作成する人などを指す。

背景及び手法

 アバター等に使われる人型のボーン構造(ヒューマノイド)において、左右対称となるパーツ(足や腕など)については、ボーン名に L や R をつけて左右対象であることを示す慣習がある。

 これは、単にユーザーが見やすいという点のみならず、ソフトウェア側でも、左右対称な編集を可能にするなどの自動化にも対応する等のメリットがある。他にも、リターゲティングや着せ替えにおいても、異なるヒューマノイド間でボーンを一致させる必要がある。このような観点から、ボーン名のフォーマットは統一されている、少なくとも似ていることが望ましい。

 しかし、ボーン名の制作者は任意に決定できるものであり、現状かなりの表記揺れがある。このような表記揺れは、特にVRChatにおけるアバター改変において顕著である。

 そこで、有料販売モデルを対象に、ボーン名が実際どのように分布しているかに対して調査を行った。その結果をもとに、現状と今後を鑑み、現実的な指針を定めた。データセットには、筆者の手持ちの販売データほか、無料アセット等から得られた 136 体のヒューマノイド FBX を用いた。

 調査手法は、FBX SDK を用いて、FBX に含まれるボーンオブジェクトの名前をすべて抽出した。その後、得られた名前に対しフィルタリングをすることにより、特定の部位に関わるボーンを抽出し、それらの間の表記揺れを解析した。

結果

左大腿

 左大腿について解析した結果、以下のような表が得られた。

Upper Leg.L 18
UpperLeg_L 17
LeftUpperLeg 10
Upper_leg.L 8
upper_leg.L 7
UpperLeg.L 7
UpperLeg_l 5
L_UpperLeg 5
UpLeg.L 3
Upper Leg_L 2
LeftUpLeg 2
Upper_Leg_L 2
Character1_LeftUpLeg 1
UpperLeg_const_F.L 1
L_UpperLeg_C 1
upper_leg_L 1
Upper Leg.L_end 1
Left Upper Leg 1

 上位 7 つまでをグラフにした図が以下である。

図 左大腿におけるボーンの表記揺れ

 最も多い表記は「Upper Leg.L」で 18 個だった。続けて、「UpperLeg_L」「LeftUpperLeg」と並んだ。また、他にも「UpLeg.L」のような根本的な単語の表記分けや、大文字や小文字の違い、スペースのあるなしなどの表記揺れが見られた。

左上腕

 左上腕について解析した結果、以下のような表が得られた。

UpperArm_L 20
Upper Arm.L 19
LeftUpperArm 10
upper_arm.L 8
Upper_arm.L 8
UpperArm.L 7
UpperArm_l 5
L_UpperArm 5
Upper_Arm_L 2
upper_arm_L 1
Upper Arm_L 1
Left Upper Arm 1
Left Upper Arm Twist 1
LeftUpperArm(Ransel) 1

 上位 7 つまでをグラフにした図が以下である。

図 左上腕におけるボーンの表記揺れ

 最も多い表記は、「UpperArm_L」で 20 個だった。続けて、「Upper Arm.L」「LeftUpperArm」と並んだ。概ね、左大腿と同じ傾向であるが、最も多い結果は左大腿と左上腕で違うほか、各フォーマットにも細かい数字の違いが見られた。

アンケート

 併せて、Twitter でアンケートを行った。項目は

  • アンダーバー接尾辞

  • ドット接尾辞

  • アンダーバー接頭辞

  • ドット接頭辞

 の 4 方式とした。

 結果は 162 票が得られ、アンダーバー末尾方式が 53.1 % で最大となった。その次に、ドット末尾方式、アンダーバー接頭辞方式となった。筆者のタイムラインから、Blender を使う層が多めに入るバイアスは多少あると思われるが、この結果は、解析から得られたものと同じ傾向が見られた。

考察

 現状、ボーン名にはかなりの表記揺れが見られるが、「Bone_L」「Bone.L」といった表記が最も多い。前者をアンダーバー方式、後者をドット方式とする。ただし、両者の割合については、決定的にどちらが上ということはできない。

 なお、個人ユーザーの多くが参考にするであろうサイトにも、アンダーバー方式を採用するもの(高知工科大学の講座)と、ドット方式を採用するもの(3Dのメモ帳さんの講座)とがあり、ある程度熟練したユーザー間においても共通了解はないのが現状である。

 ちなみに、Maya のドキュメントや、Unity のヒューマノイドの仕様では「LeftUpperLeg」のような形式で定めている。これら空白なしの表記は、一般的にパスカルケースと呼ばれる。パスカルケースのボーン名は、いずれの結果においても三番目に多かった。ボーン名に限ったことではないが、3DCGにはそれぞれの流儀がある。現状では、それぞれの違いを尊重しながら利用/開発していくしかないであろう。

 とはいえ、むやみに自由度を増やすと将来的な混乱を招くおそれがある。また、名称が似ている方が改変においても作業量が減ることが多い。そこで、本記事ではあえて目安となる指針を定めたい。

結論

 冒頭に述べた通り、「UpperLeg_L」方式(アンダーバー方式)で統一することを提案する。ほか、体の部分の細かい名称の違いについては、Unity の仕様に合わせた。

 まず、アンダーバー方式とドット方式が最も多く使われていることから、それに合わせることが合理的である。

 二つの方式の間に本質的な違いはないが、あえてアンダーバーを推す理由は、一部のソフトウェアにおいて、ドットを使った名前の処理が異常を起こすかもしれないためである。Unity では可能性は極めて少ないが、Maya ではこのようなエラーが起こり得る。同様の理由で、空白もないことが望ましい。なので、部位名が 2 単語からなる場合では、その部位はパスカルケースで表記することを推奨する。

 なお、開発者的な視点に立てば、名前が厳密に一致していることを期待したターゲティングには無理があるので、ボーン名に依らない実装を目指す必要がある。

注意

 本記事で述べた指針はあくまで目安であり、命名法を強制するものではないことを今一度強調したい。

 つまり、モデルを作りたい人が自主的に参考にすることは是非とも歓迎したいが、これを論拠に「この命名はダメですよ!」と誰かに言うためのものではない、ということである。

この記事が気に入ったらサポートをしてみませんか?