takeyohのおぼえがき

気になったこと、試したことの記録です。

InstaLODでLodファイルの作成を試みる!

ずっと愛用していたSIMPLYGONですが、2024/3/31を持って無料ライセンスが無くなってしまいました。
じゃ、どうやってLodB~LodDのkn5を作ればよいのか・・・?で悩みましたが、同じようにポリゴン数を減らして軽量化することが出来るInstaLODなるソフトウェアが存在することを知りました。
これまた多機能で、使い方は全くわかりませんが、何とかLodの作成はできそうでしたので、忘れないうちに覚書。
まずInstaLODですが、こちらは個人向けの無料ライセンスがあります。(いつまで存在するかはまた不安ですが)
そして、InstaLODのインストール方法は省略します。(アカウント作成、ライセンス購入(無用)、クラウドにログイン、アプリダウンロード、インストールの順です。)

では、LODの作成方法で。

まず、LodAにあたる元のモデルをblnederで表示します。
次に、InstaLODへインポートするためのfbxを作成します。
いつものfbxとちょっと違います。

エンプティとメッシュとその他を選択し、前方がZ、アニメーションをベイクはオフ、これらはいつもと一緒ですが、
スケールは1のままにします。(0.01にはしない)
で、適当な名前でfbxファイルをエクスポートします。(ここではtest.fbxにしました)

続いて、InstaLODを起動。

Create a new InstaLOD profileを選択。


一番上のOptimizeを選択して「Create Profile]をクリック。


メニューの右側にMesh Operation Settingsというタブが表示されていない場合は、タブの空欄で右クリックし、出てきたメニューからMesh Operation Settingsをクリックします。
すると下記のようなメニューが表示されます。

続いて、先ほど作成したfbx(ここではtext.fbx)をインポートします。
FileからOpen Sceneでも可能ですが、フォルダからtext.fbxを直接ドラッグ&ドロップでもOKです。

インポートされると、車(今回はバイクですが)が真ん中に表示され、メッシュやノードの構造が左にツリー上に表示されます。

次に、この3dモデルのポリゴン数を削減していきます。
右Mesh Operation SettingタブのOptimizeメニューのOptimize Settingsで、Percent Trianglesを選択し、数値を20くらいにします。(デフォルトは50)
これは、元のモデルからどれくらいポリゴンを削減した状態にするかを指定しているようです。20だとポリゴンの数が20%(80%減)になります。

今回のバイクmodの場合は、LodAで57万ポリゴンくらいでしたが、ここからLodBの場合は20%、LodCの場合は2%、LodDの場合は0.5%くらいに設定しました。
LodBを例に続けます。(LodCもLodDも基本同じ)

Percent trianglesを設定したら、左上の「Start」をクリックすると処理が始まります。(少し待つ)
処理が終わるとこんな感じです。Total Polygonsがかなり削減されているのがわかります。

でも、20%設定くらいでは、モデルもそれほど劣化しません。(結構すごいですね。)

FileメニューのExport Sceneを選択し、fbxをエクスポートします。

ファイル名(ここではgsx750_lodb.fbx)を設定して、Type はDefaultのまま、Saveをクリックして保存します。
このままではまだlodファイルとして使えません。
新規でblenderを起動し、エクスポートしたgsx750_lodb.fbxをインポートします。
スケールは1、前方は-z(マイナスz)にしてインポートします。

lodBのモデルがインポートされます。ここで不要なノードやメッシュがあればついでに削除すればさらに軽量化できるかもしれません。
あと、InstaLODで変換処理を行った際、オブジェクトの名前の後ろに「_Default」が追加されています。
これが邪魔なので、blenderの編集メニューから、「名前を一括変更」を選択します。

続いて「全て」を選択し、検索に「_Default」と入力し、OKを押します。すると、すべてのオブジェクト名から_Defaultの文字が消えます。
この状態で、いつも通りのfbxエクスポートをします。
今回は先ほどのgsx750_lodb.fbxを上書きしてエクスポートしました。(スケールは0.01、前方はz(プラスz)です。)

続いて、lodb用の設定ファイルを作成します。
lodA用の設定ファイル(今回の例ではgsx750.fbx.ini)をコピーしてファイル名をgsx750_lodb.fbx.iniにします。
(拡張子が非表示設定になっている人は拡張子を表示するように設定変更しておきましょう。)

gsc750_lodb.fbx.iniを開くと、前半にマテリアルの設定、後半にノードやメッシュの設定が入っています。
一番わかりやすい方法としては、このiniファイルをメモ帳とかで開いて、一番下まで移動します。
[model_FBX: gsx750.fbx_bike_plateM....のようにmodelで始まるセクションがあると思います。

この、FBX:の後ろからgsx750.fbxの部分までをfbxのファイル名に合わせます。
gsx750.fbxの部分を範囲選択して、メモ帳の編集から置換を選択します。
検索文字(上の欄)には範囲選択した文字列が入っていると思います。
置換文字(下の欄)に、lodBのfbxファイル名(ここではgsx750_lodb.fbx)と入力し、すべて置換を選択し、置換出来たら保存します。

ここまで順調にいけば、あとはksEditorです。
ksEditorを起動し、lodBのfbxを開きます。
iniファイルが正しく編集できていれば、lodAと同じ設定がすでにされた状態になっています。
ただ、ガラスなどのような透過させているオブジェクトのtransperent設定が消えていることがあるので、Materialsタブから、ガラスなど透過させるマテリアルを選択し、右のtransparent ONをクリックすると、このマテリアルが設定されたオブジェクト全てが透過設定されます。

最後に、FileタブからSave KK5を選択、Car(No Textures)を選択して、kn5を生成します。(今回だとgsx750_lodb.kn5)
生成したlodB用kn5(gsx750_lodb.kn5)をcar modフォルダの直下にコピーします。
dataフォルダのlods.iniでlodBのkn5を設定します。
今回は、上記を同様の手順でlodC、lodDのkn5も作成して、以下の様にlods.iniを設定しています。

[COCKPIT_HR]
DISTANCE_SWITCH=7

[DRIVER_HR]
DISTANCE_SWITCH=7

[LOD_0]
FILE=gsx750.kn5
IN=0
OUT=15

[LOD_1]
IN=15
OUT=45
FILE=gsx750_lodb.kn5

[LOD_2]
IN=45
OUT=201
FILE=gsx750_lodc.kn5

[LOD_3]
IN=201
OUT=2000
FILE=gsx750_lodd.kn5

car modとカメラ視点との距離がIN,OUTの間にあると該当するkn5が表示されます。
ゲーム中、15mまではlod_0、15mから45mまではlod_1・・・のように表示されるkn5が切り替わります。
(これによって、遠くにいる車は軽量なkn5を表示させることで、ゲーム自体の負荷を軽減させています。)

InstaLODを使ったlodB~lodDの作り方は以上です。
(忘れないうちに書いておこうと必死・・・)

Content Managerで自動生成できていたのは便利だったんですけどねぇ。今後Content Managerは何を選択していくんでしょうね?

/* -----codeの行番号----- */