Darkside(https対応しました)

2016年10月の記事

<< 前のページ | 次のページ >>

2016年10月26日(水) 20:50

また曲がれない

 1周目(2周目すぐ)は動作したスクリプトが、2周目(3周目すぐ)には動作しない。

 想定済みの事態とはいえ、初期状態が少し変わっただけで自動運転は失敗する。手続き型アルゴリズムでクルマをマトモに走らせるのは、難しい。

 S-JET 最適化スクリプトその1の最後は、直進部分を除外して結果を出力する。
 スクリプトその2では、まず直進から開始することで削除した走行を補う。
 そのように作ったのだが、直進突入で即座にブレーキが必要という訳じゃなかった。

 解が出力された状態から直進すれば良いのは間違っていないが、ブレーキは1フレーム遅らせて掛け始めないと内部速度が2304に戻らない。
 ここをキッチリと考慮すれば、直進のみで無事に速度が戻る。スクリプト2も、予定通りに動作するようになった。

 だが、スクリプト2が右コーナーを曲がり切れない。

 思い切りアウト側に膨らんだ走行ラインを取ってしまう。

 1周前に比べると、今回はスクリプト1の終了位置が手前になっている。そのままスクリプト2を動かすと、コーナーリングが早過ぎるのだ。最初にキツく曲がり過ぎるために、後半の走行ラインが苦しくなってアウトに膨らむ。
 1周前はたまたま、ちょうど良い開始位置だったようだ。

 開始位置が異なっても、適切なタイミングでコーナーリングできるスクリプトでなければならない。
 前周は、たまたまうまく行っただけだった。その事実が、発覚した。

 初期条件が少し違うだけで動作しなくなるスクリプトの多いこと多いこと。というか、動いてくれる方が少ない。この厄介さが面白くもある。単純作業になったら、やっててつまらない。趣味として楽しむのに、適度な難易度だ。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2016年10月25日(火) 21:36

引っ掛かりまくり

 無事に最終ダッシュプレートをかすめ、ホームストレートを突っ走る。2周目終了時点で、45秒09。

 このままダート地帯の手前まで突っ走り、ダッシュ効果が切れる。
 ところが、引き続いて S-JET 最適化スクリプトを動作させたところ、一瞬で終了してしまった。そもそも、初期位置がダートの手前過ぎる。
 ホームストレートを突っ走るスクリプトは、本来ダート突入寸前で終了するはずだ。それが、ダートのかなり手前で終了している。終了間際には自動運転の解が無くなっている。

 調べると、減速によるNGと判定されている。
 減速NGは、自動運転でガードビームに突っ込んだ場合を想定している。しかし、自動運転ではダートに突っ込むのは許容される。だから、どこまで減速不可とするかは微妙な問題があり、条件判定が不適切なようだ。
 1周目と2周目ではダッシュプレートに乗るタイミングが異なり、ダッシュ効果が切れるタイミングも異なる。それにより、1周目では機能した条件判定が機能せず、許容できる減速が許容できないと判定された。

 条件を見直すと自動運転が続行するようになった。
 ところが今度は勝手にダートを回避し、左旋回しようとする。

 条件判断をあれこれ修正し、ようやく想定通りの位置まで進行するようになった。
 これが本来の、S-JET 最適化スクリプト初期位置になる。

 S-JET 最適化スクリプトは4本に分かれており、最初の1本が終了するまで数時間を要する。
 まずは、ダート地帯を3周期分前進する。

 基本的に放置して見ているだけだが、1周目(というか2周目直後)と異なり、ガードビーム減速連続4フレームのベストケースが2周期連続で可能だった。
 ところが3周期目になると、一転して解無し。

 これは、非常にまずい。
 3周期目は、ダートのド真ん中で S-JET の周期が終了する。そのため、ガードビームに突っ込むことなく走っていると、S-JET の速度が回復せず致命的に遅くなる。
 連続4フレームでなくてもいいから、とにかくガードビーム減速を使用して S-JET の速度を回復させねばならない。このままでは、次のスクリプトを適用することができず、TAS製作がストップする。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2016年10月24日(月) 21:38

自動運転ハマる

 いい具合に3つ目のダッシュプレートに乗れるようになったが、次の反射ドリフトでまた行き詰った。

 ピットを最適走行ラインで出口に向かって走るのだが、スクリプトを動作させても左に突っ込む結果しか得られない。使い物にならない初期状態が得られている可能性もあるが、手動で操作すると簡単に抜けられる。
 最初は左ハンドルを切り、そのままだと左に突っ込むから途中で右ハンドルが必要になる。その判定が、うまく行っていない。
 正確には、左ハンドルの後は自動運転でピット出口を目指す。

 スクリプトの実行時間を短縮するために、最適な左ハンドルのフレーム数を調査している。それが、状況によっては正常に判定できないようだ。そこで、最適フレーム数を調査せず、片っ端から試すことにした。
 左ハンドルのフレーム数を変化させつつ、毎回自動運転を実行させる。 

 その結果、事実上左ハンドルのフレーム数を変化させる必要は無さそうだと判明。
 というのも、自動運転では最初にハンドルを切ってから結果を試すので、何フレームか必要になる初期左ハンドルも結果的に実行されるからである。念のためフレーム数別の解を比較する必要はあるが、ひとまず解決した。

 ピットの出口から右コーナーリングは、普通にスクリプトを動作させると一晩掛かる。動作画面を眺めつつ手動で曲がるタイミングを制約すればもっと速いが、手間が増える。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2016年10月23日(日) 21:21

