Bone・ECB


Bone

Boneとは、 キャラクターモデルの骨格およびその部位 のことである。体の各部位にはBone IDが振られており、ACMDのHitbox位置などで参照される。

ゲーム内でのファイターの座標は、キャラモデル足元にある TransN というBoneの座標である。TransNは着地判定にも使われていて、これが地面に触れたときに着地したとみなされる。

上のバーストラインはTransN、横のバーストラインはHipN で判定される。

多くのBoneは体の部位に直接結びついていて、その座標はキャラの姿勢の影響を受ける。一方、TransN(足元), RotN(体の中心)はキャラの姿勢の影響をほとんど受けず、常にキャラモデルの基準位置に存在する。下図の地上のけぞり姿勢(DamageN3)では、キャラの見かけの位置は大きく動いているにもかからわず、TransN, RotN(中央の垂直な線分の下端, 上端)は全く動いていないのが分かる。

キャラ固有装備のIDは1000番台以降。鞘などの付属パーツもIDを持つことがあり、剣士キャラであっても剣のIDが同じとは限らない。また、FaceNなどの一部の共通部位も1000番台に割り振られている。weaponのHitboxのBoneIDは0であることが多いが、ピクミンやむらびとの木などでは2000番台の数字が使われている。


Bone IDと部位の対応

下表は主なBone IDの名称と体の部位の対応表である。キャラによって骨格の形は違うが、 部位のIDは原則共通 (ロボット以外)。ACMDではBone IDを16進数に変換した値が参照される。ECBの座標指定では、IDに1を足した値が使われている。
Bone ID ECB番号 名称 位置
0 1 TransN 足元
1 2 RotN 体の中心
2 3 HipN
3 4 LLegJ 左足付け根
4 5 LKneeJ 左膝
5 6 LFootJ 左足かかと
6 7 LToeN 左足つま先
7 8 RLegJ 右足付け根
8 9 RKneeJ 右膝
9 10 RFootJ 右足かかと
10 11 RToeN 右足つま先
11 12 WaistN
12 13 BustN
13 14 LShoulderN 左肩
14 15 LShoulderJ 左腕付け根
15 16 LArmJ 左肘
16 17 LHandN 左手付け根
23 24 LHaveN 左手中指付け根
19 20 RShoulderN 右肩
20 21 RShoulderJ 右腕付け根
21 22 RArmJ 右肘
22 23 RHandN 右手付け根
24 25 RHaveN 右手中指付け根
17 18 NeckN
18 19 HeadN
25 26 ThrowN TransNに同じ?

↓ 画像(Smash Forge)。
番号は上の表に対応。右半身は省略。

武器を持っているキャラクターは主に1000番台の番号が武器に割り当てられ、ACMDから参照される。1000番台のIDは、ECB指定でも同じ値で参照される(1を加えなくてよい)。

↓ マルスの剣のモデル。赤い点が剣のBoneで、ID=1002。


XYZ座標の向き

Hitboxなどにおける(X,Y,Z)の3つの座標パラメータは紐づけられているBoneからの距離を表しているが、実は BoneによってX,Y,Z軸の向きは異なる 。左右・上下・奥手前のどちらが正かすら、Boneごとに違いがある。加えてTransN,RotN以外のBoneは、 キャラクターの動きに合わせて座標の向きも変化 する。

通常、「左右がX軸・上下がY軸・奥行きがZ軸」という一般的なプレイヤー視点の座標系とは全く一致しない。以下では1つ目のパラメータを第1軸、2つ目を第2軸、3つ目を第3軸として表記する。

基本的に、 その部位が四肢として伸びている方向が第1軸 である。2軸の取り方に規則性は見出せないが、3軸は必ず1・2軸の外積(右ねじ)方向となっている。

↓は部位ごとの座標の向きを図で示したもの。同色の基点は全て同じ軸の取り方である。画像では ファルコンが向いている方向は右 であり、右手が画面手前、左手が画面奥に対応する。

1.キャラの基準となるTransN, RotN。
この2つは、キャラのアニメーションによらず軸の向きが変わらない。
プレイヤー視点の座標系で言えば、1軸から順に「"Z,Y,X"」である。

2.主要な体のBone。
両脚は同じ座標の向きだが、腕は左右で向きが異なる。

