Back
Featured image of post VRChatのキャッシュをRAMDiskに置く

VRChatのキャッシュをRAMDiskに置く

メモリじゃぶじゃぶ王のあなたに

この記事は2020年12月25日にはてなブログに掲載した記事を移行に際して加筆修正したものです。

この記事はイルカの人Advent Calendar 2020の最終日の記事です。

ごあいさつ

 全世界約2万人1のVRChatユーザーの皆さん、こんにちは。NEOKETの〆切に追われてクリスマスの事を完全に忘れていたイルカの人です。
 ――さて、バーチャル美少女(あるいは美少年、動植物、無機物……その他もろもろ)の皆さんはVRChatのキャッシュをどう管理していますか?キャッシュがあると一度訪れたワールドや一度出会ったアバターの読み込みが高速化しますが、反対に上限の20GBまで溜めてしまうとそれ以降訪れたワールドは毎回ダウンロードが発生するうえ、アバターは特に頻繁に読み込みが発生するのでPCと通信回線に不要な負荷がかかってしまいます2。それと、キャッシュが上限に達していなくても10~15GB程度まで増えるとどういう訳か急激にVRChatクライアントが重くなるという不具合もあります。(あと普通にストレージも圧迫されるし)
それゆえイルカの人の周りではキャッシュをたまに確認して10GBを超えていたら削除するというのが主流のようです……が、つい先日VRChat中の深刻なメモリ不足に悩まされPCのメモリを32GBに増設したところ、VRChat中は大体15GBくらいメモリを持て余していることが分かりモヤモヤしていたところ、ふとRamdiskの存在を思い出し、その読み書きが高速で、PCの電源が落ちるとデータが揮発するという特徴がキャッシュの保存先に最適であることに気づき「そうだ!Ramdiskにキャッシュ置こう!」と思い立って実際にやってみたので、その方法と効果について書き記そうと思います。

RamdiskにVRChatのキャッシュを置くメリットとデメリット

 Ramdiskにキャッシュを置くことのメリットとデメリットをとりあえず列挙してみました。でも正直な話、デメリットがほぼないんですよね……

メリット

・VRCは16GBでもメモリを食いつぶすから、と32GBのメモリを買ったら14GBくらい持て余してしまった分を有効活用できる!
・メモリは読み書きが高速だからインスタンス内の誰かがアバターを切り替えた時にプチフリする現象を抑制できる!
・PCをシャットダウン(あるいは再起動)すると自動でデータが消えるからキャッシュが増えすぎて重くなることがない!

デメリット

・Ramdiskに大量のメモリを常時占有されるので、精神衛生的にあまり良くない

Ramdiskの作り方

 メモリ上にドライブを生成するRamdiskの作り方ですが、何パターンかあります。例えばPCのマザーボードがMSI製ならユーティリティツールの「MSI Ram Disk」を使えば簡単にRamdiskが作れてしまいます……が、イルカの人のPCのマザーボードはASRock製なので、今回はRamdisk作成用ソフトウェア筆頭のRAMDAを使用します。RAMDAは機能制限のあるスタンダード版と、機能制限が解除され最大192GBのRamdiskが作成出来たり2000世代前までのデータのバックアップが取れるプロ版(1980円)があるのですが、この記事ではスタンダード版を使います。

セットアップ

 Webサイトからアンケートに答え、届いたメールからダウンロードページに飛んでダウンロードしたファイルを解凍してインストーラを起動して……という一連の流れはこの記事をご覧になる方々のITリテラシーがあれば解説の必要はないと考えたので、割愛します。
 さて、インストールが終わるとRAMDCntlというソフトウェアが増えているので、それを起動して「推奨設定」をクリックしましょう。すると32GB以上のメモリを搭載したマシンを使っている方ならRamdiskのサイズが7824MBにセットされると思うので、とりあえずソフト側の 「最初は推奨設定を使ってね!」 という指示に従って設定を適用して、PCを再起動しましょう。
再起動してOSが立ち上がったらまずはタスクマネージャーを開いてメモリ使用量を確認。「非ページプール」がだいたい8GBくらいあれば正常にRamdiskがメモリを確保できています。次はエクスプローラーを起動してマウントされているドライブを確認します。「RAMD-DRIVE」というドライブがマウントされていれば成功です!おめでとう!

RAMDAの設定をいじる

 Ramdiskを作成しても、このままではRAMDAが自動でRamdisk内のデータをバックアップしてしまうため、PCの電源を落としてもデータが消えなくなってしまいます(Ramdiskとしては正しいけど)。ということでRAMDCntlをまた起動して、「詳細設定」から 「RAM-DISKの自動保存/リロード」 という項目の 「バックアップ」 のチェックボックスを外します。この時Ramdiskのサイズが7824MB未満だったり、ドライブレターがZなのが気に入らなければついでに変更しておきましょう。

VRChat側の設定

Configファイルをいじる

 VRChatはバージョン2020.3.2p5(Build984)でConfigファイルを使ってキャッシュの保存先が変更できるようになったので、その機能を使ってRamdisk内にキャッシュフォルダを生成するように設定します。
 Cドライブ内のAppData%..\LocalLow\VRChat\vrchat3配下にconfig.jsonというファイルを生成します。あとは適当なテキストエディタ(なければメモ帳)で開いて

{
    "cache_directory" : "Z:/VRChatCache/"
}

と書き込んで保存してください。あ、後半の Z: の部分はRamdiskのドライブレターを変更している場合、それに合わせてくださいね。

動作確認

 VRChatを起動して、特になんのエラーも出なければ成功です。あっけないくらい簡単ですね!

実際どうなん

 具体的なデータは取っていないので体感ですが、キャッシュ済みアバターの読み込みが若干速くなったほか、読み込み時のプチフリがかなり軽減されました。言ってみればIntel Optaneを挿しているような状態ですね。何よりPCの電源を落とせばキャッシュがクリアされるので、キャッシュが肥大化してPCのストレージを圧迫したりやたらと重くなる不具合の餌食になることがなくなったのが素晴らしい!

一日遊びまわるくらいでは埋まらなさそう
一日遊びまわるくらいでは埋まらなさそう

 8GBのうちどのくらいキャッシュで使うんだろう、とも思っていましたが、普通にイベントに遊びに行ってそのあとフレンドと数個の小規模なワールドを巡ったりする程度なら2GBも使いませんでした。さすがに休日の昼間から夜にかけてフレンドとVket5を巡っていたら7GBも占領されていたので軽く焦りましたが、普段使いなら4GBくらいで十分ですね。

おわりに

 この記事はお役に立てたでしょうか。もしそうであれば嬉しいです。しかして……何の予告もなしに始めたアドカレでしたが、まさかイルカの人が最初の二日と最終日しか筆を執らずに済むとは思いませんでした。やはり持つべきものは友、ですね。
 寄稿者のみんな!そしてこの記事をご覧の皆さん!メリークリスマス!いいVRライフを!相反ではないですよね?


  1. Steam Charts調べ、2020年12/22日における過去30日の平均同接ユーザー数 ↩︎

  2. 公式ドキュメント(https://docs.vrchat.com/docs/configuration-file#cache-location)によればキャッシュが最後にアクセスされてから一定の期間が経つと自動で削除されるようですが、日本ユーザー圏ではパブリックアバターをあまり使わない影響で大量にキャッシュが作られてしまい、すぐに20GBに到達してしまいがちです ↩︎

  3. AppDataフォルダは隠しフォルダになっているので、エクスプローラーの表示設定を事前に変えておいてください ↩︎

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy