機能とパフォーマンスを両立させるには結合メッシュの生成が不可欠です。自分で作ってみたので、やり方についてまとめます。
結合メッシュとは何か
マップはセルに物を配置して作ります。物を1つだけ置いたときの負荷を1とすると、1000個置いたら負荷は1000倍です。そこまで単純ではないと思いますが、負荷が増えるのは確かです。そこで、複数の物を1個にまとめて負荷を下げよう、というのが結合メッシュ(Pre Combined Meshes)です。
Pre Visibilityとは何か
もうひとつ大きな特徴があります。結合メッシュは見えない場所にあって影響がない場合に、存在自体をなかったことにして処理を省略することができます。これをPre Visibility (Previs)といいます。これがグラフィックの負荷を大幅に下げます。
なぜ自分で結合メッシュを作るのか
Fallout 4本体のみ場合はベセスダが結合メッシュを作ってリリースしたので、特に何もする必要はありません。
セルに変更を加えるModを入れると、結合メッシュが破綻して正常に機能しなくなります。結合メッシュは環境に合わせて用意する必要があるのです。
物が消える
目の前の机が見る角度によって出たり消えたり、あるはずの壁が見えなかったり、逆にないはずの壁があって先に進めなかったりします。
Skyrimでいうところの遠景をDynDOLODで生成するのに似ています。遠景がおかしい場合は、遠くにある建物が見えなかったのに近づいていくと突然現れたりします。
解体できない
拠点で解体できるようになったはずの物が解体できないままになったりします。
パフォーマンスが著しく低下する
一番の問題はパフォーマンスが著しく低下するというものです。特にボストン市街は結合メッシュ無しではまともに歩けません。
物が多すぎて常に負荷が高い現象はドローコールが多すぎるために起こります。最近のENBではFPSとドローコール数を表示できます。
屋外での移動時にセルを読み込むタイミングで一瞬フリーズする現象はデータの不整合によるものと思われます。
プラグインをマスター化する
F4 Creation Kit Fixesを使う場合は、この作業は不要です。
CKの仕様で、あるespが他のespを参照しても、そのことを保存できません。espが参照できるのはesmだけだと決まっているからです。よってespをesm化する必要があります。
プラグインを正規化する
セルにNo Pre Visというフラグを設定できます。名前からしておそらくPrecombined Visibilityを無効にするということだと思います。これは取り除いた方がよさそうです。
一括して取り除くxEdit用スクリプトを用意しました。
"No Pre Vis"フラグを取り除く (pascal)
{
Remove "No Pre Vis" flag from cell.
}
unit UserScript;
function Process(e: IInterface): integer;
begin
if Signature(e) <> 'CELL' then
Exit;
if GetElementEditValues(e, 'Record Header\Record Flags\No Pre Vis') <> '0' then
SetElementEditValues(e, 'Record Header\Record Flags\No Pre Vis', '0');
end;
end.
CKで作業する時のコツ
よくわかりませんが、CKがすぐに落ちます。
- MO2とCK以外のアプリは起動しない。
- CKは関係するプラグインだけ読み込む。
- プラグインはすべて英語(マルチバイトを排除)にしておく。
- CKが処理している最中は何もしない。(一切操作しない)
- 処理が終わるとツールバーにカーソルを合わせたら水色になるので、それで判断する。(CKが忙しいときは水色にならない)
- 1つ操作したら保存する。
結合メッシュを作る - 実践編に続きます。