ソフトドリフトに関する調査 〜マリオカート8デラックス版〜
index.html CHANGED
@@ -20,11 +20,12 @@
20
20
  <div class="author">
21
21
  <span class="author">著者: <a href="https://twitter.com/v_whoami_v">whoami</a></span>
22
22
  <br>
23
- <span class="date">初稿公開日: 2019年3月10日</span>
23
+ <span class="date">2019年3月10日公開</span>
24
24
  <br>
25
- <span class="date">最終更新日: 2019年5月30日</span>
25
+ <span class="date"><a href="diff20190530.html">2019年5月30日更新</a></span>
26
+ <br>
27
+ <span class="date"><a href="diff20210307.html">2021年3月7日更新</a></span>
26
28
  <br>
27
- <span class="date"><a href="diff.html">(差分)</a></span>
28
29
  </div>
29
30
 
30
31
  <h2 id="content">目次</h2>
@@ -32,7 +33,7 @@
32
33
  <li><a href="#ch1">はじめに</a></li>
33
34
  <li><a href="#ch2">ミニターボ</a></li>
34
35
  <li><a href="#ch3">ソフトドリフト</a></li>
35
- <li><a href="#ch4">調査内容の詳細</a></li>
36
+ <li><a href="#ch4">調査方法の詳細</a></li>
36
37
  <li><a href="#ch5">まとめ</a></li>
37
38
  </ol>
38
39
 
@@ -825,8 +826,8 @@
825
826
 
826
827
  <p>
827
828
  ソフトドリフトはスティックを倒し切らずに途中で止めることで実現できますが、スティックを倒し切らずに正確に停止させ続けるは困難だと思います。そこで、左右から少し角度をつけて倒し切ることでソフトドリフトを実現することが一般的となります。上記の図をみると、そのための角度の最大はおよそ水平方向から45度ということが分かります。
828
- この範囲に45度は含まれませんが、人間の手でそれほど精密なコントロールは不可能だと思うので45度と言って問題ないと思います。
829
- もしも45度付近で45度ちょうどを出力するようなコントローラがあれば、45度が含まれない影響が分かるかもしれません。
829
+ 境界の角度は僅かに45度よりも小さくなるようですが、人間の手でそれほど精密なコントロールは不可能だと思うので45度と言って問題ないと思います。
830
+ もしも45度付近全体で45度ちょうどを出力するようなコントローラがあれば、45度が含まれない影響を感じることもあるかもしれません。
830
831
  </p>
831
832
 
832
833
  <p>
@@ -850,14 +851,14 @@
850
851
  </table>
851
852
 
852
853
  <p>
853
- ということで、はじめにでも述べた結論の通り境界の角度はおよそ45度となります。
854
+ ということで、はじめにでも述べた結論の通りソフトドリフトの斜め入力の境界角度はおよそ45度となります。
854
855
  </p>
855
856
 
856
857
  <div class="note-title"><span class="note-title">斜め入力と真横入力の関係</span></div>
857
858
  <div class="note-body">
858
859
  ソフトドリフトを実現するために、例えば(219,128)を出力するようにスティックを真横に倒し切らずに途中で静止させるのはなかなか難しいと思います。真横よりも上下に角度をつけてスティックを倒し切ることで(219,128)と等価なソフトドリフトを実現する方が簡単と言えます。もちろん正確な座標を出力することは難しいのですが、スティックを倒し切らずに停止させるより倒しきってしまう方がコントロールしやすいと思います。では、どの方向に倒しきれば良いのでしょうか? 
859
860
  <br>
860
- 下図のように(243,14)を出力するように斜め入力でスティックを倒しきった場合を考えます。この座標(243,14)はコントローラからゲーム機本体に送信されます。ところが、この値はゲーム内で実際に利用される値の範囲外になっています。このような場合、ゲーム内では正規化と呼ばれる処理が行われ実際に利用される値はおよそ(219,38)となります。ということで、この斜め入力によりゲーム内で利用されるX軸方向の値は219となり、これは最初に説明した真横入力と同じ値ということになります。
861
+ 下図のように(243,15)を出力するように斜め入力でスティックを倒しきった場合を考えます。この座標(243,15)はコントローラからゲーム機本体に送信されます。ところが、この値はゲーム内で実際に利用される値の範囲外になっています。このような場合、ゲーム内では正規化と呼ばれる処理が行われ実際に利用される値はおよそ(219,39)となります。ということで、この斜め入力によりゲーム内で利用されるX軸方向の値は219となり、これは最初に説明した真横入力と同じ値ということになります。
861
862
  <br>
