takeyohのおぼえがき

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

Content ManagerのGenerate LODsが復活!

過去に、Content Managerに実装されていたGenerate LODs機能で使われていたSimplygonの無料ライセンスが無くなり、やむなく別ツールで手作りする方法を続けてまいりましたが、Content Managerのv0.8.2869.40268から、改めてGenerate LODs機能が作り直されたとのことです。

しかも、生成するツールをいくつか選べるようになっていますが、デフォルトはMeshOptimizerというオープンソースのライブラリで、すでにContent Managerに同梱されているらしく、インストールも不要です!なんてすばらしいのでしょう。
github.com

実際にMeshOptimizerを使ってLodB~Dを生成してみましたが、以前と変わらず、いい感じにメッシュを削ってくれているのがうれしいです。
一つずつのパーツをどうするかとか、メッシュは統合するのか、独立させる必要があるのかなどを一つ一つ設定するのが面倒なので、手作業で作る場合は外側と内側にだけ分けて、それぞれメッシュを削ってくっつけるという方法ですが、今回のGenerate LODsは大事なパーツと不要なパーツを全体または各Lodで指定してあげると、自動でそれを考慮したモデルを生成してくれるのでよりラクチンです。

ただ昔のGenerate LODsの時と同じで、特に灯火類のマテリアルとメッシュの設定には注意したほうがよいです。
LodAを生成する際に、ロービーム、ハイビーム、フォグ、ポジションライト、ウィンカー、ブレーキライト、リバースライトなど遠くからも認識できるライト類は、それぞれ独立したメッシュとマテリアルで構成しておいたほうがよいです。たとえばこれらのライトをLightという一つのマテリアルで設定してしまうと、自動生成したときに、灯火類のオブジェクトが勝手に統合され、lodが切り替わった際に、灯火がおかしなことになります。(ブレーキライトがヘッドライトの色になったりとか。)

私の場合は、念のためLodAでのメッシュとマテリアルを別々設定した上で、Generate LODsの設定では、MERGE EXCEPTIONSで、LODB~Dの既存の設定に、

headLight*
highBeam*
fogLight*
positionLight*
brakeLight*
blinker*
reverseLight*

の7行を追加しています。
こうすることで、lod-Dにおいても、灯火類のメッシュがきちんと残り、離れても光っている状態を保つことができます。
まぁ、lodDだと2km以上離れているので、灯火類が付かなくてもいいという人もいるかもしれないですが。SRP湾岸線の直線箇所とかだと、意外と2km先の車見えたりするので、私はlodDも光るようにしておくことをおススメします。

2026/7/5 追記
LodAで、タイヤとリムしかなかったので、HUB_XXを作らず直接WHEEL_XXのみを作成してLodAとしたkn5に対して、上記のLod自動生成を実行すると、生成ができないという事象がありました。
HUB_XXを追加で作成し、その下にWHEEL_XXを移動させることで、lodの生成をすることができました。絶対にHUB_XXが必要なのかどうかは不明ですが、覚書として残しておきます。

パドルシフトアニメーションが動かない!

パドルシフトの車で、ドライバのパドルシフトアニメーションを作りました。
左手(ダウン)がshift_dw.ksanim、右手(アップ)がshift_up.ksanimという名前のファイルで作成し、car modのanimationsフォルダの中にコピーします。

ですが、なぜかアニメーションが動かない!
思い当たるところをいくつか変更して試したところ、原因が分かったので覚書で残しておきます。

ポイントは一つ。

dataフォルダ内のdriver3d.iniファイルを開き、SHIFT_ANIMATIONセクションのINVERT_SHIFTING_HANDSを0に設定する

以上です。

右ハンドルのHシフトパターンの車とかを作っていると、この値を1に設定することで、左手のシフトアニメーションが再現されますが、これが1のままだと、パドルシフトアニメーションが認識できないんですね。う~ん。

CHASE CAMERA時に音が出ない(今回はドアの開閉音)

ドアのアニメーションが設定されていると、ゲーム開始時にドアが開いた状態になっていて、スタートするとドアが閉まって、ガチャという閉まる音がすると思います。
この音を別に切り出して、bankファイル化し、ゲームが始まった後もドアを開閉すると開閉音が出るようにすることがあります。(気まぐれ)
luaで実装しています。luaからksanimを読み込んで、サウンドイベントとして音を出します。
ただ、今回気づいたのは、CHASE CAMERA(車の後ろからの視点)にすると音が出ないということです。それ以外の視点は音が出ます。
これは、fmodの設定が必要でした。
CHASE CAMERAモードでも音を出したい場合は、対象の音源のMaster設定でStealingを「Virtualize」に設定すると解決できました。
今回は、ドア開閉用のbankファイルを作成していますが、イベントを選択し、Masterの欄をクリックすると、下にマスター用の設定画面が出ます。
その一番右側、緑色で丸を付けた部分です。

