エリア移動後に地形が真っ黒になる問題への対処
はじめに
プレイ環境をWindows10からWindows11に移行したところ、エリア移動後に地形が真っ黒になりキャラクターやオブジェクトしか表示されなくなる問題が発生するようになりました。
数時間で起きる場合もあれば、十数時間で起きる場合もあり、再現時間については規則性はありませんが、再現自体は「いつか起きるという」確実性があります。
困るので対処方法を模索しました。
この手順でのpol.exeに対するフラグ変更は自己責任でおねがいします。
原因推定
FinalFantasy 11 Configの設定を色々いじって検証した結果、次のような仮説にはなりました。
テクスチャ周りでメモリを沢山利用するような設定にすると発生しやすくなる。
情報収集
海外の掲示板に同様の事象についての情報がありました。
それらの情報からもメモリ不足が理由ですが、その不足というのはFF11は32bitアプリケーションで2Gまでしかメモリを使えない状態でコンパイルされているということが、理由としてあげられていました。
対応するために、専用のパッチプログラムもどうも落ちていましたが、素性のわからないプログラムを動かすのは良くないので、どういう対処を行っているかを調べたところ次のキーワードが見つかりました。
editbin /largeaddressaware
オブジェクトが 2 ギガバイトを超えるアドレスをサポートするかどうかを指定します。
このフラグを有効にすると、32bitアプリケーションでも2Gではなく4G(厳密にはユーザプロセスとしては3G)まで利用できるようになります。
EditBinに関する情報
Visual Studio LARGEADDRESSAWAREオプション - hishidaの開発blog
/LARGEADDRESSAWARE (大きいアドレスの処理) | Microsoft Learn
32 bit アプリケーションで発生するメモリ不足に関連するエラーについて | Japan Developer Support Core Team Blog
具体的なフラグの付与手順
VisualStudio 2022のインストール
以下のURLからVisualStuido 2022をインストールします。
インストール時に次のパッケージは選択しました。(多分不要なものも多い)
- C++によるゲーム開発
- Windowsアプリケーション開発
- C++によるデスクトップ開発
- .NETデスクトップ開発
EditBinコマンドの実行確認
以下の実施はスタートメニューから「x86 Native Tools Command Prompt for VS 2022」を右クリックメニューの「管理者として起動」で実施
変更前の状態確認
cd "C:\Program Files (x86)\PlayOnline\SquareEnix\PlayOnlineViewer" dumpbin /headers pol.exe
C:\Program Files (x86)\PlayOnline\SquareEnix\PlayOnlineViewer>dumpbin /headers pol.exe Microsoft (R) COFF/PE Dumper Version 14.40.33808.0 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file pol.exe PE signature found File Type: EXECUTABLE IMAGE FILE HEADER VALUES 14C machine (x86) 4 number of sections 4E3BC514 time date stamp Fri Aug 5 19:25:24 2011 0 file pointer to symbol table 0 number of symbols E0 size of optional header 103 characteristics Relocations stripped Executable 32 bit word machine OPTIONAL HEADER VALUES (以下省略)
この時点では次の記載がない。
Application can handle large (>2GB) addresses
EditBinコマンドによるフラグの変更
cd "C:\Program Files (x86)\PlayOnline\SquareEnix\PlayOnlineViewer" editbin.exe /LARGEADDRESSAWARE pol.exe
※pol.exeのバックアップ用のコピーは別途実施しています。
変更後の状態確認
C:\Program Files (x86)\PlayOnline\SquareEnix\PlayOnlineViewer>dumpbin /headers pol.exe Microsoft (R) COFF/PE Dumper Version 14.40.33808.0 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file pol.exe PE signature found File Type: EXECUTABLE IMAGE FILE HEADER VALUES 14C machine (x86) 4 number of sections 4E3BC514 time date stamp Fri Aug 5 19:25:24 2011 0 file pointer to symbol table 0 number of symbols E0 size of optional header 123 characteristics Relocations stripped Executable Application can handle large (>2GB) addresses ★★★ こちらが追加されている 32 bit word machine OPTIONAL HEADER VALUES (以下省略)
次回実行用のバッチの用意
当然ながらpol.exeがFF11のバージョンアップで更新された場合にはフラグは元に戻るので、再実施する必要があるためBAT化しました。
cd "C:\Program Files (x86)\PlayOnline\SquareEnix\PlayOnlineViewer" "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\bin\Hostx86\x86\editbin.exe" /LARGEADDRESSAWARE pol.exe "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\bin\Hostx86\x86\dumpbin.exe" pol.exe
まとめ
こちらの対応後数日経過しましたが、発生しなくなりました。
しかし、もう少し様子は見たいと思っています。というのも、これで治るのも理由に説明がつかないためです。
メモリを見る限り2Gオーバーも使ってはいません。(瞬間的に使うようなタイミングがある?)
ゲームの近況
ソーティでもたまにしつつの、のんびり生活です。 プライム武器は遥か彼方の目標です。