こんにちは。まとんです。
遠景の最適化第二回。今回は草キャッシュ編(No Grass In Objects)です。
- 第一回 地形編
- 第二回 草編(今回)
今回の解説範囲と使用ツール
遠景は大きく地形、草、木や建物オブジェクトの3種類に分かれます。
今回は、草のLODについて解説します。
草のLODは草キャッシュから生成します。
草キャッシュの作成には No Grass In Objects(NGIO) を使用します。

草キャッシュとは?
まず、草キャッシュとはそもそも何なのかについてお話したいと思います。
草キャッシュの生成ツールである「No Grass In Objects(NGIO)」は、草が生えるとおかしい場所に草が生えないように制御するツールです。

家追加など、本来地面だったセルが改変された時にその整合性を取ってくれます。
この時、「どこに草を生やしてどこに草を生やさないか」という情報をその場その場で確認するのではなく、事前に用意しておくことで最適化するのが草キャッシュです。

パフォーマンス向上が期待できるので、LOD関係なく草キャッシュはおすすめ。
その性質上、草キャッシュにはどこにどの草を生やすべきかという情報が座標レベルで全ワールド分入ってます。
この情報をLODにも流用しようというのが、LODにおける草キャッシュの役割です。
No Grass In Objects(NGIO)の設定について
草キャッシュはMODページの手順に従って作れば良いだけなので、特に難しいことはありません。
ただし、設定で気を付けた方が良い点が2点ほどありますので、それについて解説します。

設定はGrassControl.iniで行います。
草キャッシュ生成は時間がかかるので、何度もやり直すハメにならないよう気を付けましょう。
草密度(Overwrite-min-grass-size)
Overwrite-min-grass-sizeは、草をどのくらいの密度で生やすか決めます。
この値が小さいほどふっさふさになりますが、パフォーマンスが悪化します。
また密度を変更した場合、草キャッシュは作り直しになります。
ですので、まずはキャッシュをオフにした状態で設定値を変更してみて、ゲーム内でどういう見え方とパフォーマンスになるか確認しておくのがおすすめです。
参考までに、私の環境での計測結果をご紹介します。

ホワイトラン城門前からツンドラを見た様子です。
MODもりもりの環境で、キャッシュと遠景をOFFにして計測しました。
利用した草MODは「Sacred Garden – A Grass Overhaul」です。



まとめるとこんな感じです。
| Overwrite-min-grass-size | ドローコール(Grass) | VRAM | 平均FPS |
|---|---|---|---|
| 60 | 734 | 4.34GB | 44.4 |
| 40 | 950 | 4.32GB | 45.2 |
| 20 | 2298 | 4.37GB | 28.0 |
Overwrite-min-grass-size=40まではあまり変化がなかったです。
Overwrite-min-grass-size=20まで下げると(密度を上げると)ドローコールが激増し、FPSがかなり下がりました。

密度を上げてもテクスチャが増えるわけではないので、VRAMには影響しないようです。
見た目は画像の通り、密度が上がるほどツンドラが華やかになっていきました。
お使いの草MODにもよりますが、こんな感じで見た目がかなり変わる可能性があるので、草キャッシュ生成前にしっかり調整しておきましょう。
推奨値は50~60とのことですので、そのあたりを基準にして確認すると良いと思います。
草の描画距離とフェード距離(Overwrite-grass-distance, Overwrite-grass-fade-range)
LODではフルモデルのフェードアウトとLODの開始をオーバーラップさせることで、スムーズにモデルを入れ替え、切り替えの違和感を小さくします。
そのための設定値が「Overwrite-grass-distance」と「Overwrite-grass-fade-range」です。
Overwrite-grass-distanceは、草のフルモデルを描画する範囲を決める設定です。
Overwrite-grass-fade-rangeはその先から始まり、完全に草がフェードアウトするまでの距離を決める設定です。
基本的には、「uLargeRefLODGridSize」とフルモデルの描画範囲を合わせ、その先からフェードアウトが始まるように設定します。
uLargeRefLODGridSize=5の場合は、こんなイメージです。

1セル=4096ユニットなので、uLargeRefLODGridSize=5の場合の設定値は次の通りです。
| 項目名 | 設定値 |
|---|---|
| Overwrite-grass-distance | 8192 |
| Overwrite-grass-fade-range | 4096(Overwrite-grass-distanceの半分) |
基本的には、uLargeRefLODGridSizeを基準に機械的に決めてしまって問題ないと思います。
パフォーマンスが気になる場合はキャッシュをオフにして、ゲーム内で確認してみましょう。
注意点:草LODはLOD4にしか使われない
PCスペックに余裕がある方は、Overwrite-grass-distanceをもっと伸ばしたいと思うかもしれません。
その際は、LOD4の描画範囲を超えるかどうかを確認しましょう。
草のLODモデルは、LOD4にしか使われません。
つまり、LOD4よりOverwrite-grass-distanceを大きくするのであれば、草LODを作る意味がないということです。

LOD自体がいらないわけではなく、あくまで「草の」LODモデルが不要になるだけです。
次回はいよいよLOD生成です。


コメント