DDSとは?
DDSは簡単に言うと3D処理に最適化された画像ファイルです。PNGファイルなどを利用するのに比べて処理が軽く、Skyrimなど主な3Dゲームでも多く利用されています。
どれくらい効果があるの?
京成千葉線をDDS化したところ、使用メモリが210MBほどから160MBほどまで減少しました。とある重量級の路線では使用メモリが1.3GBに達していましたが、DDS化したところ550MBまで減少し、フレームレートが数FPSしか出なかったところでも30FPS程度まで上昇し、普通に動くようになりました。
高スペックなら気にしないで良いかというとそういうわけでもなく、消費メモリが低いことはBVEの安定性にも繋がることなので、公開前に出来るかぎりDDS化しておくことが望ましいです。
DDS化の注意点
- DDS化出来る画像は路線のストラクチャに使用している画像ファイルのみです。運転台に使用する画像については現状DDSには対応していません。
- DDSはJPEGと同じ非可逆圧縮なので、DDSに変換すると多少なり画質は劣化します。DXT5等の設定にすれば画質の劣化は抑えられますが、軽量化効果はその分落ちることにはなります。(詳細説明は次のブログに投げ)
- DDSはWindows標準ではないファイルフォーマットなので、対応するソフトを入れないと編集出来ません。Paint.netあたりがオススメ、Photoshopのプラグインとかもあります。
- フリーグラフィックエディタGIMPも2.10.30からDDSに標準対応したようです。(202402追記)
- 前述の通りなので、まだ制作中で画像を再修正する可能性がある場合はDDS化するのは後にした方が面倒くさくなくて良いです。
DDS化をやってみる(京成千葉線)
DDS化はそんなに難しい作業ではありません。デフォルト路線の京成千葉線を実際にDDS化してみます。
←京成千葉線の基本構成ファイルです。
0.一応バックアップ
ファイルの書き換えを伴う作業になるので、最悪路線が動かなくなることがあります。それを回避するために、とりあえずフォルダを丸ごとコピーしてバックアップしておくことを推奨します。何か間違ったら作業中のフォルダを消して、コピーした方のリネームすれば元に戻ります。
1.テクスチャ画像をDDSへ変換する
変換には専用アプリケーションの「NvcompressFrontEnd」を使います。
ストラクチャフォルダ(この場合は~mackoy.Keisei¥Structuresのフォルダ)をそのままこのソフトにドロップすれば、中にある画像ファイルが自動的に登録されます。
出力対応形式はよくわからなければDXT5(一番綺麗)もしくはDXT1a(とにかく軽く)で固定。DXT圧縮の種類は次のようになっており、画像ごとに最適なものを選ぶことによって出来るだけ綺麗に、かつ出来るだけ軽くすることも出来ます。
・DXT1:アルファチャンネル(透明部分)を使用していない画像用 その分軽い
・DXT1a:透過or不透過のみを認識 とにかく雑に軽くしたい場合はこれ
・DXT3:透過、非透過の境界がはっきりしている画像用
・DXT5:透過、非透過の境界があいまいな画像用(DXTでは一番綺麗)
とりあえず全部を一番軽いDXT1aで変換してみて、BVEで試運転した後に違和感があるものがあればDXT5で圧縮し直すなど、実際に確認しながら調整するのが良いです。
右上の「変換」を押すとResultウィンドウが出て一括変換が始まるので終わるまで待ちます。DXT5にするとそこそこ時間がかかりますが仕様です。
終わったらCloseを押して終了させます。処理したフォルダ内を見ると、PNGファイルとDDSファイルが並んでいるはずです。並んでなければ何か手順が間違っていますので最初からやり直してください。
2.ストラクチャ内の画像ファイル指定を書き直す
テクスチャ画像をDDS化し終えたら、今度はストラクチャファイルをそのDDSファイルに紐付ける必要があります。実はストラクチャファイル(Xファイル)の中身は普通のテキストファイルなので、中のテクスチャ指定の「***.png」となっている箇所を「***.dds」に書き換えてやれば良いだけです。(※極まれにバイナリ形式というテキストで読めないものもあります)
一つ一つやっていては数日かかるので、これを簡単に行なう方法としてはテキストエディタの一括置き換え機能があります。
とりあえず公式からも推奨されている「notepad++」を使用例にして解説します。
notepad++を起動したら、メニューから「検索→複数ファイル内を検索」を開きます。
検索文字列:.png
検索文字列:.dds
フィルタ:*.x
ディレクトリ:(~mackoy.Keisei\Structuresのフォルダ)
「サブフォルダも検索」にチェック
その状態で「すべて検索」を押すと、ログのところに書き換え該当箇所が一気に出てきます。
一通り見て問題なさそうであればもう一度複数ファイル内を検索を開き、「ファイル内置換」を押します。確認ダイアログが出るのでOKをクリックすると処理開始。あとは全自動で書き換えてくれます。
複数ファイル内の検索は、1度入力すると情報はそのまま記憶されるので、ディレクトリ部分の変更だけで他の路線にも適用可能です。
3.BVEで確認
BVEでシナリオを読んでみて、特ににエラーなどが出なければ成功です。
しかし、もともと軽い路線なのでFPS上ではどっちも60のままで変わらない人も多いかと思います。FPS値以外でのデータの重さの確認方法としては、タスクマネージャーからメモリの占有状況を確認する方法があります。
↑処理前 ↓DDS処理後
元のPNG版とDDS版を比べてみると、メモリがおおよそ50MBほど削減出来ていることが分かります。確実に軽くなっています。
(2024/02追記)
BVE用のメモリ消費を見るソフトをだいぶ前に開発しました。
4.不要なPNGファイルを消したい
DDSに変換してしまえばPNGは不要となります。残しておいても問題は無いですが、消したい場合は次のようにするのが簡単です。
~mackoy.Keisei¥Structuresフォルダに入って→上の検索ボックス(薄く「Structuresの検索」とある場所)に「*.png」と入力。するとStructuresフォルダ以下にあるすべてのPNGファイルがリストアップされます。それを全選択して削除すれば完了です。
なお間違えて「mackoy.Keisei」フォルダでこれをやると運転台画像一式も消えます。
ちょっと長くなってしまいましたが…軽量化には効果抜群ですので、是非とも試してみてください。