この設定をしてから、bankファイルを生成すると、CHASE CAMERA視点でも音が出るようになりました。

あー、昔作った車はこれに対応してないなぁ。でも直すの面倒だから、そのままにします。w

fmodでのリバーブ設定(この記事は不確実かもしれません)

bankファイルを自作したcar modでSRPのトンネルに入るとリバーブの効果で、スピーカーやヘッドフォンが壊れるのでは?というくらいの爆音になる症状に困っていました。
最初はCSPの設定の問題かとも思っていましたが、もしかしてfmod側の問題かもしれない?と思って調べてみました。

fmodでエンジン音(中、外両方)のそれぞれのMasterを選択し、左の3D Pannerを右クリックするとメニューがでるので、FMDO Reverbをクリックします。

すると、右側にReverbという欄が出てきます。

ここで各設定を下記の様に変更しました。

この状態でbankファイルを生成し、ゲームで使って見たところ、リバーブはかかりますが爆音にはならなくなりました。
このfmodの設定が適切なのかの検証はできていません。なのでこの設定は不確実です。
ただ、fmodのリバーブ機能とCSPのリバーブ機能が両方機能する結果が爆音につながっているのは確かです。
asettocorsaのcar mod用bank作成限定の話ではありますが、fmod側でのリバーブ機能は最低限にしておくのがよさそうです。

路面の反射がおかしいときの回避方法(根本的ではないかも)

アセットコルサでなぜか2輪車を作ったりしているわけですが、その場合、4輪の制御システムをごまかしながら2輪車っぽい動きを再現しているわけです。
そのため、HUB_XX, SUSP_XX, WHEEL_XXなどのノードの下にタイヤなどのオブジェクト(メッシュ)を入れずに作ったりします。
(ノードは作ってあるのですが、その中にメッシュが一つもない)
この時、trackにもよるのですが、昼は問題なくても、夜になった時、路面や周りの物体が全く反射せず、ヘッドライトで前を照らしているはずなのに、まったく明るくならない症状が出ることがあります。
SRPだとこんな感じです。

白線は見えるのですが、路面は真っ黒です。

先に、回避方法を適用した後を紹介すると、こうなります。

これが普通ですよね。ヘッドライトもちゃんと照らしています。

で、回避方法です。
HUB_XX、SUSP_XX、WHEEL_XXのノードの構成はこうなっていると思います。

普通、車を作るときは、ここにタイヤやホイール、ブレーキディスクやキャリパーなんかのオブジェクトを入れると思いますが、この例では、bikeというノードの中にすべてのオブジェクトが入っていて、これらのノードの下には一つもオブジェクトがありません。
この状態でkn5を作ってしまうと、先ほどの様に反射が正常に動かないことがあるようです。

そこで、適当に(ここでは、WHEEL_LRの下)、ダミーのオブジェクトを作成します。

ここにあるオブジェクトはタイヤの回転と一緒に回るものですので、大きいと目立ちます(邪魔)。
また負荷を極小化するには、なるべく面数の少ないオブジェクトがよいかと。
そこで、今回はWHEEL_LRのエンプティの位置に正方形のオブジェクトを追加し、名前をdummyTyreとか適当につけています。
マテリアルは、そのcar modで使われているマテリアルから適当なものを割り当てます。

で、この正方形を編集モードにして、限りなく小さく(見えないくらい)します。

この絵はまだ小さな正方形が見えますが、もっともっと見えないくらいまで小さくしてください。

小さくしたら、正方形(dummyTyre)のスケール(X,Y,Z)は1.000になっているか確認してくださいね。

オブジェクトモードのまま小さくするとスケールの値が変わってしまいます。(なので編集モードにしてから縮小する)

あとは、いつも通りfbxでエクスポートして、ksEditorでkn5を作成すればOKです。


これだけです。

オフラインtrack day(走行会)モードで、AI車両が止まる場合の対処

今回もメモだけ。
オフラインのtrack day(走行会)モードで、ランダムなのですがAI車両が道の真ん中で止まっていて困ることがあります。
特にAIの車両数を増やしたりすると顕著になります。

根本的な解決か変わりませんが、スムーズに流れるようになったので、設定部分をメモします。
これを書いている時点で使用しているCSPは0.2.8preview1です。

CSP設定のNEW AI BEHAVIORから、AI flood(works in Track Day mode):の欄を探し、
Behavior variation:の選択肢を「Never」にする。

です。
あらゆるパターンでこれが有効なのかは検証できていませんが、もし同じような症状の方が入ればお試しください。

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