TOP

 

● 覚書: NIFの最適化

 

他サイトでやり方が詳しく解説されていますが、それを見ながらやる機会があったので、

自分なりに気づいた点などを覚書しておきます。

 

まずNIF (メッシュファイル)は何なのか、これを最適化するとどうなるのかの詳しい説明は省きます。それは他サイトのほうが詳しいと思います。

大雑把に言えば、メッシュの無駄な部分を修正し、ゲーム上での表示負担を減らす効果があるようです。適正なやり方をすれば見た目はそのままで、FPSが改善し、処理が軽くなってゲームの安定性も増すようです。

作業工程は難しくありませんが、PyFFIというソフトで大量のNifファイルを処理するのに何時間も懸かります。また、全体的に徹底して最適化するにはBSAファイルの解凍&再BSA化もやらなければなりません。

 

まず用意するソフトは以下の通りです。まずこれらをリンクから、もしくは探して保存して下さい。

ファイルのいくつかは既に古いバージョンであり、いつダウンロード出来なくなるか解りません。新しいバージョンはファイル同士の連携の問題が面倒なので、ここでは古いバージョンでやります。どうしても最新版のソフトでやりたいという場合は、一括処理用のバッチファイルの編集をする必要があります。

 

◆ 必要なファイル

python-2.5.x.msi

python(パイソン)言語のコアファイルです。この記事を書いている時点でバージョン2.6〜3も出ているようですが、PyFFI-py2.5-x.x.x-windows.exe をインストール出来るのはバージョン2.5のみなので、必ずバージョン2.5にして下さい。

注意しなければならないのは、Wrye Bash も python言語コアで動いているという事です。つまりうかつにインストールしてpython のバージョンを変えると、Wrye Bash が起動出来なくなる事があります。

 

Wrye Python 0x.exe

Wrye Bashが起動しなくなっても、このWrye Python (Wrye Bashを一発起動できるようにする、ファイルセット) を上書きインストールすれば大抵は直るので、Wrye Python は必ず用意しておきます。

 

PyFFI-py2.5-x.x.x-windows.exe

python2.5上で動作するスクリプトです。これをインストールすると、右クリックで個別にNIFファイルの最適化ができるようになります。既にこれより新しいバージョンが出ていますが、新しいPyFFI はpython2.5 のバージョンに対応していないので、あえてこの古いバージョンを使います。

 

ups02663 Nif 最適化計画.zip

PyFFIを一括処理するバッチです。デフォルトでpython2.5環境で動作します。大量のNIFを自動で全部処理してくれます。そのままだとpython2.5以外では動作しません。

中身は数行のコマンドのみなので、編集すれば他のバージョンのpython環境でも使えると思います。

 

Oblivion mod manager

お馴染みのOBMMです。ユーティリティでBSAファイルの解凍、圧縮が出来ます。

Oblivion\Data\Oblivion - Meshes.bsa を解凍して、メッシュファイルを取り出します。また取り出して最適化後、再BSA化する為に必要です。

メッシュは、Oblivion\Data\meshes と思いがちですが、ヴァニラの基本のメッシュはBSAに格納されているので、このBSA内のNifの最適化をやっておく事で大きな効果があると思われます。もちろん、Oblivion\Data\meshes 内のメッシュも最適化するべきです。

BSA Commander というツールでも解凍はできるのですが、どうも無圧縮のBSAの圧縮はバグか何かで不正のあるものしか作成出来ない気がするので、BSAファイルの操作はOBMMのほうがオススメです。

 

後はBSAのタイムスタンプを古くしておく為に、タイムスタンプの変更ツールが必要です。

タイムスタンプの変更ツールは沢山ありますが、自分は、Neo FileTimeChange を使用しました。

 

 

◆ Nif最適化の手順

 

 

python-2.5.x.msi 、PyFFI-py2.5-x.x.x-windows.exe をインストールします。上手く行けば、NIFファイルを右クリックし、「Optimize with PyFFI 」を選択するだけで、NIFを個別に最適化出来ます。

このように。

処理はコマンドプロンプトでされます。と言っても何もする必要なく、ただ処理の風景を見守るだけでいいのです。

まずAre you sure 〜 [n/y] と表示されるので、yキーを押してEnterすれば、そのNIFファイルは最適化されます。自動バックアップなどは取られず、最適化前のファイルは消滅するので、やる前に元のファイルは別にバックアップして下さい。

プロンプトの最後にフィニッシュと表示されたら処理の終わりです。

