概要
本記事は一連のシリーズの続きではあるが、実際のチューニングはその3で十分だ。
今回はその中で”FIBER_FRAME_TIME_FRACTION“をチューニングするにあたって必要な知識について記載する。本記事で紹介しているFSPSは、改版時点でPrepar3D v4.0に対応していない。
※本記事の初版は2016年8月21日となる。
※2017年6月3日 改版。
FIBER_FRAME_TIME_FRACTIONとは?
fsx.cfg及びPrepar3d.cfgの中の設定として同値が存在するが執筆時点ではGUIからは設定ができない。
この値はいったい何を表すのだろうか?
その3て少し触れた程度であったが、今回はここを深堀りする。
FIBER_FRAME_TIME_FRACTIONとはPrepar3Dのチューニングガイド(英語)によるとこう書かれている。
「この設定はデフォルトではPrepar3d.cfgにはデフォルトでは存在しない。必要なら追加する必要がある。」
存在するべき位置は[MAIN]セクション内だ。
分からなければ、[MAIN]と書かれた場所の次の行に”FIBER_FRAME_TIME_FRACTION=0.33″と書けばいい。
なおcfgへの記述はFSX/Prepar3Dを起動していない時に実施する。
デフォルト値は0.33だ。これは1FPSの時間の33%をシーナリーのデータを読み込む時間に利用するという意味だ。ここをスタート地点として設定していく。
描画と読み込み時間の計算をしてみよう
仮に25FPSの場合で考えてみよう。
「チューニングをしよう」と思い始めるのが15FPSぐらいである人も多いだろうが、今回は正常時の値で。
1秒 = 1000ミリ秒
1000ミリ秒 / 25フレーム = 40ミリ秒
1フレームの平均時間は40ミリ秒となる。この場合、40ミリ秒 / 33% = 13ミリ秒がシーナーリーをロードする時間ということになる。
シーナリーの読み込み時間を計算してみよう
さて。目安であるため実際のシミュレータ内では誤差は大きめではあるものの、1GBのシーナーリーが画面内に現れる時間はどのぐらかかるだろうか?
SSDではないHDDで、ざっくり20~80MB/秒だ。
※フライトシミュレータに使われるようなサイズのファイルで。
仮に50MB/秒としよう。1秒のうち33%しかシーナリーの読み込みに時間が使わせてもらえないとすると単純に16.5MB/秒になる。1GBのシーナリーだと62秒かかることになる。
遠くから飛行機で重い街や空港に近づくとパラパラとデータが読み込まれる理由がこれだ。
※とはいっても、シミュレータが完全にこの値を守るわけではない。
最速でもこの時間がかかるということだ。
遠くから近づいていて目立たないだけで、着陸するまでに必ずこの時間がかかる。
空港のゲートからスタートする際にロード時間がかかるのは、最初から全てロードする必要があるからだ。
軽減される事項
実はロード時間のうち、テクスチャだけは同一時間内で平行で読み込みができる。
これが[DISPLAY]セクションにあるTextureMaxLoadだ。
デフォルト値は6であるが、標準では記載がないのでもし手動で書く場合はTextureMaxLoad=6となる。
この値は3の倍数でなくてはならないので、3・6・9といった値になる。
前述の内容を思い出してみよう。どんなに平行の速度を上げようが、HDDの性能と設定された読み込み時間、どちらかが頭打ちになれば遅くなる。
例えSSDを使っていてもPrepar3Dの場合は、デフォルト値のままで良いように思う。
6で十分だから6に設定されていると言っても良い。
※FSXでは未検証。
では改めて考えよう
先ほどの画像だ。
結論をいうと、データロードや航空機やAIの動きを計算、描画するまでが遅い場合。
例えば描画すべき物体が多かったり、雲が多かったり、AI機が多かったりグラフィックボードの性能が悪い場合だ。
その際は青い領域である26.8ミリ秒でおさまらないことがある。
そうするとそれらが原因となって、FPSが設定値より低下することになる。
オレンジの領域を割り当てすぎると、青の時間が減るのだ。
海や山上を飛ぶ場合、高度の大小、街の近く等様々な状況に応じてこの値の割合は変わりうるのがチューニングで難しいポイントだ。
「この場所のこの高度で最適化したい」
それをあなた自身が決めるのが一番大事なことだ。設定方針を決める必要がある。
FPS設定のunlimitedは?
特定の条件下が60FPSに達し、「unlimitedが一番」と思うこともあるかもしれないが、カクッカクッと変な動きをすることがある。特に重いデータがある地域でだ。
アドオンを全く入れていないような軽い環境なら影響は少ないが、この値は必ずunlimited以外を設定した方が良い。なぜなら描画とシーナーリーのロードに必要な時間を正しく計算できなくなるからだ。
必ずFPSの値を入れよう。
遅ければ15FPS。早いマシンでアドオンが少なければ30FPSでも良い。
支援ツール
実はこれらをある程度最適化してくれるツールがある。
それは”FSPS”だ。
FSX用とPrepar3D用が別々の製品としてリリースされている。執筆時点で14.9EUROだ。
※筆者は現在はこのツールを利用していない。
起動するとこのような画面となっている。
先にシミュレータを起動して空港などにでている必要がある。
まずはシミュレータ側で目標としたい値を設定しておこう。
先ほどの通り、Unlimitedは論外だ。
コンピュータの性能が良くないのに欲張って30FPSなどと設定をすると、正しくチューニングできないので注意すること。
スポーツカーに10tトラックの荷物を載せるのか?というのと同じだ。上限は自分で適切に設定する。
赤枠内の最低ラインのFPSを希望値としてスライダーで設定する。
すると緑枠内に設定される。
次に中間値を設定する。シミュレータに設定を行った値より下の数字だ。
後は飛行中に低い値に合わせるか、真ん中に合わせるか設定をするだけだ。
後はリアルタイムで勝手にシミュレータ側のFPS目標値をいじってくれる。
気を付けるのはシミュレータを起動した後に、本アプリを起動し、本アプリを終了した後にシミュレータを停止することだ。飛行中にこの赤い線と青い線を割り込んだままの場合は設定が高すぎるということになる。FPS設定かその他の設定を下げていこう。
重めの空港のランディングでFPSを設定した例で示そう。
実際に飛行してみると、「ツールにお願いをしてみる」レベルなので設定値を下回ることもあった。
筆者の場合は、起動停止の順序等が面倒なので執筆時点ではこのテストを行って最適なFPSの値を見つけることだけに利用している。
メモリやCPUの利用量も表示してくれるので便利だ。
このツールはシミュレータのFPSのゲージをリアルタイムでいじるだけだ。
その他の設定やチューニングは自分で行う必要がある。
ブラー(blurr)とスタッター(stutter)とは?
よく聞く2つの単語。これは何だろうか?
主にFIBER_FRAME_TIME_FRACTIONに関係するのだが、同値を大きくすると全体の時間の中でデータのロードを優先するので、ガクッガクッと画面がなる。
特に着陸間際の場合は次々に現れる建物をロードしようとするため特に発生する。
これがスタッターだ。特に機外視点で横から観たような場合は急に視界に物体が現れるのでこのような状況になりやすい。
ブラーはというと、テクスチャのデータがゆっくり読み込まれて、ぼやっとした地表などがだんだんとハッキリしていく状況を指す。
ブラーとスタッターは、どちらかをとると、どちらかを失うことになる。
スムーズに操縦したければ、データの読み込みを優先しない。綺麗さを重視する場合はデータ読み込みを優先する。
しかしモスクワシティXなどのような、狭い地域で極端な容量のシーナーリーの場合は、処理が間に合わず1秒程度完全にシミュレータが止まってしまうこともある。
FPSとして設定すべき値
Unlimitedは、前述の通り論外と考えてよいだろう。
では、60FPSまでの好きな値を何でも設定してよいかと言われればNOだ。
「スタッターを無くす」という事が目標の一つの場合、FPSとして取りうるのは画面から設定できる範囲の場合、これらの値だ。
10、12、15、20、30、60
理由は簡単。ディスプレイのリフレッシュレートが60ヘルツであることが一般的だからだ。
結論からいうと、このディスプレイの周波数の約数である必要がある。
理由は単純である。0.5秒の時間内で見ると、ディスプレイは30回リフレッシュする。
その上で、シミュレータが30FPSの設定の場合は、15回更新されることになる。
上下のディスプレイのシミュレータの描画のタイミングが1:2で推移している分には、引っ掛かりが無いが、約数でない値の場合は、その「ツケ」は次のリフレッシュのタイミングが払うことになる。
結果、足でスキップするような形でタイミングがずれてくるのである。
スタッターの原因は複数の要素があるが、これが約数でない場合は、完全に排除できないという点は注意が必要だ。
これらはFPSを固定化した場合だ。
VSYNCをONにした場合は、Unlimited設定も、一般的なディスプレイでは60FPSがFPSがレフレッシュレートの最大になるであろう点もポイントだ。しかし、内部での計算が正しく行われるか執筆時点では不明のためUnlimitedは使わないのが良いだろう。
トリプル・バッファリングでの対策は有効か?
Tripple Bufferingは、その対策になるのではないか?
そう思う人もいるかもしれないが、それは十分にFPSが高い時の話である。
15FPSで描画されている際に、操作から描画まで最大で0.066秒弱かかる。
トリプルバッファの場合は、最大でこの2倍弱の時間である、0.133秒弱ということになる。
そう。0.13秒も操作の結果が遅れて描画されるのだ。これでは細かい操作はできない。
それどころか、見えない1フレーム内で別な操作結果の描画が控えているのだ。
結論からすると、60FPSの描画をできていれば、その遅延も意識することなくスムーズさが人間の感覚では増加するが、15FPS程度では逆に邪魔になるという事だ。
これはこのようなシナリオだ。
- ジョイスティツクで5度上昇を指示
- 次の描画では0度のまま
- もう5度上げる。
- 5度だけ描画では反映されている。
- 姿勢を-5度戻すように操作する。
- それなのに遅れて10度で機体が下がる。
このようなことを繰り返すことになる。1フレームの時間が長いほど、違和感がでるのだ。
150ノット = 270kmの速度の場合、1秒で75mの距離が変わる。15FPS。
備わち0.13秒なら10mほど前進する。
トリプルバッファの場合は20m近くの未来を予測することになる。この差は低FPSの時、着陸の姿勢をとる際には大きいはずだ。
最後に
恐らく中盤までの説明を読み飛ばしてツールの文章を読んだ場合は、理解できなかったと思う。
シミュレータの中身を理解した上で利用すると、FSPSはチューニングの手助けになってくれるが完全に自動化は無理だ。
チューニング製品の中には、「FPSが早くなります!」という割には描画の画質を勝手に落とす製品などがあるが、これらを複数利用するとチューニングの要素が多すぎて設定している本人が理解できなくなるので複数利用はお勧めできない。