ソフトドリフトに関する調査 〜マリオカート8デラックス版〜
index.html CHANGED
@@ -21,6 +21,10 @@
21
21
<span class="author">著者: <a href="https://twitter.com/v_whoami_v">whoami</a></span>
22
22
<br>
23
23
<span class="date">初稿公開日: 2019年3月10日</span>
24
+ <br>
25
+ <span class="date">最終更新日: 2019年5月30日</span>
26
+ <br>
27
+ <span class="date"><a href="diff.html">(差分)</a></span>
24
28
</div>
25
29
26
30
<h2 id="content">目次</h2>
@@ -83,8 +87,8 @@
83
87
<h2>ブーストカウンタ</h2>
84
88
85
89
<p>
86
- <a href="https://www.mariowiki.com/Mario_Kart_8_Deluxe_in-game_statistics">Mario Kart 8 Deluxe in-game statistics</a>によると、どのブーストが発動するか決定するためにブーストカウンタと呼ばれる値が利用されているようです。
87
- ブーストカウンタの値はドリフト開始時は0ですが、ドリフトを維持している間に増加していきます。
90
+ <a href="https://www.mariowiki.com/Mario_Kart_8_Deluxe_in-game_statistics">Mario Kart 8 Deluxe in-game statistics</a>によると、どのミニターボが発動するか決定するためにブーストカウンタと呼ばれる値が利用されているようです。
91
+ ブーストカウンタの値はドリフト開始時は0でドリフトを維持している間は各映像フレームごとに増加していきます。
88
92
ドリフト中はブーストカウンタの大きさによって車体から発生する火花の色が変わっていきます。また、ドリフト終了時にはブーストカウンタの大きさによりMT、SMT、UMTのどれが発動するか決まります。
89
93
</p>
90
94
@@ -238,6 +242,14 @@
238
242
</tr>
239
243
</table>
240
244
245
+ <table class="video">
246
+ <caption>ブーストカウンタ増加の様子</caption>
247
+ <tr>
248
+ <td><video src="videos/mt_slow_small.mp4" controls width="640" height="360"></video></td>
249
+ </tr>
250
+ </table>
251
+
252
+
241
253
<h2>ミニターボ性能</h2>
242
254
243
255
<p>
@@ -245,7 +257,7 @@
245
257
</p>
246
258
247
259
<p>
248
- <a href="https://docs.google.com/spreadsheets/d/1g7A-38tn9UAIbB2B3sZI-MpILsS3ZS870UTVMRRxh4Q/edit#gid=0">Luigi_Fan2's Mario Kart 8 Deluxe Stat Chart</a>と<a href="https://www.mariowiki.com/Mario_Kart_8_Deluxe_in-game_statistics">Mario Kart 8 Deluxe in-game statistics</a>によるとミニターボ性能とMT、SMT、UMTが発動可能となるブーストカウンタの閾値の関係とその結果から計算されたミニターボが発動可能になるまでの時間は以下の通りとなります。
260
+ <a href="https://docs.google.com/spreadsheets/d/1g7A-38tn9UAIbB2B3sZI-MpILsS3ZS870UTVMRRxh4Q/edit#gid=0">Luigi_Fan2's Mario Kart 8 Deluxe Stat Chart</a>と<a href="https://www.mariowiki.com/Mario_Kart_8_Deluxe_in-game_statistics">Mario Kart 8 Deluxe in-game statistics</a>によるとミニターボ性能とMT、SMT、UMTが発動可能となるブーストカウンタの閾値の関係は以下の左表の通りとなります。また、その結果からミニターボが発動可能になるまでの時間を計算した結果は以下の右表の通りとなります。
249
261
</p>
250
262
251
263
<table style="width:100%;">
@@ -260,7 +272,7 @@
260
272
<th>SMT閾値</th>
261
273
<th>UMT閾値</th>
262
274
</tr>
263
- <tr><td>1.00</td><td>280</td><td>590</td><td>900</td></tr>
275
+ <tr class="first-row-data"><td>1.00</td><td>280</td><td>590</td><td>900</td></tr>
264
276
<tr><td>1.25</td><td>278</td><td>586</td><td>894</td></tr>
265
277
<tr><td>1.50</td><td>276</td><td>582</td><td>888</td></tr>
266
278
<tr><td>1.75</td><td>274</td><td>578</td><td>882</td></tr>
@@ -286,23 +298,23 @@
286
298
<td>
287
299
288
300
<table class="mt-time">
289
- <caption>ミニターボが発動可能になるまでの時間</caption>
290
- <tr>
301
+ <caption>ミニターボが発動可能になるまでの時間</caption>
302
+ <tr>
291
303
<th rowspan="2">ミニターボ性能</th>
292
304
<th colspan="3">ブーストカウンタ増加量2</th>
293
305
<th colspan="3">ブーストカウンタ増加量5</th>
294
- </tr>
295
- <tr>
296
- <th>MT</th>
297
- <th>SMT</th>
298
- <th>UMT</th>
299
- <th>MT</th>
300
- <th>SMT</th>
301
- <th>UMT</th>
306
+ </tr>
307
+ <tr>
308
+ <th class="dur">MT</th>
309
+ <th class="dur">SMT</th>
310
+ <th class="dur">UMT</th>
311
+ <th class="dur">MT</th>
312
+ <th class="dur">SMT</th>
313
+ <th class="dur">UMT</th>
302
314
</tr>
303
315
304
316
<!-- 60fps -->
305
- <tr><td>1.00</td><td>2.333秒</td><td>4.917秒</td><td>7.500秒</td><td>0.933秒</td><td>1.967秒</td><td>3.000秒</td></tr>
317
+ <tr class="first-row-data"><td>1.00</td><td>2.333秒</td><td>4.917秒</td><td>7.500秒</td><td>0.933秒</td><td>1.967秒</td><td>3.000秒</td></tr>
306
318
<tr><td>1.25</td><td>2.317秒</td><td>4.883秒</td><td>7.450秒</td><td>0.927秒</td><td>1.953秒</td><td>2.980秒</td></tr>
307
319
<tr><td>1.50</td><td>2.300秒</td><td>4.850秒</td><td>7.400秒</td><td>0.920秒</td><td>1.940秒</td><td>2.960秒</td></tr>
308
320
<tr><td>1.75</td><td>2.283秒</td><td>4.817秒</td><td>7.350秒</td><td>0.913秒</td><td>1.927秒</td><td>2.940秒</td></tr>
@@ -322,8 +334,6 @@
322
334
<tr><td>5.25</td><td>1.800秒</td><td>3.850秒</td><td>5.900秒</td><td>0.720秒</td><td>1.540秒</td><td>2.360秒</td></tr>
323
335
<tr><td>5.50</td><td>1.733秒</td><td>3.717秒</td><td>5.700秒</td><td>0.693秒</td><td>1.487秒</td><td>2.280秒</td></tr>
324
336
<tr><td>5.75</td><td>1.667秒</td><td>3.583秒</td><td>5.500秒</td><td>0.667秒</td><td>1.433秒</td><td>2.200秒</td></tr>
325
-
326
-
327
337
</table>
328
338
329
339
</td>
@@ -333,7 +343,7 @@
333
343
<!-- 60fps -->
334
344
<div class="note-title"><span class="note-title">時間の計算方法</span></div>
335
345
<div class="note-body">
336
- 映像フレームレートは60fpsであると仮定し計算を行いました。60fpsでは映像フレームが1秒間に60回切り替わるため、一つの映像フレームが表示される時間は1÷60秒となります。
346
+ 映像フレームレートは60fpsであると仮定し計算を行いました。60fpsでは映像フレームが1秒間に60回切り替わるため、一つの映像フレームが表示される時間は1÷60秒(0.01<ruby>6<rt>・</rt></ruby>秒)となります。
337
347
<br>
338
348
例えばミニターボ性能が1.00のカスタム用いて、ブーストカウンタの増加量が2の状態でドリフトした場合を考えてみます。この場合、表よりUMTの閾値は900になることが分かります。ブーストカウンタはフレーム毎に2増加するので、ドリフトを始めてから450番目のフレームが表示されたときにブーストカウンタが900になりUMT閾値に到達します。1フレームが表示される時間は1÷60秒なので、450フレームが表示されるまでには450×(1÷60)秒かかります。計算結果は7.5秒となり、これがUMTを発動までに必要なドリフトの時間となります。
339
349
</div>
@@ -471,7 +481,7 @@
471
481
</table>
472
482
473
483
<p>
474
- また、ミニターボ性能が1.00であるカスタム(クッパ、ノーマルATV、ゴールドタイヤ、ゴールドカイト)と、<a href="https://twitter.com/v_whoami_v">whoami</a>が普段利用しているミニターボ性能が4.50のカスタム(軽量Mii、ヨッシーバイク、リーフタイヤ、ゴールドカイト)でも時間を計測しました。わずかな誤差は見られたものの、その結果は上記の調査内容の通りと言えます。
484
+ また、ミニターボ性能が1.00であるカスタム(クッパ、ノーマルATV、スリックタイヤ、ゴールドカイト)と、<a href="https://twitter.com/v_whoami_v">whoami</a>が普段利用しているミニターボ性能が4.50のカスタム(軽量Mii、ヨッシーバイク、リーフタイヤ、ゴールドカイト)でも時間を計測しました。わずかな誤差は見られたものの、その結果は上記の調査内容の通りと言えます。
475
485
</p>
476
486
477
487
<table class="mt-ex">
@@ -689,7 +699,7 @@
689
699
</table>
690
700
691
701
<p>
692
- 以上、発動するミニターボを決めるために利用されるブーストカウンタについて紹介しました。また、スティックをどの程度左右に倒しているかによってフレーム毎のブーストカウンタ増加量が2の場合と5の場合の二段階があることを説明しました。さらにMT、SMT、UMT発動に必要なブーストカウンタの閾値について説明しました。最後に、ミニターボ発動までに必要なドリフトの時間の計算方法についても説明し、例として三つの異なるカスタムで実験を行い計算結果が正しいことを示しました。
702
+ 以上、発動するミニターボを決めるために利用されるブーストカウンタについて紹介しました。また、スティックをどの程度左右に倒しているかによってフレーム毎のブーストカウンタ増加量が2の場合と5の場合の二段階があることを説明しました。さらにMT、SMT、UMT発動に必要なブーストカウンタの閾値について説明しました。最後に、ミニターボ発動までに必要なドリフトの時間の計算方法について説明し、例として三つの異なるカスタムで実験を行うことで計算結果が正しいことを示しました。
693
703
</p>
694
704
695
705
<h1 id="ch3" class="main">ソフトドリフト</h1>
@@ -761,12 +771,25 @@
761
771
<tr><td><a href="images/plot_all.png" target="_blank"><img src="images/plot_all.png" class="plot"></a></td></tr>
762
772
</table>
763
773
764
- <div class="note-title"><span class="note-title">デッドゾーンについて</span></div>
774
+
775
+ <div class="note-title"><span class="note-title">操作の遊び</span></div>
765
776
<div class="note-body">
766
- 本ページではデッドゾーンについては考慮せずに説明していますが、実際に操作をする時にはデッドゾーンについて考える必要があるかもしれません。
767
- <br>
777
+ もちろんスティック操作には遊びがあります。そのため、実際にはスティックを倒し切らなくても最大値や最小値を出力することができます。例えば下図では出力可能な値の範囲外にスティックを倒しきった時の三つの例を図示しました。それぞれ操作の遊びの範囲と実際に出力される座標の値を明示してあります。スティックの位置が操作の遊びの範囲にある場合に出力される値はスティックを倒しきった時と同じ座標の値となり、それぞれ(205,0)、(255,48)、(255,128)となります。
778
+
779
+ <table class="figure">
780
+ <caption>スティックの位置と操作の遊びの例</caption>
781
+ <tr><td><a href="images/output_outside.jpg" target="_blank"><div class="output_outside"><img class="output_outside" src="images/output_outside.jpg" width="50%"></div></a></td></tr>
782
+ </table>
783
+
784
+ </div>
785
+
786
+ <div class="note-title"><span class="note-title">デッドゾーン</span></div>
787
+ <div class="note-body">
788
+
768
789
アナログスティックの生成する値は非常に精度の高いものとなります。スティックに触っていない時にはスティックは完全に中心にあると考えたいのですが、振動や直前に倒したスティックの向き等に影響を受け微妙にアナログ値の出力が変化し中心がずれてしまう可能性があります。このような場合でも出力される座標が中心(128, 128)となるように、中心付近ではデッドゾーンと呼ばれる領域が設定されています。この範囲にスティックがある時には常にスティックが中心に存在すると認識される領域です。
790
+
769
791
<br>
792
+
770
793
ところで、デッドゾーンはどのように実現されているのでしょうか?ジョイコンやプロコンでは中心付近のみスティックの動作量と出力値が線形ではないように計算することで使っている人が違和感を感じないように実現されているのではないかと想像しています。より安価なコントローラではそのような処理はなされずに、X軸方向もY軸方向も全域に渡り中心付近にデッドゾーンを持つように実装されているのではないかと思います。
771
794
772
795
<table class="deadzone">
@@ -784,16 +807,6 @@
784
807
「スティックの補正」画面でアナログスティックを正確に右に倒しきり、そこで微妙に上下に操作した時に少し引っかかりがあるコントローラが存在すると思います。その場合にはX軸、Y軸の全域でデッドゾーンが実装されているコントローラであると考えられます。一方ジョイコンやプロコンでは非常に滑らかに動作することが確認できます。
785
808
</div>
786
809
787
-
788
- <p>
789
- もちろん操作の遊びがありますので、スティックを倒し切らなくても最大値、最小値を出力することができます。例えば下図でスティックの位置が操作の遊びの範囲にある場合には、スティックから出力される座標は全て同じ(255,128)になります。
790
- </p>
791
-
792
- <table class="figure">
793
- <caption>スティックの位置と操作の遊びの例</caption>
794
- <tr><td><a href="images/output_outside.jpg" target="_blank"><div class="output_outside"><img class="output_outside" src="images/output_outside.jpg" width="50%"></div></a></td></tr>
795
- </table>
796
-
797
810
<h2>ハードドリフトとソフトドリフトの条件</h2>
798
811
799
812
<p>
@@ -807,11 +820,11 @@
807
820
</table>
808
821
809
822
<p>
810
- 例えば、真横に倒した場合、左コーナーは(0,128) ~ (37, 128)、右コーナーは(217, 128) ~ (255, 128)を出力するようにスティックを倒せばハードドリフトやソフトドリフトとなります。
823
+ 例えば、真横に倒した場合、左コーナーは(0,128) ~ (37, 128)、右コーナーは(219, 128) ~ (255, 128)を出力するようにスティックを倒せばハードドリフトやソフトドリフトとなります。
811
824
</p>
812
825
813
826
<p>
814
- ソフトドリフトはスティックを倒し切らずに途中で止めることで実現できますが、スティックを倒し切らずに途中で止めることは困難だと思います。そこで、左右から少し角度をつけて倒し切ることでソフトドリフトを実現することが一般的となります。上記の図をみると、そのための角度の最大はおよそ水平方向から45度ということが分かります。
827
+ ソフトドリフトはスティックを倒し切らずに途中で止めることで実現できますが、スティックを倒し切らずに正確に停止させ続けるは困難だと思います。そこで、左右から少し角度をつけて倒し切ることでソフトドリフトを実現することが一般的となります。上記の図をみると、そのための角度の最大はおよそ水平方向から45度ということが分かります。
815
828
この範囲に45度は含まれませんが、人間の手でそれほど精密なコントロールは不可能だと思うので45度と言って問題ないと思います。
816
829
もしも45度付近で45度ちょうどを出力するようなコントローラがあれば、45度が含まれない影響が分かるかもしれません。
817
830
</p>
@@ -840,6 +853,30 @@
840
853
ということで、はじめにでも述べた結論の通り境界の角度はおよそ45度となります。
841
854
</p>
842
855
856
+ <div class="note-title"><span class="note-title">斜め入力と真横入力の関係</span></div>
857
+ <div class="note-body">
858
+ ソフトドリフトを実現するために、例えば(219,128)を出力するようにスティックを真横に倒し切らずに途中で静止させるのはなかなか難しいと思います。真横よりも上下に角度をつけてスティックを倒し切ることで(219,128)と等価なソフトドリフトを実現する方が簡単と言えます。もちろん正確な座標を出力することは難しいのですが、スティックを倒し切らずに停止させるより倒しきってしまう方がコントロールしやすいと思います。では、どの方向に倒しきれば良いのでしょうか? 
859
+ <br>
860
+ 下図のように(243,14)を出力するように斜め入力でスティックを倒しきった場合を考えます。この座標(243,14)はコントローラからゲーム機本体に送信されます。ところが、この値はゲーム内で実際に利用される値の範囲外になっています。このような場合、ゲーム内では正規化と呼ばれる処理が行われ実際に利用される値はおよそ(219,38)となります。ということで、この斜め入力によりゲーム内で利用されるX軸方向の値は219となり、これは最初に説明した真横入力と同じ値ということになります。
861
+ <br>
862
+ ということで、一般的には、真横入力と等価な斜め入力のスティックの位置は、真横入力のスティックの位置から真上や真下にスティックを移動した位置にはならないことにご注意ください。
863
+
864
+ <table class="figure">
865
+ <caption>斜め入力の正規化と真横入力の例</caption>
866
+ <tr><td><a href="images/output_normalize.jpg" target="_blank"><div class="output_normalize"><img class="output_normalize" src="images/output_normalize.jpg" width="50%"></div></a></td></tr>
867
+ </table>
868
+
869
+ 次にスティックの動く範囲が大きなコントローラを考えてみます。操作の遊びと正規化を考慮すると以下の図の位置にスティックを倒しきることでおよそ(219,38)が出力されるということになります。このようなコントローラではソフトドリフトの斜め入力の角度の境界がわずかに小さくなることにご注意ください。
870
+
871
+ <table class="figure">
872
+ <caption>操作の遊びのある斜め入力の例</caption>
873
+ <tr><td><a href="images/output_normalize_outside.jpg" target="_blank"><div class="output_normalize_outside"><img class="output_normalize_outside" src="images/output_normalize_outside.jpg" width="50%"></div></a></td></tr>
874
+ </table>
875
+
876
+ その結果、斜め45度として認識される範囲が広くなります。このようなコントローラでは「スティックの補正」画面でアナログスティックを斜め45度に倒しきった状態で微妙に円周上にスティックを動かした時に少し引っかかりがあるはずです。また、デッドゾーンの時と同様にジョイコンやプロコンではひっかかりなく滑らかに動作することが確認できます
877
+
878
+ </div>
879
+
843
880
<h2>ハードドリフトとソフトドリフトの区別</h2>
844
881
845
882
<p>
@@ -941,7 +978,7 @@
941
978
</table>
942
979
943
980
<p>
944
- ここでは斜め入力については考慮せずに、真右へのスティック入力である(255,128)~(217,128)を維持した状態でドリフトを行い、その結果を表にまとめました。
981
+ ここでは斜め入力については考慮せずに、真右へのスティック入力である(255,128)~(219,128)を維持した状態でドリフトを行い、その結果を表にまとめました。
945
982
</p>
946
983
947
984
<p>
@@ -1038,7 +1075,7 @@
1038
1075
</table>
1039
1076
1040
1077
<p>
1041
- 早溜めのための斜め入力は30度と言われることもあるようです。しかし、30度と45度近くの入力による回転半径や車体の向きを比較すると無視できない程度の違いがあるのではないかと思えてきます。斜め入力を使いこなしている人に意見を聞いてみたいところです。
1078
+ 早溜めのための斜め入力は30度と言われることもあるようです。境界からの余裕を考えると30度だと思って操作するのが良いかもしれないですが、30度と45度近くの入力による回転半径や車体の向きを比較すると無視できない程度の違いがあるのではないかと思えてきます。斜め入力を使いこなしている人に意見を聞いてみたいところです。
1042
1079
</p>
1043
1080
1044
1081
<h2>ソフトドリフトの活用</h2>
@@ -1086,7 +1123,7 @@
1086
1123
</table>
1087
1124
1088
1125
<p>
1089
- ラインのトレースという点ではハードドリフトとソフトドリフト、また必要に応じてカウンタードリフトを組み合わせるのが有効だと思います。TAでは理想のラインだけで走れば良さそうですが、実際のレースではラインの撮り方によっては他の人が付けている防御アイテムを避けたり、アイテムボックスに早くたどり着くためにターボを早めに発動したり、無理やり一瞬だけ他の人の前に出て自分の防御アイテムをなすりつけたり、逆に相手の後ろに下がりながら攻撃を避けつつブーストカウンタをしっかり溜めておくなど、考えるべきことがたくさんありそうです。また、コーナーにイン側から入るかアウト側から入るか、イン側に抜けるかアウト側に抜けるか、またその時の車体の向きをどうするのかといったことも重要になりそうです。こういったノウハウは上手な人に聞くのが一番だとは思いますが、自分でも色々と考えてみるのは楽しいのではないかと思います。
1126
+ ラインのトレースという点ではハードドリフトとソフトドリフト、また必要に応じてカウンタードリフトを組み合わせるのが有効だと思います。TAでは理想のラインだけで走れば良さそうですが、実際のレースではラインの取り方によっては他の人が付けている防御アイテムを避けたり、アイテムボックスに早くたどり着くためにターボを早めに発動したり、無理やり一瞬だけ他の人の前に出て自分の防御アイテムをなすりつけたり、逆に相手の後ろに下がりながら攻撃を避けつつブーストカウンタをしっかり溜めておくなど、考えるべきことがたくさんありそうです。また、コーナーにイン側から入るかアウト側から入るか、イン側に抜けるかアウト側に抜けるか、またその時の車体の向きをどうするのかといったことも重要になりそうです。こういったノウハウは上手な人に聞くのが一番だとは思いますが、自分でも色々と考えてみるのも楽しいのではないかと思います。
1090
1127
</p>
1091
1128
1092
1129
<table class="usage">
@@ -1114,8 +1151,9 @@
1114
1151
ここでは調査内容の詳細について説明します。どのような調査を行ったか興味があればご一読ください。
1115
1152
</p>
1116
1153
1117
- <div style="width:100%; text-align:center;0">
1154
+ <div style="width:100%; text-align:center;">
1118
1155
<img src="images/mark_koujichu.png" width="60" alt="工事中">
1156
+ <div style="font-size: 1.2em; font-weight:bold;">工事中</div>
1119
1157
</div>
1120
1158
1121
1159
<!--
@@ -1137,12 +1175,14 @@
1137
1175
1138
1176
<p>
1139
1177
このページではマリオカート8デラックスにおけるソフトドリフトの定義と操作方法について説明しました。
1140
- また、斜め入力でソフトドリフトを実現するのが現実的であり、そのためのスティック入力の角度は45度未満であるということを説明しました。
1141
- さらにソフトドリフト中の回転半径と車体の向きに関する調査についての説明も行いました。
1178
+ 最初にブーストカウンタによるミニターボの発動条件について説明しました。
1179
+ 次にソフトドリフトとハードドリフトを実現するためのコントローラの操作方法について説明しました。
1180
+ 実際には斜め入力でソフトドリフトを実現するのが現実的であり、そのためのスティック入力の角度は45度未満であるということを説明しました。
1181
+ さらにハードドリフトとソフトドリフト中の回転半径と車体の向きに関する調査結果について説明しました。
1142
1182
</p>
1143
1183
1144
1184
<p>
1145
- 以上、ソフトドリフトを理解することでマリオカート8デラックスをより楽しんでいただければと思います!
1185
+ 以上、ソフトドリフトや斜め入力をより深く理解することでマリオカート8デラックスをさらに楽しんでいただければと思います!
1146
1186
</p>
1147
1187
1148
1188
<!--