ダッシュの向き

 1つ目のダッシュプレートに左向きで乗っても、2つ目のダッシュプレートに乗ることは可能。そういう場合は走行距離が短くなりがちで、速いと判定され易い。
 だが、走行ラインがキツくなり、2つ目のダッシュプレートにも左向きで乗るしかなくなる傾向がある。

 これでダッシュすると、右ハンドルを切ったとたん左にシフトし、右側のインを突けなくなる。

 つまりは、元凶は1つ前のダッシュプレートにある。

 同じフレームでも、先の映像よりも僅かに遅い(手前に位置している)ことが分かるだろう。

 だが、先の場合ほど左向きになっていない。
 これが、この後に効いて来る。ちゃんとイン攻めすることが可能になり、確実に速くなる。

 両者を区別できるよう、解を出力する際に向きも出力するようにした。
 これにより、左を向き過ぎている解は却下する。
 もちろん、速さと向きの関係からどれが速いか判定し難い解が幾つも出現する。そういうのは、片っ端からスクリプトに放り込んで確認するしかない。うまく右側のインを攻める走行が可能な解は、すぐに判明する。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2016年10月22日(土) 20:11

ダッシュ中のハンドル

 本番ならともかく、途中経過に過ぎないエキスパートクラスの現在は、フレーム未満の罠まで回避を考えずに作業を簡単にする。また、かなり速い解が出ていれば最後までスクリプトで確認せず先に進むのもアリだ。これらの手抜きにより、タイムは少し遅くなるが大幅に製作時間を節約できる。

 だが、手抜きできない部分もある。それは、スクリプトに不具合がないかどうか確認すること。
 2周目以降は、スクリプトが同一でも初期条件が異なる。それにより、不具合が新たに発覚することがある。発覚したら、キチンと修正せねばならない。さもないと、肝心のマスタークラス本番で最適化に失敗するかもしれない。

 3つ目のダッシュプレートに乗る最適突入ラインを探索している最中に、不具合が発覚した。その部分だけ見るとマトモなのだが、出て来た解がタイム的に想定より遅い。そこでムービー再生して確認すると、2つ目のダッシュプレートに乗ったあと、走行ラインが思い切りアウト側に膨らんでいる。これでは、大幅なタイムロスが生じるのも当然だ。
 スクリプトは、イン(右側)の折れ目すれすれを走行するように作成したはずだ。

 不具合は、2つ目のダッシュプレートに乗った直後(映像の位置)をスタートとし、右前方の折れ目すれすれを走行させに行くスクリプトに存在すると判明。
 折れ目すれすれを走るには、ここから少し右に曲がらねばならないことが分かるだろう。

 ところが、スクリプトの出力ログを見ると、最初に3フレームほど左ハンドルを切り、その後は直進している。これではアウト側にズレるのは当たり前である。
 1周目ではスクリプトは想定通りに機能し、折れ目すれすれを走行させてくれた。速度はほぼ同じなのに、なぜ2周目では訳分からないほど折れ目から離れるのか?

 初期位置からハンドル操作をせず直進すると、何とほぼ折れ目すれすれを通過。
 しまった、ダッシュプレートの特性を見誤っていた!

 これまで散々 F-ZERO のTASを製作したが、すべてミュートシティーである。ミュートにはダッシュプレートが無いため、TASで扱ったのはデスウインド2になってからである。そのため、製作歴は長くてもハマってしまった。

 1つ上の初期状態と、映像を見比べて欲しい。注目すべきは、遠景である。そう、マシンの向きは変わっていない。ハンドルを切っていないのだから、当然である。しかし、進路は右に曲がっている。さもなければ、折れ目すれすれを通過したりしない。
 要するに、ダッシュプレートに乗ると、マシンの向きではなくダッシュプレートの向きに加速するのだ。

 この違いは重大である。
 マシンの向きとダッシュプレートの向きは、同じとは限らない。特にデスウインド2のように、ダッシュプレートに乗るための走行ラインが苦しい場合には。
 そしてハンドルを切ると、進行方向(ダッシュプレートの向き)ではなくマシンの向きを基準として、左右に旋回する。

 1フレームだけ右ハンドルを切り、それ以降はハンドルに触らない。
 すると、折れ目から少し離れた位置を通過する。
 右ハンドルを切れば切るほど、走行ラインが左に移動する。

 マシンの向きがダッシュプレートより左に大きくズレているため、右ハンドルを入れても右に戻り切れず、左に動いてしまう。ハンドルに触らなければダッシュプレートの向きに進むので、結果としてハンドル操作すればするほど左に動く。

 この状態では、折れ目に接近するには直進しかない。だが、続いて3つ目のダッシュプレートに乗るためのスクリプトに引き継ぐと、ハンドル操作に関わらず左に動くのは変わらない。だから、大きくアウトに膨らんだ走行ラインとなってタイムロスする。

 結論として、2つ目のダッシュプレートに左向きで乗ったことが元凶である。
 2つ目のダッシュプレートに乗りに行くスクリプトでは、乗った時の向きを考慮せずに速遅判定を行っていた。そのため、使い物にならない解が採用されてしまったのだ。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

<< 前のページ | 次のページ >>

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4