3.手先・足先。

4.剣。
TransNと同じ座標の取り方だが、こちらはキャラに合わせて座標系も動く。

↓表
番号 名称 部位 1軸 2軸 3軸
0 TransN 足元
1 RotN 体の中心
2 HipN
3 LLegJ 左足付け根
4 LKneeJ 左膝
5 LFootJ 左足かかと
6 LToeN 左足つま先
7 RLegJ 右足付け根
8 RKneeJ 右膝
9 RFootJ 右足かかと
10 RToeN 右足つま先
11 WaistN
12 BustN
13 LShoulderN 左肩
14 LShoulderJ 左腕付け根
15 LArmJ 左肘
16 LHandN 左手首
23 LHaveN 左手中指付け根
19 RShoulderN 右肩 手前
20 RShoulderJ 右腕付け根 手前
21 RArmJ 右肘 手前
22 RHandN 右手首 手前
24 RHaveN 右手中指付け根 手前
17 NeckN
18 HeadN
25 SwordN


ECB

ECB (Environment Collision Boxes) とは、 「キャラクターの存在判定のようなもの」 である。

スマブラforでは体の6か所に点として実装されている。場所はfighter_param_vl_"chr".bin>Group4。この6点がどのように使われているのかは定かではない。上下左右の最大座標を取った菱形がECBであるとも考えられるし*1、6点それぞれを結んだ八面体が"Box"であるかもしれない。

パックマンは丸まった時専用のECBが別途4点設定されている。

ECBが関連する動作・仕様は、
  • キャラクターとキャラクターの接触(ぬるり判定)
  • キャラクターとステージの接触(壁など)
  • プレイヤータグ・カーソルの表示位置
  • 踏み台ジャンプ判定
    • 相手のECBの上半分 と接した状態でジャンプすると、相手の頭上に移動して踏み台ジャンプ発生。
など。スマブラforでは、 着地判定には使われていない (先述のとおりTransNで管理)。

↓6点のECB points。


↓ ECBの位置を編集したModでの動作。


アイテム・敵キャラのECB

各アイテムにもファイター同様ECBが設定されており、item_common_param Name10-13に記述されている。
アイテムのECBはmodelのBoneの位置によらず、常に上記の4つのパラメータで規定されるダイヤモンド形をなしているものと考えられる。
奥行きに相当する値は見つかっていないが、おそらく存在している?(仮に平面に投射しているとすればバナナジャングルで不自然なぬるり判定が生じることになる、あるいは特別な処理がなされている?)

また、敵キャラにもECBが設定されており、キャラクターやアイテム等とぬるり判定を起こす。
具体的な値は発見されていないが、enemy_param.binもしくはenemy_param_vl_"enemy".binに記述されていると思われる(Group5?)。

ぬるり

ぬるりとは、キャラクター・アイテム・敵キャラ同士のECBが重なったとき、互いに押し・押される現象のこと。X・Z方向のみ影響を受け、Y方向には影響しない。
なお、0度ワザによるノックバックでキャラクターが台上から落下した際に操作不能状態になることを「ぬるり落下」と呼ぶが、ECBによるぬるりと関連性はない。

以下、キャラクター同士のぬるりについて記述する。

X方向のぬるりは自/敵キャラが地上/空中のどちらにいるかによって最大値が異なる(fighter_param_etc.bin Group2)。
  • (地/地): 0.7 / F
  • (空/地): 0.15 / F
  • (地/空): 0.6 / F
  • (空/空): 0.4 / F
(例) 自キャラが地上、敵キャラが空中にいるときにぬるりを起こすと、敵キャラは最大0.15 / Fしか押されないのに対し、自キャラは最大0.6 / Fだけ押し出される。

実際のぬるり度合いはECBの重なり具合によって変化し、キャラクター同士がさほど近くないときは最大値まで達しないことがある。
fighter_param_common Name162 (0.045)が計算に用いられていると思われるが、詳しい計算式は不明。

また、Z方向のぬるりは0.1 / F固定で、最大0.5だけ押し出される。

上記ぬるり度合い関連の数値はキャラクター-アイテム間、キャラクター-敵キャラ間には用いられず、これらのぬるりは不明。


コメント

名前:
コメント: