AKAGI Rails

鉄道模型シミュレーターで遊んでいたはずが、気づいたらPythonなども。

VRMNXで大型レイアウトを遊ぶときのJITレンダリングの設定について

あけましておめでとうございます。2021年もよろしくおねがいします。

さて、VRMデータ広場で先日公開となった、shirokuma氏の「複線レイアウト」をVRMNXで開いて遊ぼうと思ったところ、トラブルに遭遇しました(それで、冬休み最後の貴重な時間を4時間も溶かして解決した)ので備忘録的に書き留めておきます。

分かってしまえば簡単に解決可能なトラブルだったので、みなさんぜひ「複線レイアウト」をお手元の環境で鑑賞してみてください。4時間かけて見てみる価値のあるレイアウトでした。

事態のあらまし

とりあえずレイアウトファイルをダウンロード。このレイアウトはバージョン5で制作されていますから、NXアプリケーションで開くと変換が行われます。部品点数の多いレイアウトでは、変換にもそこそこ時間がかかります(10分くらい)ので辛抱がいりますが、ここは問題なくできました。次回以降の時間短縮のため、vrmnx形式で保存し直しました。

この時点で、試運転モードでの起動にはそれほど時間もかからず成功しました。運転モードは起動に10分ほどかかりましたが、この時点では可能でした。

しかし、手持ちになく欠損が気になる部品がいくつかありましたので、全部ではありませんが、精密樹木(夏)、ケーブルトラフBなどの不足部品を購入しました。変換してvrmnx形式で保存し直した時点で欠損部品のデータが抜けたファイルになっていますので、もう一度、オリジナルのバージョン5のレイアウトファイルから変換をかけました。

すると運転モードのビュワー起動がいつまで経ってもできない。タスクマネージャでメモリやVRAMの使用状況を確認するが、特に一杯になっている様子はありません。NXアプリやWindowsを再起動してトライしましたがダメでした。もともと時間がかかるのを覚悟なので、ビュワーが起動するまで30分とか1時間とか待っていたのでここで時間が溶けていきました。

第一には部品点数が増加したことで変換にミスったのではないかと疑いましたが、これに関してはユーザーはお手上げなので、次点で疑いをかけたJITレンダリングを切ったところ、これが正解でした。1秒未満でビュワーが無事に起動しました・・・。なお、この状態でもだいたい60fpsは出ました。

解決策

大型レイアウトでビュワーの起動に失敗する場合は、JITレンダリングを切ってトライする。

(レイアウターのビュー>ビュワー表示設定>高速ポリゴンを使用しない にチェックを入れる)

ディスカッション

今回の事例で言うと、初めは起動した「運転モード」のビュワーが、ストラクチャを追加購入しレイアウトの部品点数が実質的に増加したことで起動しなくなりました。このとき購入したストラクチャ(精密樹木、ケーブルトラフ)は、ポリゴン数が多い上に配置点数も多かったことから、JITレンダリングにおいてVRAMに展開すべきデータ量が一気に増加し、GPUの性能をオーバーしてしまったものと考えられます。

JITレンダリングとは、ストラクチャ等のポリゴン座標の計算を、毎フレームで行うことなく、ビュワー起動時に計算してVRAMに収めておくことで、フレームレートの向上を図る機能です、たぶん。)

ビュワーの高速化のためのJITレンダリングのはずですが、今回のような大型レイアウトでは逆効果となってしまいました。一体なんのための機能なのか疑いたくなってしまいますが、ここでは、2つの効果を挙げてみたいと思います。

ひとつは、「フレーム同期」を取っておけば、毎フレームの計算量が少なくなっていますので、GPUに余力が生まれ、節電になります。そのほか、ChromeやDiscordなどの別アプリや、画面共有機能に割く余力も生まれると考えられます。

もう一つ、純粋にVRMで遊ぶのに役に立つシーンとして、小さなレイアウトを濃密に、無理矢理ストラクチャなどを作り込んでいる場合です。無理矢理ストラクチャでは見えない位置のポリゴンが多数できてしまいますが、レンダリング範囲内にあるポリゴン数が多いと毎フレームの計算量が増えるため、JITレンダリングの効果が得やすいと考えられます。

一方でshirokuma氏のレイアウトは、広大な面積のレイアウトにゆったりと情景を敷設しているのが特徴です。部品点数は多いものの、レンダリング範囲に入るポリゴン数が超弩級に多いわけではありません。(そうは言っても、平均的な作品よりは圧倒的に細かく丁寧に作られています。)したがって、JITレンダリングではVRAMが不足する事態となりましたが、JITレンダリングを行わずとも、(少なくとも私のマシンでは)十分な速度で鑑賞することができました。

今回このような考察を与えましたが、今後、VRMNXの成長過程を知らないユーザーが高台・濃密なレイアウト作成に挑み同じようなトラブルに遭遇したとしても、JITレンダリング(高速ポリゴン)の設定項目に辿り着くとは思えません。(だからこうして備忘までしている。)そこで、アプリケーションとしては、JITレンダリングに失敗したのなら失敗したで、そのままフリーズするのではなく、ダイアログを出してレイアウターに戻るとか、JITレンダリングを自分で切ってリトライするとか、そういう優しい設計が必要です。

f:id:AKAGI-vrmstation:20210103221604j:plain
とても岐阜っぽい気がする駅

(車両テクスチャーも使っていただいています。感謝です)