Bone・ECB

「Bone・ECB」の編集履歴(バックアップ)一覧に戻る

Bone・ECB - (2018/06/12 (火) 02:38:27) のソース

#contents(,fromhere=true,level=3)
----
**Bone
Boneとは、''キャラクターモデルの骨格およびその部位''のことである。体の各部位にはBone IDが振られており、ACMDのHitbox位置などで参照される。

キャラクターの位置、および着地判定はキャラモデル最下部にある''TransN''で管理される。

TransN, RotNはキャラの姿勢の影響をほとんど受けず、常にキャラモデルの基準位置に存在する。下図の地上のけぞり姿勢(DamageN3)では、キャラの見かけの位置は大きく動いているにもかからわず、TransN, RotN(中央の垂直な線分の両端)は全く動いていないのが分かる。
#image(rottrans.png,width=320)

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

キャラ固有装備の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番号|名称|位置|h
|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に同じ?|
#table_sorter(){head=#3f6,odd=#f0f0f0,even=#ffffff}

↓ 画像(Smash Forge)。
番号は上の表に対応。右半身は省略。
#image(Bone_CF.png,width=640,blank)

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

↓ マルスの剣のモデル。赤い点が剣のBoneで、ID=1002。
#image(sword.png,blank)


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

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

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

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

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

2.主要な体のBone。
両脚は同じ座標の向きだが、腕は左右で向きが異なる。
#image(CFbody.png,width=640)

3.手先・足先。
#image(CFhandfoot.png,width=640)

4.剣。
TransNと同じ座標の取り方だが、こちらはキャラに合わせて座標系も動く。
#image(marthsword.png,width=640)

↓表
|番号|名称|部位|1軸|2軸|3軸|h
|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|剣|奥|上|右|
#table_sorter(){head=#3f6,odd=#f0f0f0,even=#ffffff}


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

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

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

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

↓6点のECB points。
#image(ECB.png,width=640)


↓ ECBの位置を編集したModでの動作。
&youtube(https://youtu.be/R5CHTVZrBGw){640,360}


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

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

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

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

X方向のぬるりは&bold(){自/敵キャラが地上/空中のどちらにいるかによって最大値が異なる}(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だけ押し出される。

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

----
**コメント
#comment()