2018年3月7日水曜日

X-Planeでの巡航飛行の時間短縮方法

Microsoft Flight Simulator Xで飛んでいたときは、シミュレーション速度を2倍、4倍、8倍、16倍などにすることができました。国際線を飛ぶと何時間もかかりますから、現実的には巡航中の時間短縮は必須です。ただ、8倍速や16倍速で飛行すると、オートパイロットの高度維持がハンチングを起こし、激しく揺れて、たまにATCから高度を修正するよう怒られたりもしました。それでも時間短縮という目的は果たせましたから、便利な機能でした。
最近、X-Planeを購入して飛んでいるのですが、FSXとはその辺の勝手が違います。
目的地に時間短縮するという用途としては、X-Planeでは対地速度を変える方法があります。これは単純に前進速度を何倍速かにするというものです。対地速度以外のシミュレーション計算は高速化しません。そうすると、1倍速でシミュレーション計算するオートパイロットにとっては、想定外の何倍もの対地速度(マッハ10とか)で飛行する機体の制御を計算することになります。まともな計算ができなくなり、高度維持がハンチングを起こします。ハンチングは時間とともに徐々に大きくなっていき、1万フィートを超える幅で上下動しはじめることになります。これでは巡航飛行の時間短縮としては使いものになりません。
X-Planeではシミュレーション速度を高速化することもできます。対地速度だけでなく、シミュレーションの計算側も高速化できる機能がちゃんと用意はされています。しかし、それには強力なCPUパワーが必要になり、私のパソコンでは2倍速での計算すらできません。

この問題について、海外の情報を漁ってみても、飛行速度に対するシミュレーション速度が間に合わないのだから、そのようになるのは当たり前という話になっています。
なるほど、異常な速度で前進しているのだから、まじめにシミュレーション計算するX-Planeにとって、計算が追い付かなくなれば不安定になるのは当然というのは一見説得力があります。
しかし、IT技術者である私から見ると、ちょっと疑問だったりもします。例えば、仮定の話ですが、現実の大型旅客機で単純に速度だけマッハ10にできたとして(仮定の話なので機体強度その他は無視)、その場合、オートパイロットのプログラムが高度を制御不能になるかというと、それは分かりません。あるいは、飛行速度は通常のマッハ0.8程度だとして、オートパイロットの処理速度だけをなんらかの方法で遅くできたとしたら、オートパイロットにとっては、やはり想定外の飛行速度になるのと同じことだと思うのですが、その場合にオートパイロットが高度を維持できなくなるかは分かりません。
さらにIT技術者視点らしい見方ですが、単純に時間短縮したいだけなのであれば、まじめにシミュレーション計算する必要はなく、ある瞬間の高度を強制的に維持するような、それ専用のモードを実装してもいいと思います。
とはいえ、私がX-Planeを作っているわけではありませんし、X-Planeの開発者が、なにかをするにも手間と時間がかかるわけで、今のところないものは仕方ないと考えるしかありません。

代替案として、FSXであったスルーモードという機体を自由に移動できる機能はないのかと探してみました。プラグインで見つけたのですが、X-Plane10の古い時代に作られたもののようで最新のX-Plane11では正常に機能しませんでした。

X-Plane11では、地図を表示して、そこに表示されている自機のマークをマウスでドラッグして、他の場所に持っていくことができます。これであれば、時間短縮どころか、瞬間移動できます。
しかし、問題があって、移動すると、移動先のシーナリーのロードに時間がかかります。ですから実際は瞬間移動にはなりません。それでも数十秒待てばロードが終わるので、まじめに飛行する時間を考えれば全然ましです。しかし、地図を大きくズームアウトできないのが問題です。自機のドラッグによる移動は地図で見えている範囲になりますから、一回で移動できる範囲に制限があります。地図上に端までは、だいたい300kmくらいでしょうか。一回移動すると、自機を中心にまた地図で表示されている範囲になります。関空から台湾に行くだけでも5~6回の移動が必要です。移動するたびにシーナリーのロードを待たされますから、だるい作業です。もっと遠いヨーロッパやアメリカあたりまで飛行するとしたら、面倒くさいことになりそうです。
また、瞬間移動ですから、時計は進みません。時間の経過とともに日の出や夕焼けを楽しむというのはあまりできません。FMSの経路の入力もそれを考えて作っておく必要があります。それでも、現状、唯一の解決策はこれしかない状況です。

vJoy+UCRでフライトシミュレーターのジョイスティック入力を柔軟にカスタマイズ

X-Planeを使うにあたり、私は、THRUSTMASTER製のT-Flight Hotas Xというジョイスティックを使っています。手ごろな価格で、コンパクトサイズであり、私のようなライトなフライトシミュレーターユーザーには悪くない製品ですが、X-Planeを使うためには少々悩みがあります。

まず、スロットルレバーにセンターがあります。スロットルレバーを動かすと、中間でカクッと抵抗のある部分があります。スロットルをちょうど中間で止められるようになっています。これは、前進と後進ができる宇宙船等を操縦するようなゲームを想定して、スロットルを前後方向に分けて操作できるようになっているためです。しかし、航空機の操縦であるX-Planeにおいてはこの機構は邪魔です。スロットルの中間部分にひっかかりがあると、スムーズな操作を阻害します。実際のところ、気にしなければそれほど大きな問題にはならないのですが、邪魔ではあります。
そうであれば、スロットルレバーの上半分をスロットル、下半分をリバースとして割り当てられるようなことができればいいのですが、X-Planeではそのように設定することはできません。