この時点で Wrye Bash が起動出来なくなっている場合は、Wrye Python をインストールします。 PyFFIがインストールされたc:\Python25 フォルダは残るので、PyFFIはその後も使えると思います。

Repair で適正なファイル構成になり、Wrye Bashも動くと思います。

 

 

◆ 複数のNIFファイルを一括処理

 

「ups02663 Nif 最適化計画」というバッチファイルを使用して、PyFFIで、複数のNIFファイルをまとめて処理できます。

まず、NIFファイルを右クリックし、「Optimize with PyFFI 」を選択実行できる状態にしておかなければなりません。

 

Oblivion - Meshes.bsa を、OBMMのユーティリティで解凍し、最適化するメッシュファイルを取り出しておきます。これは処理後に元と同じファイル構成に上書きして 再BSA化します。(ついでに無圧縮BSA化しておけば、相乗効果でさらに軽くなります)

BSAファイルの解凍は、OBMM の Utilities メニューから、BSA browser を選択します。

「Open」ボタンで、Oblivion\Data\Oblivion - Meshes.bsa を開き、「Extract All」ボタンで解凍出来ます。

後は、Nif 最適化計画readme.txt にやり方が書いてあるのでそのとおりにすればいいと思います。以下はほぼ要略です。

まず、C:\nifoptimize というファルダを新たに作成して下さい、これは一括で最適化する為のフォルダです。

その中に、最適化したいNifファイル(もしくはフォルダごと)をコピーして下さい。フォルダごと入れても、ちゃんとNifファイルを探して名前順で処理してくれるようです。

まず、Oblivion - Meshes.bsa から解凍した基本のメッシュファイルを最適化すると良いかも知れません。それらの最適化&再BSA化が終わったら、Oblivion\Data\meshes のメッシュも最適化するといいでしょう。

どんなメッシュでも最適化すればOKなのではなく、クリーチャーや装備などのメッシュは、ものによってはおかしくなってしまう可能性があるので、安易にC:\nifoptimizeにぶち込むのは避けて下さい。

Nif 最適化計画readme.txtで、推奨されているメッシュフォルダは、

architecture *
dungeons
*
clutter
furniture
landscape
plants
rocks

 

との事。* は特に最適化の効果が大きいらしいです。

とりあえず最初は推奨されるこれらを最適化するのが最も無難でしょう。BSAから解凍したこれらのメッシュを全て一括処理するにしても、数時間懸かります。自分の環境ではOblivion - Meshes.bsa の architecture フォルダだけでも7時間懸かりました。

最適化を実行する前に、C:\nifoptimize にコピーしたフォルダやファイルを、また別のバックアップ用のフォルダにコピーして保存して置きます。

何故なら、最適化後は最適化前のファイルは全て上書きされて消滅するからです。最適化でメッシュがおかしくなる場合もあるので、バグっても元に戻せるように最適化処理前のファイルはどこかに保管して置くべきです。

C:\nifoptimize にメッシュをコピーし、バックアップもとったら、「Nif 最適化計画」のnifoptimize.bat を c:\Python25 フォルダにコピーして実行して下さい。

処理はコマンドプロンプトでされます。まずAre you sure 〜 [n/y] と表示されるので、yキーを押してEnterすれば、C:\nifoptimize 以下の全てのNifファイルが全て最適化されます。

大量のメッシュを処理する場合は、物凄く時間が掛かるので、寝る前などに実行して放置しておくといいでしょう。処理は基本的にシングルコア動作のようです。一応余計なアプリは閉じておいたほうが良いと思います。

プロンプトの最後にフィニッシュと表示されたら全ての処理の終わりです。最適化したNIFファイルを、OBMM で、Oblivion - Meshes.bsa に再BSA化する、あるいは Oblivion\Data\meshes\に上書きするのを忘れずに。

フィニッシュされずに中断される場合は、プロンプトをよく読むと、メッシュの不正という事が解ります。

画像の場合は、DukeCityLight09.nif というメッシュに何らかの異常があって読めずに処理を中断した事が解ります。

 

◆ 最適化したNifを、再BSA化する (ついでに無圧縮BSA化)

 

まず、最適化前のBSAである、Oblivion\Data\Oblivion - Meshes.bsa は、元に戻せるように必ずバックアップして置きます。

最適化したNIFを元のフォルダに上書きコピーして、OBMMで再BSA化してみましょう。

OBMMの Utilities メニューから BSA creator を選択します。

No compression (圧縮無し) のままで再BSA化します。圧縮しない事でサイズは多少大きくなりますが、読み込み効率が良くなり、カクツキが少なくなります。(Nif 最適化とは関係ないですが、無圧縮BSA化でゲームを軽くする裏ワザは Oblivion - Textures - Compressed.bsa にも有効です)

