BA2ファイルを再構築するとパフォーマンスが向上するらしいです。手順についてまとめました。
BA2ファイルって何?
BA2化して読み込みを速くするで解説しています。
PCの基礎知識、コマンドプロンプトの操作方法を理解していないと難しいので、自分で勉強するか、あきらめましょう。
なぜBA2ファイルを再構築するのか
コンピューターはデータが多ければ多いほど、大きければ大きいほど処理が増えて遅くなります。
10ページの本の中からほげほげという章を探し出すのは簡単ですが、500ページもあったら探し出すのは大変です。ですから索引を用意しておいて見つけやすくするわけです。
500ページの本が1000冊あったら、きちんと本棚に分類していたとしても、もっと大変になることは想像できると思います。
初版の本があり、となりに改訂版があり、さらに最新の訂正事項をまとめた小冊子があるとします。123ページを開いてくださいと言われたら、まず改定版があるので初版は無視します。小冊子にあるかもしれないので、とりあえずは小冊子を開きます。見つかればそれでよし、なければ改訂版を開いて探し出します。
1度だけならまだいいですが、これを数千回繰り返すとなると無駄が大きいわけです。ですので、全部まとめた最新版の本を1冊だけにしてあとはどこかに捨ててしまえば、123ページを開けと言われたらすっと開けるわけです。
というわけで、バニラのBA2ファイルにたいして、新規BA2で差し替えだのLoose fileで上書きだので混沌としているMod環境を、バニラのBA2ファイルに最新のファイルを反映してしまって、それだけにして残りは全部捨ててしまおう、というのが趣旨です。
バニラのリソースを置き換えるだけのModでリソースをBA2ファイルにまとめている場合、そのBA2ファイルを認識させるためだけのダミープラグインが付属しています。リソースをバニラのBA2ファイルに統合してしまえば、ダミープラグインが不要になります。
Fallout 4 Mod List and Load Order Guide (BiRaitBec Modlist)
この考え方を提唱し、作業に役立つツールを共有してくれているのがBiRaitBec氏のFallout 4 Mod List and Load Order Guide (BiRaitBec Modlist)になります。
Fallout 4のあらゆるものを統合して改善しようとしています。この中のStep 1: Textures Optimizationに的を絞って以降は解説していきます。
WorkBaseの使い方
まず、上記のサイトからWorkBaseを入手して展開します。
余計なトラブルを避けるためにProgram Files以下には置かない方がいいです。
WorkBase\OriginalBa2フォルダの中に、Fallout 4\Dataフォルダの中にあるなんとかかんとかTextures.ba2という名前のバニラのba2ファイルをコピーします。全部で15個あるようです。
WorkBase\PatchedFilesフォルダの中に、差し替えたいテクスチャを置きます。
WorkBase\Installer.batを実行します。WorkBaseフォルダの中にコマンドプロンプトへのショートカットを置いておき、それを開いてから実行するといいでしょう。
Installer.batが行っている作業は以下の通りです。
- OriginalBa2フォルダからba2ファイルを探して、以下の作業を繰り返します。
- ba2ファイルをWorkingFilesフォルダに展開します。
- PatchedFilesフォルダの中身をWorkingFilesにコピーします。既存のファイルのみコピーするので、新規追加はなく、差し替えのみになります。
- WorkingFilesフォルダをまとめてba2ファイルを作成し、PatchedBa2フォルダの中に置きます。
- WorkingFilesフォルダを削除します。
- 元のba2ファイルを削除します。
まとめると、ba2の中身を最新ファイルに差し替えるということです。
最後のba2ファイルを削除する行はダブルクォーテーションが抜けているせいでエラーになって失敗します。私はこの行自体をなくしました。
最後に、PatchedBa2フォルダの中にできた差し替え済みba2ファイルをDataフォルダに置けば完了です。
ですが、Dataフォルダに直接は置かないで、MO2にModとして登録した方がいいでしょう。
Main Repackについて
BiRaitBec氏がまとめたバニラテクスチャの差し替えです。これもダウンロードしてPatchedFilesフォルダに展開してもいいですし、しなくてもいいです。
Main Repackは万人向けの標準スペック用らしく、PCのスペックに合わせてさらに別のものが何種類か用意されています。
テクスチャ以外の差し替えについて
このInstaller.batはテクスチャ前提の作りになっています。
ですが、Archive2.exeの使い方を変更すればテクスチャ以外にも使えます。
変更するのは2回目のba2にまとめている方で、最初のオプション無しのパスを指定している引数からtexturesという固定文字列を無くし、テクスチャ形式を指定している-f=DDSの部分も無くします。
デフォルトのテクスチャの場合はこちらです。
Archive2.exe "%cd%\WorkingFiles\textures" -f=DDS -c="%cd%\PatchedBa2\%%~nxf" -r="%cd%\WorkingFiles"
メッシュの場合はこちらになります。
Archive2.exe "%cd%\WorkingFiles" -c="%cd%\PatchedBa2\%%~nxf" -r="%cd%\WorkingFiles"
Mainという名前がつくba2ファイルの場合は無圧縮にした方がいいようです。
Archive2.exe "%cd%\WorkingFiles" -c="%cd%\PatchedBa2\%%~nxf" -r="%cd%\WorkingFiles" -compression=None
意味はこうなります。
Archive2.exe "格納するフォルダ(またはファイル)" -f="フォーマット形式" -c="ba2ファイルの名前" -r="ba2内でのパス(ルートを指定)" -compression="圧縮形式"
ちなみに、最初のパス指定は対象ファイルを指定しているだけで、ba2内のパスは-rオプションで別途指定するので、これで問題なさそうでした。
また、-fの方は省略するとGeneral扱いとなり、テクスチャ以外はGeneralで作ればいいので、わざわざ明示する必要はないです。
-compressionは省略するとDefaultとなり圧縮ありとなります。
元のba2ファイルの設定を維持するのが無難と思います。メッシュはおそらく圧縮しても大丈夫で、サウンドは無圧縮でないと鳴らなくなります。
差し替えのコツ
Modの数が多いと差し替え用ファイルをピックアップするのが大変ですが、MO2をうまく使うと楽できます。
バニラのファイルをリプレースしているファイルを検出する
バニラのba2ファイルをまとめたmodを1つ作ってMO2に登録します。これで競合しているファイルを検索できるようになります。
あとは、競合しているファイルをWorkBase\PatchedFilesフォルダに移動させて、競合がなくなるまで繰り返します。
コピーではなくて移動です。コピーだとba2ファイルの中身を差し替えたのにそれをまたModで上書きすることになるので差し替えの意味がありません。私は差し替えたファイルは抜き出して別のModとしてMO2に登録してわかるようにしました。
この作業はあくまでもバニラテクスチャの差し替えであって、新規追加テクスチャについてはこの方法では対応できません。バニラのba2ファイルに強引に追加するといいのかもしれません。
メッシュのba2を再構築する場合、バニラにはないMorphのtriファイルの扱いに困ります。私は新規に突っ込んでみましたが、それで特に問題なさそうでした。
ファイルを仮想環境で構築する
ba2ファイルを展開してModのファイルで上書きして再度ba2ファイルにまとめる、この作業はDataフォルダ以下に直接Modをインストールするようなものです。つまり今どき非効率であり、環境をかえると最初からやり直しになるので非常に面倒です。
そこで、展開後のファイル、Modで差し替えるファイルをそれぞれMO2にModとして登録します。これでいつものように有効、無効の切り替え、優先度の変更ができます。ba2ファイルにまとめる時はMO2から起動したコマンドプロンプト上で行います。
ポイントはba2ファイルごとにフォルダを1つ作ってまとめることです。こうすることで他のファイルとごちゃまぜにならずに済み、簡単にba2ファイルにまとめられます。
この方法だと毎回展開と上書きコピーをしなくて済むので早いです。さらに、triファイルのようなファイルを新規に追加したい場合も漏れがなくなります。
まず、Fallout 4のDataフォルダ直下にWorkBaseを作ります。
Fallout4 – Meshes.ba2を作成するバッチファイルは以下のようになります。
@echo off mkdir PatchedBa2 Archive2.exe "%cd%\Fallout4 - Meshes" -c="%cd%\PatchedBa2\Fallout4 - Meshes.ba2" -r="%cd%\Fallout4 - Meshes"
MO2にWorkBase直行のコマンドプロンプトを登録します。
Fallout4 – Meshes.ba2を展開したものを、以下の構造になるようにMO2にModとして登録します。
Fallout4 - Meshes\WorkBase\Fallout4 - Meshes\Meshes
CBBEのメッシュなら以下の構造になります。
Caliente's Beautiful Bodies Enhancer -CBBE- Meshes\WorkBase\Fallout4 - Meshes\meshes
すべて入れ終わったら、すべてきちんと競合しているか、優先度は意図した通りかを確認します。
コマンドプロンプトを起動してバッチファイルを実行すればoverwriteにba2ファイルが出来上がります。
結合メッシュはタイムスタンプに注意する
結合メッシュ(PreCombined Mesh)とPrevisはタイムスタンプに意味があり、プラグイン内にて設定されている日付より新しいと無効になってしまうようです。
ファイルはMeshes\PreCombinedフォルダ以下とVisフォルダ以下のものが該当します。
プラグイン内のレコードはCellのVISIとPCMBです。
ファイルのタイムスタンプを変更しないか、レコードの日付を更新すればいいと思われます。
CellのVISIとPCMBを一括で更新するxEdit用のスクリプトです。日付は2022-3-27になっていますので、適宜変更して使います。
{ Update VISI. } unit UserScript; function Process(e: IInterface): integer; var s: String; begin if Signature(e) <> 'CELL' then Exit; // month day year s := IntToHex(3 * $20 + 27, 2) + ' ' + IntToHex( (2022 - 2000) * 2, 2); if GetElementEditValues(e, 'VISI') <> s then SetElementEditValues(e, 'VISI', s); if GetElementEditValues(e, 'PCMB') <> s then SetElementEditValues(e, 'PCMB', s); end; end.
DLCで上書きされるメッシュがある
Fallout4 – Meshes.ba2に含まれているメッシュの一部はDLCで上書きしています。
Vault 111のスーツやChild of Atomのラグが該当します。
Fallout4 – Meshes.ba2だけに統合しても巻き戻るので注意します。
動作確認
差し替え済みba2ファイルをMO2にModとして登録すれば、有効と無効を切り替えてゲームを起動すれば、テクスチャが反映されているかどうかで確認できます。
しばらく様子を見てみましたが、ゲームが安定しました。
HorizonとPAC NPCを中心に大量にModを入れている環境ですが、テクスチャはすべて、さらにメッシュのほとんどをバニラのba2ファイルに組み込んだ結果、以下の現象がほとんど起こらなくなりました。
- NPCの顔がかなりの頻度で黒くなる→なくなったわけではないが頻度が低下
- NPCの胴体が透明になる→なくなったわけではないが頻度が低下
- 屋外を移動中にカクつく→なくなったわけではないが頻度が大幅に低下
決め手となったのはわかりませんが、スキンやフェイステクスチャ、CBBE体型の装備あたりが効果的だったのかなと思います。また、Modのba2ファイルをなくせたことでba2ファイルの総数、ba2ファイル内の総エントリ数が減ったことも関係していると思います。
ランダムフリーズ(CTDではなく)に悩まされていますが、これはあまりかわりませんでした。差し替えてから数日はとても安定していたので、効果が出たのだと錯覚していましたが、さらに経過するとまたいつものようにフリーズしまくりました。なんとなくスクリプト負荷のように思います。
不具合
原因不明ですが、HumanのBodyテクスチャだけはLoose Filesにしないとなぜか認識されませんでした。具体的にはCBBEのテクスチャです。
さらなる応用
この作業にてバニラのリソースは大幅に減らせますが、Modで新たに追加されたリソースはそのままです。
そこで、Modで追加されるリソースもひとつのBA2にまとめてしまうことで、BA2ファイルの総数を減らすことができます。Modによってはほんの僅かな数しかないのにBA2で提供されている場合もあります。
とはいえ、すべてのModをまとめると運用が大変ですので、私はカテゴリごとにまとめてみました。きちんと統計を取っているわけではないのですが、なんとなく以下のCTDが減ったように感じました。
Unhandled exception "EXCEPTION_ACCESS_VIOLATION" at 0x7FF65EDC7543 Fallout4.exe+1D37543 (中略) STACK: (中略) [RSP+60 ] 0x7FF66308F160 (BSTextureStreamer::Manager*) (中略) [RSP+118] 0x26D4AE82060 (BSResource::`anonymous namespace'::LooseFileStream*)
このCTDは私の環境では7割くらいをしめており、何とか無くせないかとずっと調べているのですが、ネットで調べると以下の情報が出てきます。
- ルーズファイルをなくす
- BA2ファイルが極端に多いと発生
- ロード順を見直したら改善した
BA2ファイルが減ったことで改善したのかなと考えています。