862
863
  ということで、一般的には、真横入力と等価な斜め入力のスティックの位置は、真横入力のスティックの位置から真上や真下にスティックを移動した位置にはならないことにご注意ください。
863
864
 
@@ -866,7 +867,7 @@
866
867
  <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
868
  </table>
868
869
 
869
- 次にスティックの動く範囲が大きなコントローラを考えてみます。操作の遊びと正規化を考慮すると以下の図の位置にスティックを倒しきることでおよそ(219,38)が出力されるということになります。このようなコントローラではソフトドリフトの斜め入力の角度の境界がわずかに小さくなることにご注意ください。
870
+ 次にスティックの動く範囲が大きなコントローラを考えてみます。操作の遊びと正規化を考慮すると以下の図の位置にスティックを倒しきることでおよそ(219,39)が出力されるということになります。このようなコントローラではソフトドリフトの斜め入力の角度の境界がわずかに小さくなることにご注意ください。
870
871
 
871
872
  <table class="figure">
872
873
  <caption>操作の遊びのある斜め入力の例</caption>
@@ -875,6 +876,45 @@
875
876
 
876
877
  その結果、斜め45度として認識される範囲が広くなります。このようなコントローラでは「スティックの補正」画面でアナログスティックを斜め45度に倒しきった状態で微妙に円周上にスティックを動かした時に少し引っかかりがあるはずです。また、デッドゾーンの時と同様にジョイコンやプロコンではひっかかりなく滑らかに動作することが確認できます
877
878
 