「Add folder(s」 ボタンで、BSA化するディレクトリを設定し、「Create」 ボタンを押して Oblivion - Meshes.bsa としてBSA化して下さい。

処理が終わるのを待って、BSA化されたのを確認したら(ダイアログは出ないので判りにくい)、OBMMを終了させてから、最適化済 Oblivion - Meshes.bsa のタイムスタンプを タイムスタンプ変更ツール等で、2000年に書きなおして下さい。

何故かというと、オブリビオンは同名のファイルがあった場合、タイムスタンプの新しいものを優先して使うようになっているので、Oblivion - Meshes.bsaの日付が新し過ぎると、メッシュの修正パッチ等が適応されないからです。

ただ、このシステムにもバグがあるらしく、タイムスタンプをちゃんと揃えても、新しいほうが反映されない場合もあるようです(あやふや)。

BSA化ファイル前の個別のファイルのタイムスタンプを全て変更する必要があるかどうかは不明ですが、Neo FileTimeChangeの場合は、「サブフォルダーの変更を許可する」をチェックする事で、一括変更も可能です。

タイムスタンプを変更したら、Oblivion\Data\ に再BSA化した Oblivion - Meshes.bsa を入れて、ゲームで正常に動作するのを確認できれば完了です。

続いて、Oblivion\Data\meshes\ のNifファイルも最適化すると、より軽くなると思いますが、ここでは説明を省きます。BSA化しないだけでやり方は大体同じです。タイムスタンプはOblivion - Meshes.bsaよりも新しい日付にしたほうが良いかと思われます。

 

◆ 感想

 

で、実際やってみてどうよ? と言われれば、推奨されるものを全部最適化してみて、以前はやや重かったICの湾岸や、もっと激重のブラヴィルの街なども歩いてみましたが、やっぱり場所によっては以前より体感でFPSが上がっている気がします。ただ、NPCの数が多い場所で重くなるのは仕方ないようです。

PCスペックや、MODの構成によっても違うので、Nif最適化でどくらい効果があるのかは、もっとちゃんとした比較検証をしないと解りません。

次に、Oblivion - Meshes.bsa で最適化が推奨されるメッシュ以外も試しに最適化してみました。

armor (頭部装備を除く)
effects
fire
idleobjects
lights
menus
oblivion
sky
staffs
weapons

弓のグラフィックがおかしくなりましたが、今の所他におかしい所は見られず、全般的にFPSはかなり良くなっている事は実感出来ます。弓系の装備のNifを除けば良いようです。

さらに、Oblivion\Data\meshes\ をファイル検索して「helm」 「hair」 「robe」 「bow」 「hood」が付くファイルを除外した上で、ほとんどのNifも最適化してみた所、かなりのFPSの向上が感じられました。

もしかすると、これまでで一番効果のある、処理の軽減方法かも知れません。

やらないほうがいいとされるフォルダにも最適化をかけてみましたが殆ど使えませんでした。具体的には以下、(全てOblivion - Meshes.bsaから取り出したフォルダ)

characters
 
種族フォルダはほぼ全てegmを参照するNifで構成されているのでやりませんでした。
 
creatures

最適化時にクランフィアの頭部のNifだけがループして完成しませんでした。
クランフィアの頭部を除いて、最適化したものを使ってみましたが、
ゲームのロードでクラッシュしました。
 
clothes
 
「robe」「hood」などが付くNifをファイル検索して除き、最適化してみました。
起動は出来ましたが、空中に黒い四角の物体が出るなど、不具合がありました。
 
 

↑これらは結局面倒臭くて除外しました。

 

現在の最適化の構成は↓の通り。

 

Oblivion\Data\Oblivion - Meshes.bsa

architecture 
dungeons 
clutter 
furniture 
landscape 
plants 
rocks
armor (「helm」が付くファイルを除く)
effects
fire
idleobjects
lights
menus
oblivion
sky
staffs
weapons (「bow」が付くファイルを除く)

 

Oblivion\Data\meshes\

全部 (「helm」 「hair」 「robe」 「bow」 「hood」が付くファイルを除く)

 

全てを観たわけではないので、これで安定動作するかどうかは不明です。

一部の看板が外れて地面に落ちる、毛皮の鎧のテクスチャが変になる不具合が見られました。

不具合のあるメッシュを見つけたら、オリジナルに戻していく作業が必要なようです。

 

 

 

TOP