「スティック閾値」の編集履歴(バックアップ)一覧はこちら
「スティック閾値」(2018/07/13 (金) 02:07:41) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
#contents(,fromhere=true,level=3)
----
**スティック入力値について
Lスティックはその傾きに応じて、X・Y方向にそれぞれ[-127, 128]の整数値を取る(これをスティック値と呼ぶことにする)。正の値はスティック右・上方向、負の値はスティック左・下方向に対応している。
ゲーム内では基本的に、スティック値を118&footnote(118はbattle_object.bin>Name0の値。)で割った値が入力値として使われる。
すなわち
-&bold(){X入力値 = Xスティック値 / 118}
-&bold(){Y入力値 = Yスティック値 / 118}
と計算される。
入力値が取りうる値は&bold(){[0.2, 1]}および&bold(){[-1, -0.2]}である&footnote(0.2はbattle_object.bin>Name1の値。)。絶対値が1を超える場合は最大値の1(or-1)に補正され、0.2を下回る場合は0とみなされる。
下図はスティックの可動域のイメージである。
中央の同心円はスティック自体のイメージであり、特に意味はない。多分。
#image(stick_imp.png)
緑・青枠は入力値下限の0.2を示している。緑の枠内にスティックを倒すと、Y成分は0とみなされて''スティックを真上・真下に倒した扱い''になる。同様に、青枠内に倒すとX成分は0とみなされて真横に倒した扱いになる。
内側の赤枠はスティック値=118、すなわち入力値上限の1のラインである。白部分がスティック可動域&footnote(上下左右にある小さい円外領域は無視。)、黒部分はスティックが届かない領域である。実際に入力値としてあり得るのは、白円と内側赤枠の共通領域となる。
図を見れば分かるように、スティックを斜め方向にめいっぱい倒したとしても、X/Y入力値が上限値に達することはない。例えば白円の半径が128だとして、右上斜め45°に最大まで倒す時、実際の入力値は(X,Y) = (0.767, 0.767)となる。
この影響はふっとばされる時の速度変更に最も顕著に表れる。速度変更幅はY入力値に比例するので、斜めにスティックを倒した場合は最大限の速度変更をすることができない。
一方、角度変更はX/Y入力値の比で変更幅が決まるので、斜め入力で変更幅が小さくなってしまうことはない。
ところが、入力信号がデジタルであるWiiリモコンでは話が変わってくる。
#image(digital.png)
Wiiリモコンの上下左右斜め入力は、上図に示した赤点9つのスティック値のみを取りうる。注目すべきは斜め入力の時の入力値。なんと、アナログスティックでは不可能だった(X,Y)=(1, 1)が実現できるのである。これにより、「斜め45°に角度変更入力し、なおかつ最大限の速度変更を行う」というアナログスティックではなしえないベクトル変更が可能となる。
ページ:[[ベクトル変更]]も参照のこと。
----
**コントローラーによる差
現実のアナログコントローラーでは、スティック可動域が半径128の円より小さいことがある。これはスティック受け皿の形状、ひいてはコントローラーの種類に依存するため、コントローラーによって入力の性能に差があることになる。実際の比較検証結果を以下に示す。
-リザードン上投げ→最善ベクトル変更のマルス撃墜%(トレーニングモード、終点)
--WiiUプロコン: 154%
--GCコン: 155%
--3DS: 156%
--ゲームパッド: 157%
--ヌンチャク: 158%
--Wiiリモコン: 165%
デジタル入力のWiiリモコンは上述の通り驚異的な数字を叩き出すが、他のコントローラーにおいてもそれなりに差が出ることが明らかになった。コントローラーの個体差にも左右されるので一概には言えないことに留意。
----
**可能な細工
速度変更が有利になるようプレイヤー側が出来る行為には下のようなものがある。
-スティックのニュートラルポジションを上に少しずらす。斜めベク変時の下方向の入力値を加算できる。0.2以下の入力値は切り捨てられるため、Nポジをずらした状態で真横に倒しても通常時の真横と同じ入力が可能。
-スティック受け皿を削る(DXではNotchingと呼ばれる行為)。少々アンフェアかもしれない。スティック基盤部品にも構造的な可動域栄元があるため、たとえ受け皿が無い状態だとしても(X,Y)=(128,128)の値まで取れるというわけでもないらしい。
----
**数字について
#image(AB.png)
上限・下限が白円の半径が128だとする。
-上下左右に最も近い角度として実現可能なのは図のA点で、atan(0.2) ≒''11.3°''
--11.3°未満の角度は0°とみなされてしまい、入力できない。
-上限値1が不可能になる角度は図のB点で、asin(118/128) ≒ ''22.8°''
--22.8°以上の角度では横成分が1未満になる。
実戦的な場面に適用すると、
-最適なベク変が真横ではなく斜めになるのは、78°以下の攻撃。79°以上は真横に倒せば最適ベク変になる。
-最大限の速度変更と角度変更が両立できなくなるのは、23°以上の攻撃。
--この付近の角度で最大角度変更のために-65°辺りに倒すのは悪手で、あまり意味のない話ではあるのだが… ちなみに22°の攻撃(ガノン横強)の最適変更は約250°。
----
**参考
大半がこちらの和訳。ベクトル変更についてもまとめて取り上げている。
[[https://github.com/rubendal/Sm4sh-Calculator/wiki/DI-and-LSI-calculation-and-controller-stick-limits]]
----
**コメント
#comment()
#contents(,fromhere=true,level=3)
----
**スティック入力値について
Lスティックはその傾きに応じて、X・Y方向にそれぞれ[-127, 127]の整数値を取る(これを''スティック値''と呼ぶことにする)。正の値はスティック右・上方向、負の値はスティック左・下方向に対応している。
ゲーム内では基本的に、スティック値を118&footnote(118はbattle_object.bin>Name0の値。)で割った値が入力値として使われる。
すなわち
-&bold(){X入力値 = Xスティック値 / 118}
-&bold(){Y入力値 = Yスティック値 / 118}
と計算される。
入力値が取りうる値は&bold(){[0.2, 1]}および&bold(){[-1, -0.2]}である&footnote(0.2はbattle_object.bin>Name1の値。)。絶対値が1を超える場合は最大値の1(or-1)に補正され、0.2を下回る場合は0とみなされる。
下図はスティックの可動域のイメージである。中央の同心円はスティック自体のイメージであり、特に意味はない。多分。
#image(stick_imp.png)
緑・青枠は入力値下限の0.2を示している。緑の枠内にスティックを倒すと、Y成分は0とみなされて''スティックを真上・真下に倒した扱い''になる。同様に、青枠内に倒すとX成分は0とみなされて真横に倒した扱いになる。
内側の赤枠はスティック値=118、すなわち入力値上限の1のラインである。白部分がスティック可動域&footnote(上下左右にある小さい円外領域は無視。)、黒部分はスティックが届かない領域である。実際に入力値としてあり得るのは、白円と内側赤枠の共通領域となる。
図を見れば分かるように、スティックを斜め方向にめいっぱい倒したとしても、X/Y入力値が上限値に達することはない。例えば白円の半径が128だとして、右上斜め45°に最大まで倒す時、実際の入力値は(X,Y) = (0.767, 0.767)となる。
この影響はふっとばされる時の速度変更に最も顕著に表れる。速度変更幅はY入力値に比例するので、斜めにスティックを倒した場合は最大限の速度変更をすることができない。
一方、角度変更はX/Y入力値の比で変更幅が決まるので、斜め入力で変更幅が小さくなってしまうことはない。
ところが、入力信号がデジタルであるWiiリモコンでは話が変わってくる。
#image(digital.png)
Wiiリモコンの上下左右斜め入力は、上図に示した赤点9つのスティック値のみを取りうる。注目すべきは斜め入力の時の入力値。なんと、アナログスティックでは不可能だった(X,Y)=(1, 1)が実現できるのである。これにより、「斜め45°に角度変更入力し、なおかつ最大限の速度変更を行う」というアナログスティックではなしえないベクトル変更が可能となる。
ページ:[[ベクトル変更]]も参照のこと。
**コントローラー
''スティックの可動域はコントローラーの種類によって異なる''。
下表はスティックをぴったり斜め45°に倒したときのX,Yの入力値を測定した結果である。
|コントローラー|スティック値(45°)|[-1,1]換算入力値|h
|GC|92|0.7797|
|UPro|89|0.7542|
|ClassicPro|89|0.7542|
|Nunchuk|102|0.8644|
|Gpad|97|0.822|
#table_sorter(){head=#3f6,odd=#f0f0f0,even=#ffffff}
これをもとに、各コントローラーのスティック可動域を図に表した。
#image(スティックの図.png,width=640,blank)
灰色部分は、スティックを動かしてもゲーム内の入力値が変化しない領域。
クラコンProやWiiUプロコンは可動域が狭く、ヌンチャクやゲームパッドは可動域が広い。可動域が広いコントローラーは''斜め下にベクトル変更するときにより大きい下成分を入力できる''ため、基本的に有利である。
またこの図の通り、倒し切った付近にもスティックの"遊び"があり、''スティックを倒し切らなくても、スティック値は最大の127を取りうる''。さらにゲーム内では''スティック値が118以上なら入力値は最大の1.0になる''こともあり、スティックが縁に当たるよりもだいぶ手前で最大入力が成立する。
可動域の狭いコントローラーは、この外側の遊びが小さいために''繊細な操作をしやすい''というメリットがある。入力値可変域が広いので、強攻撃やシールドシフトなどスティックの傾きを調節する操作に向いている。もっとも遊びの幅微々たる差である上、スティック自体の硬さなどにもよるので一概にも言えないが。
その他、実機では
-八角形の受け皿のコントローラーでも、45°ぴったりの入力が入ることは稀。同じように倒したつもりでも、スティック値が1~3ほどずれる。
--GCコンとクラコンはわずかに横成分が、ヌンチャクは縦成分が入りやすかった。
-WiiUプロコン・ゲームパッド・ヌンチャクの入力値は連続した整数値をとるが、GCコン・クラコンは2~3ずつ飛んだ値しか出力しない。
というような特性を確認した。
#region(close,検証方法)
MSCスクリプトで「弱攻撃が出たとき、1F目のX,Yスティック値([-1,1])を取得して自分と相手の%部分に表示させる」というコードを書いて測定した。強攻撃感度スティック入力有効範囲などのパラメータも適宜変更。
GCコンはスマブラXの時期に生産されていた、いわゆる「白コン」で検証。初期WiiUクラコン、3DSコントローラー、HORIコンは未検証。
#endregion
実際に速度変更で比較した検証結果が以下。
-リザードン上投げ→最善ベクトル変更のマルス撃墜%(トレーニングモード、終点)
--WiiUプロコン: 154%
--GCコン: 155%
--3DS: 156%
--ゲームパッド: 157%
--ヌンチャク: 158%
--Wiiリモコン: 165%
デジタル入力のWiiリモコンは驚異的な数字を叩き出すが、他のコントローラーにおいてもそれなりに差が出る。コントローラーの個体差にも左右されるので一概には言えないことに留意。
なお、ここに掲載したコントローラーの仕様は&u(){スマブラforWiiU独自のもの}である。全てのゲームソフトで[-127,+127]の範囲を取ったり、スティックを倒し切った時の遊びがあったりするわけではないため、誤解のないように注意されたい。
**可能な細工
スティック可動域は、以下に挙げるような細工をすることができる。
-スティックのニュートラルポジションを少しずらす。ポジションを上にずらせば、斜めベク変時の下方向の入力値を加算できる。一方0.2以下の入力値は切り捨てられるため、真横に倒しても通常時の真横と同じ入力が可能。
-スティック受け皿を削る(DXではNotchingと呼ばれる行為)。少々アンフェアかもしれない。スティック基盤部品にも構造的な可動域の制限があるため、たとえ受け皿が無い状態だとしても(X,Y)=(128,128)の値まで取れるというわけでもないらしい。
**数字について
#image(AB.png)
上限・下限が白円の半径が128だとする。
-上下左右に最も近い角度として実現可能なのは図のA点で、atan(0.2) ≒''11.3°''
--11.3°未満の角度は0°とみなされてしまい、入力できない。
-上限値1が不可能になる角度は図のB点で、asin(118/128) ≒ ''22.8°''
--22.8°以上の角度では横成分が1未満になる。
実戦的な場面に適用すると、
-最適なベク変が真横ではなく斜めになるのは、78°以下の攻撃。79°以上は真横に倒せば最適ベク変になる。
-最大限の速度変更と角度変更が両立できなくなるのは、23°以上の攻撃。
--この付近の角度で最大角度変更のために-65°辺りに倒すのは悪手で、あまり意味のない話ではあるのだが… ちなみに22°の攻撃(ガノン横強)の最適変更は約250°。
----
**参考
大半がこちらの和訳。ベクトル変更についてもまとめて取り上げている。
[[https://github.com/rubendal/Sm4sh-Calculator/wiki/DI-and-LSI-calculation-and-controller-stick-limits]]
----
**コメント
#comment()