879
+ </div>
880
+
881
+ <div class="note-title"><span class="note-title">45度が境界ではない理由</span></div>
882
+ <div class="note-body">
883
+ ソフトドリフトの境界角度は45度よりも少し小さくなります。ここではどうして45度ではないのかを考察してみます。<a href="https://twitter.com/v_whoami_v">whoami</a>は以下の2点の問題があると考えています。
884
+
885
+ <ul class="angle_error">
886
+ <li>座標変換時の丸め誤差の問題</li>
887
+ <li>左下入力の問題</li>
888
+ </ul>
889
+
890
+ 最初に"座標変換時の丸め誤差の問題"について説明します。座標はデジタルデータで表されますがアナログスティックは連続値で表されます。そのためアナログスティックはもっとも近い座標値に変換されて利用されます。ここで下図のように正確にスティックを右上45度に倒した場合を考えます。この場合もっとも近い座標は4つ存在し、その中のどれかが実際に利用されるはずです。この4つのうちの(254,1)、(255,1)、(254,2)は45度以上の角度の座標となりソフトドリフトにはなりません。ところが(255,2)は45度未満となってしまいます。そのためスティックの入力角度が45度でもソフトドリフトを実現できる可能性があります。このような丸め誤差の問題があるため、境界にしようと思っている角度をそのまま境界角度としては利用できません。
891
+
892
+ <table class="figure">
893
+ <caption>座標変換時の丸め誤差の問題</caption>
894
+ <tr><td><a href="images/border_rounding.jpg" target="_blank"><div class="border_rounding"><img class="border_rounding" src="images/border_rounding.jpg" width="50%"></div></a></td></tr>
895
+ </table>
896
+
897
+ 次に"左下入力の問題"について説明します。コントローラから出力されるアナログスティックの座標は(0,0)から(255,255)までになりますが、右方向や下方向と比べ左方向と上方向の方が表現できる値が多くなっています。真左の座標は(0,128)、中心の座標は(128,128)、真右の座標は(255,128)になります。要するに左方向は0から127の128段階、右方向は129から255の127段階で表現されることになります。上下方向も同様に上方向は128段階、下方向は127段階となりす。これを踏まえて下図のようにアナログスティックを正確に左下45度に倒し切った場合を考えてみます。コントローラに依存すると思いますがこの場合の出力値は(0,255)になることが期待されます。ところが、(0,255)は中心(128,128)から左方向には128で下方向には127の位置となります。これは角度としては45度未満となります。このようにアナログスティックの左下45度はソフトドリフトの範囲内となってしまいます。
898
+
899
+ <table class="figure">
900
+ <caption>左下入力の問題</caption>
901
+ <tr><td><a href="images/border_lower_left.jpg" target="_blank"><div class="border_lower_left"><img class="border_lower_left" src="images/border_lower_left.jpg" width="50%"></div></a></td></tr>
902
+ </table>
903
+
904
+ また、上下左右の不釣り合いを考慮し(0,255)を45度として座標変換するコントローラが存在する可能性も考えられます。このようなコントローラを考慮してソフトドリフトの境界を考えると以下の図の通りとなります。例えば図のようにアナログスティックを左下45度に倒した場合、(1,254)が座標として利用されます。ここでは(0,255)は45度とみなされますが(1,254)や(2,253)といった座標は45度よりも小さいとみなされるため(1,254)はソフトドリフトの範囲に入ってしまいます。このようにスティックを45度に倒した場合でもソフトドリフトが可能となってしまいます。
905
+
906
+ <table class="figure">
907
+ <caption>上下左右の不釣り合いを考慮したコントローラの左下入力の問題</caption>
908
+ <tr><td><a href="images/border_lower_left_normalize.jpg" target="_blank"><div class="border_lower_left_normalize"><img class="border_lower_left_normalize" src="images/border_lower_left_normalize.jpg" width="50%"></div></a></td></tr>
909
+ </table>
910
+
911
+ 以上の2つの問題を考慮してソフトドリフトが可能となる座標が設定されていると考えられます。詳細は省略しますが、座標(0,254)付近を境界とするようにソフトドリフト斜め入力の境界角度が設定されていれば良いのではないかと思います。この角度は45度よりも0.008ラジアン小さい角度(およそ44.5416度)よりも僅かに大きなものになるようです。ということで45度よりも0.008ラジアン小さい角度(およそ44.5416度)をソフトドリフトの斜め入力境界角度として仮定して調べてみたところ、実際に調査した内容と合致することが分かりました。以下の図は斜め入力ソフトドリフトの予想境界線(およそ44.5416度)を追加したものになります。
912
+
913
+ <table class="plot">
914
+ <caption>ソフトドリフトの斜め入力境界角度</caption>
915
+ <tr><td><a href="images/plot_border.png" target="_blank"><img src="images/plot_border.png" class="plot"></a></td></tr>
916
+ </table>
917
+
878
918
  </div>
879
919
 
880
920
  <h2>ハードドリフトとソフトドリフトの区別</h2>
@@ -1015,7 +1055,7 @@
1015
1055
  </tr>
1016
1056
  </table>
1017
1057
 
1018
- <table class="angle" border="1">
1058
+ <table class="angle">
1019
1059
  <caption>回転半径の調査結果</caption>
1020
1060
  <tr>
1021
1061
  <th>種類</th>
@@ -1145,10 +1185,10 @@
1145
1185
  もちろん、コーナー中でのミニターボ発動や着地ドリフトの利用、ニュートラルドリフトでの走行などなど、他にも色々と考慮すべき点は多いと思います。もしもコーナリングについてあまり考えたことがないようであれば、ここで説明した内容を参考にソフトドリフトも含めた色々なコーナリングの方法を考えて試してみていただければと思います。
1146
1186
  </p>
1147
1187
 
1148
- <h1 id="ch4" class="main">調査内容の詳細</h1>
1188
+ <h1 id="ch4" class="main">調査方法の詳細</h1>
1149
1189
 
1150
1190
  <p>
1151
- ここでは調査内容の詳細について説明します。どのような調査を行ったか興味があればご一読ください。
1191
+ ここでは調査方法の詳細について説明します。どのように調査を行ったか興味があればご一読ください。
1152
1192
  </p>
1153
1193
 
1154
1194
  <div style="width:100%; text-align:center;">