もう一つ。このジョイスティックのアナログ入力は、スティックによるエルロンとエレベーター、スティックのひねりによるラダー、それからスロットルレバーの4系統の他に、もう一つ、スロットルレバーの後ろにアナログ入力できるレバーというかボタンのようなものが付いています。スロットルレバーを握る左手の人差し指から小指までがあたる部分にあって、シーソー式に操作します。このシーソー式ボタンはスプリングでセンターに戻るため左右に分かれた操作となります。例えばラダーとして割り当てることができます。
ラダーに関してはスティックのひねりでできるため、せっかくならこのシーソー式ボタンは他の用途に使いたいです。X-Planeでは、アナログ入力をコマンド入力に置き換えられる設定があります。そこでシーソー式ボタンの右半分にブレーキを設定してみました。少し右に押すと普通のブレーキ力、いっぱいまで押すと最大のブレーキ力がかかるようにX-Plane上で設定できるため、たった2段階ではありますが、アナログチックにブレーキ操作できるようになります。しかしながら、タキシング中に普通のブレーキ力でブレーキをかけただけでも、強いブレーキ力になって、機体が前のめりでカックン、カックンとなります。
本来であればX-Planeにはアナログのトーブレーキがあるのですが、左足、右足に分かれた入力となっているため、一系統のアナログ入力に左右のどちらかのブレーキしか割り当てできません。X-Planeに左右同時トーブレーキの設定ができればいいのですが、それがないのです。

スロットルレバーの上半分と下半分を別々に割り当てる方法と、シーソー式ボタンによる左右同時トーブレーキ。この二つの問題を解決する方法を探していたところ、外部のソフトウェアを使うことでどうにかなりました。

まず、vJoyという仮想ジョイスティックソフトウェアを使います。これは、フライトシミュレーター用というわけではなく一般的に使われているもので、ジョイスティックを必要とするゲームのために、他のなんらかの入力(キーボードやマウス入力等)をジョイスティック入力に変換させることを想定したものです。そのような用途を求めるソフトウェア開発者向けに提供されています。Windowsのデバイスドライバとして動作し、Windows上で仮想ジョイスティックとして振舞います。しかし、一般ユーザーにとって、これ単体では意味を成しません。この仮想ジョイスティックを活用したアプリケーションソフトウェアを使います。

その一つが、ジョイスティック入力を変換できるUniversal Control Remapper(UCR)というソフトウェアです。例えば、スロットルスティックの上半部の入力を、仮想ジョイスティックの特定の軸出力の全域に割り当てるといったことや、二つのアナログ入力をマージして一つの軸出力に変換するといったことができます。マージするというのは、例えば、自動車ゲーム用のアクセルとブレーキの2系統のペダル入力を足して、航空機ゲームでラダーとして流用するということが考えられます。実際に試したわけではないので、その場合の操作感はどうか分かりませんが。

vJoy+UCRの組み合わせで、スロットルレバーの上半分をスロットルとし、下半分をリバーススラストとして割り当てることや、シーソー式ボタンの右半分をトーブレーキの左右両方に割り当てることが可能になります。

vJoyは以下から入手します。
http://vjoystick.sourceforge.net/site/index.php/download-a-install/download

UCRは以下から入手します。
https://autohotkey.com/boards/viewtopic.php?t=12249

vJoyをインストールした後、UCRをインストールしてください。

vJoyとUCRは、全面的に英語のソフトウェアですので、英語が理解できないと分かりにくいかもしれません。以下に、基本的な使い方を説明します。
1.UCRを起動
UCR.exeを起動します。

2.プロファイルを作成
UCRの右側にあるAddボタンをクリックしてツリーにプロファイルを追加します。
例えばX-Plane用として「X-Plane」という名前でプロファイルを作っておくと分かりやすいと思います。

3.プロファイルにプラグインを追加
作成したプロファイルにプラグインを追加していきます。プラグインというのは、変換を行う単位です。ひとつのプロファイルに複数のプラグインを作成できます。
たとえばAxisSplitというプラグインは軸入力の下側と上側を半分に分けて、上側、下側それぞれを別の軸出力に分けることができます。
上部にあるPlugin Selectionコンボボックスから目的のプラグインを選択してその横のAddをクリックすると、プラグイン名の入力を求めてきますので、適当な名前にして追加します。すると、青色のタイトルバーを持つプラグイン設定項目がウィンドウ内に追加されます。
そこでInput Axisとある部分が、入力側の軸で、Output側がvJoyへの出力となります。入力側のコンボボックスから、Stick番号を選び、さらにAxisを選んで、割り当てるジョイスティックとその軸を選択します。といっても、ジョイスティックの特定の軸が何番のStick番号でどのAxisか分かりませんから、見当をつけて選ぶ必要があります。右横にあるInput Previewで、選んだ軸の入力状況を見ることができますから、ジョイスティックの割り当てたい軸をガチャガチャ動かしながら、反応するものを探すことになると思います。Output側はvJoyのどの軸に出力するかを選ぶことになります。このようにして軸変換の設定であるプラグインを必要なだけ追加していきます。
設定が終われば、最後に一番下のSave Settingsボタンをクリックして保存しておきます。

4.X-Planeで設定
X-Planeではジョイスティックの設定画面でvJoyからの入力を設定します。
vJoyは普通のジョイスティックとして認識されていますので、物理的なジョイスティックと同じように設定することができます。

vJoy+UCRを使うことで、私の操作環境は大きく改善されました。しかし、実は完璧ではなく、vJoyからの入力が確実にX-Planeに入力されない現象があります。特にジョイスティックを素早く操作した際に入力位置が反映されないことがあります。私が主にやっている大型旅客機の操縦では、ゆっくりとした操作しかしないので大きな問題ではありませんが、たまにうまく動作しないことがあります。

vJoyとUCRは汎用のソフトウェアですので、X-Planeに限らず、FSXやその他の用途にも有効です。