ext_configでskin

以前、wdtsのs15のskin作ったりしたけども、そのときはボンネットやホイールを別の物に置き換えるのに、車のkn5をfbxにしてblenderで置き換えしたりしたけども、それだと車modのバージョン上がったり、その派生のやつとかにskinを流用出来なくなったりするので、元の車kn5はそのままに、skinフォルダ内のext_config.iniで置き換え出来ないものかと試してみた。

ためしに今回はwdtsの派生、wdts seを使って試してみる。ただseのmod自体は味付けが好みじゃなくて全然使う予定はないのだけども(^^;

以前作ったskinをwdts seのs15にそのまま適用してみる
一番の問題点?のボンネットの穴でゆっこが切れる。ホイールが変わってない。

とはいえ概ね大丈夫なので、このまま使うのもアリだとは思うけども。あとリアガラスのテクスチャがズレる。これはext_glass.ddsを削除しちゃえばいいっちゃいい。

さてext_config.iniへの記載で、
・ボンネット置換
・ホイール置換
・ガラスのテクスチャ
あたりがどうかなればいいなと。


▼skinフォルダ中のext_config.ini

まず最初に、skinのフォルダ内のext_config.ini(無ければ作る)内に、

[INCLUDE]
INCLUDE=skin.ini

と記載し、これ以降の設定は、skin.iniに記載していく。


▼差し込むためのパーツ準備

まず差し込みたいパーツを準備する。ボンネットやらホイールやら。3dsimedとかで他のmod車のkn5を読み取り、オブジェクトを選択

プロパティなどが見えるペインの、IsolateObjectボタンを押す

するとそのオブジェクト単体になるので、kn5形式でexportする

今回は他にボンネットとかフロントガラスとかインクラとか。


▼差し込み先の車モデルの、消すパーツを調べる

まずボンネットを差し込んでみる。
差し込み先のmodは、ボンネット部分を消す必要があるので、何を消すのかまず調べる。Showroomでクリックしてオブジェクト名を調べておく。プロパティ表示の名前:の部分がオブジェクト名

選択した状態で、alt+h を押すと実際に消えるので、他に消すべきパーツがあれば、それらも調べておく

今回はボンピン(クリップ)も

ボンネット穴の中の黒い板?も


▼ボンネットを差し込んでみる

そうして消すべきオブジェクト達がわかったら、skin.iniに以下のように記載

[MODEL_REPLACEMENT_2]
FILE=wdts_nissan_silvia_s15.kn5
HIDE= bonnet_ok,Plane001,bonnet_ok003,clips

これで消えるはずなので、旧Showroomを起動するか、コースinして消えてることを確認。

そして差し込みたいオブジェクトをiniに記載するのだけども、問題はどこに差し込むか、ということで、差し込む位置はiniへの記載で、INSERT_AFTERやらINSERT_INやらで指定出来るが、そもそもINSERT_AFTER=オブジェクト名 と記載するときのオブジェクト名は何を指定したらいいのやら。

オブジェクトの重なり順みたいなのが解るといいのだけど、明確にドレがいい、という方法は見つけられなかった。ksEditorでのオブジェクトのツリーはどう?と思ったけども

よく見ると単にアルファベット順になってるだけくさい。
では3dsimedでのオブジェクト一覧、ObjectByNameはどうかというと

まぁByNameってくらいだからアルファベット順だよね・・
そんで3dsimedのtools-DataReportsの中に、ObjectXYZというのがあってソレっぽいかんじがする

これを選択すると、このような表示が出る。まぁ3Dなのでどこから見た場合の重なり順なんだ、って考えると何が正解ってのもない気もするけども。

でこのリストの中にbonnnet_okというのがあって、その上(前)にはSkinBodyがあるので、今回はSkinBodyの後に入れてみることにして、以下の記載となった

[MODEL_REPLACEMENT_2]
FILE=wdts_nissan_silvia_s15.kn5
HIDE= bonnet_ok,Plane001,bonnet_ok003,clips
INSERT =s15_oem_hood.kn5
INSERT_AFTER =SkinBody

まぁこれでちゃんと表示されたのだけども、ぶっちゃけボディパーツはどこに差し込んでもいい気がする。アルファベット順でのオブジェクトの後に挿入してみたけども(INSERT_AFTER = bok002)それも正しく挿入された。
何の後に差し込むかで位置が変わったりするので、いい位置になるINSERT場所を探す。後に試したところ、透明なオブジェクトは気をつけた方がよさげだった(後述)

ビフォーとアフター


▼ホイールを変えてみる

タイヤなどはそのままに、ホイールのみ交換する方法としては

[INCLUDE: common/custom_rims.ini]
[ReplaceRims]
File = newrim.kn5
OriginalRims = RIM_?

みたいに記載する専用の方法もあるようだけど、コレは手軽な反面細かい指定は出来ないぽいので、今回は普通の手順で置き換えてみる。

まず消すオブジェクトを調べる。showroomでクリックして選択して名前を調べつつ、alt+hを押して実際に消して確認していく。今回キャリパーやローターも消すのでそれらも調べとく。

そしてskin.iniに消すオブジェクト達と、挿入するkn5と挿入する位置を記載する。これは左前のホイールの場合。

[MODEL_REPLACEMENT_500]
FILE=wdts_nissan_silvia_s15.kn5
HIDE=ssr_?,brake_disk?,tyre?,caliper?
INSERT =wheel_lf.kn5
INSERT_IN = WHEEL_LF

元modのホイールを構成するパーツはssr_ナントカ というものが多かったので、ssr_? として全部指定してる。ローターやキャリパー、タイヤも前後左右の4本で各々 tyre,tyre002,tyre003,tyre004 のように番号振ってあったので、これらもtyre?のように指定してます。

さてこれはボンネットと違い、挿入する位置をINSERT_IN というメソッド?を使ってるけどもコレがどういうことかというと、オブジェクトの階層を見ると解るのだけども、3dsimedならObjectByNameで見たときのツリー表示がこうなってる。WHEEL_LFというなんかのオブジェクトの中に、ホイールを構成するパーツ(メッシュ)が入れられてる。

blenderでならこう。WHEEL_LFというエンプティの中に入れられている

こうした構造で、assettocorsaはWHEEL_LF、RF、LR、RRを4つのタイヤ+ホイールセットとして認識して、転がしたり角度変えたりのアニメーションするよ。っていう決まりになってるくさげ。

なので今回は、INSERT_IN = WHEEL_LF として、差し込むオブジェクトをWHEEL_LFの中に入れた、ということ。他RF、LR、RRの3カ所については以下のように記載した。各ホイールの場所の削除は、最初にLFのときの指定で4カ所全部消えちゃってるので、これらにはHIDE=の指定はナシ。
今回はホイールやタイヤを1個のkn5として保存しちゃってるので、INSERT=が1個のkn5だけの指定だけども、ホイールやタイヤやボルト、ローターなどが別kn5の場合はカンマで区切って複数指定する。

[MODEL_REPLACEMENT_501]
FILE=wdts_nissan_silvia_s15.kn5
INSERT =wheel_rf.kn5
INSERT_IN = WHEEL_RF

[MODEL_REPLACEMENT_502]
FILE=wdts_nissan_silvia_s15.kn5
INSERT =wheel_lr.kn5
INSERT_IN = WHEEL_LR
OFFSET=-0.03,0,0

[MODEL_REPLACEMENT_503]
FILE=wdts_nissan_silvia_s15.kn5
INSERT =wheel_rr.kn5
INSERT_IN = WHEEL_RR
OFFSET=0.03,0,0

OFFSET=0.03,0,0 というのは、コレを記載しないと、リアのホイールだけ出っ張っちゃったので、位置調整のための記載。

そしてキャリパーも追加

[MODEL_REPLACEMENT_504]
FILE=wdts_nissan_silvia_s15.kn5
INSERT =calip_lf_002.kn5
INSERT_IN = SUSP_LF
OFFSET=0,0,0.023

[MODEL_REPLACEMENT_505]
FILE=wdts_nissan_silvia_s15.kn5
INSERT =calip_rf_002.kn5
INSERT_IN = SUSP_RF
OFFSET=-0,0,0.023

[MODEL_REPLACEMENT_506]
FILE=wdts_nissan_silvia_s15.kn5
INSERT =calip_lr_002.kn5
INSERT_IN = SUSP_LR
OFFSET=-0,0,0.008

[MODEL_REPLACEMENT_507]
FILE=wdts_nissan_silvia_s15.kn5
INSERT =calip_rr_002.kn5
INSERT_IN = SUSP_RR
OFFSET=-0,0,0.008

コレも、INSERT_IN=としてSUSP_LFみたいな中に追加してるけど、これもサスペンションと一緒にキャリパーが動くようにするため。OFFSET=も位置合わせのため。ホイールとキャリパー交換した結果こんな感じ


▼ガラス(内側)を入れ替える

ガラスには、フロント、リアとも半透明ステッカーを入れたくて、こんなテクスチャを貼りたいわけだけども

これで出力したext_glass.ddsをskinフォルダに置いただけだと、ちゃんと?ズレる。

ほんとはこうしたい

なので、UV設定してあるガラスをこれまた他modから抜き取り、差し込むことになるのだけども、まず内側からやってみたけど、どこに差し込むかを悩む。
3dsimedで見たとき、ObjectByNameではGlass_Exterの後ろにいるので、

INSERT_AFTER =Glass_Exter としてみる。

[MODEL_REPLACEMENT_30]
FILE=wdts_nissan_silvia_s15.kn5
HIDE= Glass_int
INSERT =glass_int.kn5
INSERT_AFTER =Glass_Exter

これでちゃんと差し込めたけども、この後外側ガラスを貼るために HIDE= Glass_Exterを記載したら内側が消えちゃったので、iniに記載する順番とか関係なく、オブジェクトを消したらそれを基準には出来ないみたいね。
で、3dsimedのObjectXYだと、

WIPER_4の後ろにいるので、INSERT_AFTER = WIPER_4 と記載してみたら、なんか刺さった。90度回転してるみたいね。

まぁこれをROTATION=とかPOSITION=でちまちま直してもいいけど、もちっと試してみる、で結局 INSERT_AFTER = glass_dash としたらちゃんと貼れた。


▼ガラス(外側)を入れ替える

ちょっと躓いたのが外側のガラス。内側と同じように、

[MODEL_REPLACEMENT_31]
FILE=wdts_nissan_silvia_s15.kn5
HIDE= Glass_Exter
INSERT =glass_exter.kn5
INSERT_AFTER = glass_dash

と記載したところ、位置も正しく挿入されて、はい完了。と思っていた時期(ry
これがまた気づきにくいんだけど、旧Showroomはゲーム中と「ほぼ」同じ表示と思っていいと思うのだけど、ナニカが一部違うようで、Showroomではならないけど、ゲーム中だとこうなる

解りづらいかもだけど、リアガラスの向こう側にある三角ガラスの枠がリアガラスよりも手前にあるようにレンダリングされちゃう。これはオブジェクトの上下に関係してる?この枠のオブジェクトはGlassBlack_Intのようだ。
3dsimedでXYを見ると

今回外ガラスをInsertしたglass_dashはかなり上の方にあり、真ん中あたりにGlassBlack_Intがあり、かなり下の方にGlass_Exterがいる。このリストのGlass_Exterの直上はMiscというオブジェクトなので、ためしにINSERT_AFTER = Misc として見ると、位置ずれた(^^;

しゃーないので、OFFSET=に数値を入れてはShowroom見る、を繰り返して
正しいっぽい位置に移動した。
そして三角枠も正しく表示されるようになった。
いろいろ試したけども、GlassBlack_Intの直上がCluster_Counterで、直下がmirrorsだったので、INSERT_AFTER = Cluster_Counter とINSERT_AFTER =mirrorsを試したところ、案の定というか、INSERT_AFTER = Cluster_Counter では表示がおかしく、INSERT_AFTER =mirrors では正しい表示になった。なので、とくに透明なパーツの場合はこの順番を守った方が透過処理などが元々の意図したモノとなる・・・可能姓が高いような気がする(^^;

ところで位置合わせがめんどいので、内側ガラスと同じように INSERT_AFTER = glass_dash のままでもなんとかならないのかな、といろいろ弄ってみたところ、外ガラスのマテリアルに対してこう設定することで正常表示になった

[SHADER_REPLACEMENT_202]
MATERIALS = glassouter
DEPTH_MODE = NORMAL_FORCED

なので、INSERT_AFTER = glass_dash みたいな順番は適当だけどイイ位置に挿入してマテリアル設定でDEPTH_MODE = NORMAL_FORCED にするか、3dsimedのObjectXY表示での順番に合わせるけど挿入位置はズレるのでOFFSETとかで位置調整するか、の2通りの設定が出来ると。今回に限っては、かもだけど(^^;
あと、おかしい表示になるパーツは内側の黒枠 GlassBlack_Int なので、内側の黒いパーツなんてそうそう見ないのでHIDE=GlassBlack_Int として消しちゃうっていうテもなくはない(^^;


▼レンダリングの妙

その後いろいろ試した結果、コースINしたときのカメラ初期位置が外だった場合、そこからF5とかF7で見回すと表示は正常で、INしたときコクピットビューだったときフリーカメラにして見回すと表示がおかしかった。だから旧Showroomはもともと外カメラなので正常表示だっただけで、結局コースINしたときと同じ表示だったように思う。なぜ最初のカメラ位置によってレンダリング結果が変わるのかはわからんけども(^^;


▼ガラス入れ替えの弊害

というか実際ゲームしてみて気づいたけどもこんななってた

お気づきだろうか(^^; いやこれはこれでもいいんだけども

でまぁ、対策としてはコレも置き換えなんだろうけど、めんどいのでこれらのガラスはHIDEしちゃうことに。

[MODEL_REPLACEMENT_5]
FILE=wdts_nissan_silvia_s15.kn5
HIDE= pribor_window?


▼インクラの入れ替え

まぁ上記と同じような操作で、差し込み先のインクラ Cylinder003 をHIDEして、他から抜いてきた nissan_s15_bumf_int.kn5 を入れる。

[MODEL_REPLACEMENT_300]
FILE=wdts_nissan_silvia_s15.kn5
HIDE=Cylinder003
INSERT =nissan_s15_bumf_int.kn5
INSERT_AFTER =cp_buttons_SUB4
ROTATION = 0,75.874283, 0
OFFSET = 0, -0.55, 0.063

ただ、位置や回転の指定しないとこんな感じになった

ので、ROTATIONとOFFSETをちまちま弄って位置合わせた結果

あれ横幅狭いかな(^^;まいいか


▼タイヤブルブル

あとリプレイ見ててちょっと気になったのが、タイヤのペイントがボケ(blur)ないところ。おそらく元々のモデルはタイヤにペイント無くて、特に設定してなかったんだと思うんだけど、タイヤのテクスチャを文字ペイント有りにしたらちょっと気になる。

他の、タイヤペイントが速度によってblurするモデルとの違いを調べたら、今回置き換えに使ったタイヤのシェーダーはksPerPixelAT_NMで、テクスチャが1つ設定してあったけども、blurするモデルのシェーダーはksTyresというタイヤ専用のシェーダーになっていて、低速時用と高速時用のテクスチャが設定してあった。正攻法なら、タイヤ4個をksEditorなり3dsimedなりで編集するのだろうけど、これもext_configでなんとかならんか試したところ、以下の記載でいけた

[SHADER_REPLACEMENT_200]
MATERIALS = sp_tyre_advan_side,SIDEWAL_FACE
SHADER = ksTyres
RESOURCE_1 = txBlur
RESOURCE_FILE_1 = AD07_SIDEWALL_BLR.DDS

MATERIALSに2つマテリアルが設定してあるのは、前後のタイヤでサイドウォールのマテリアルが別だったから(^^;
txBlurという状態に設定したAD07_SIDEWALL_BLR.DDSはこんなやつ

これで停止時はくっきりで、20~30km/hくらいになるとblurなテクスチャに切り替わるようになった。
ちなみに
RESOURCE_2=txDiffuse
RESOURCE_FILE_2 = AD07_SIDEWALL_BLR.DDS
のようにtxDiffuseのほうにもblurなテクスチャ設定すれば止まっていてもタイヤだけblurな感じに(^^;


▼結果

kn5をfbxにしてモデル自体を書き換えたWDTSとほぼ同じ結果に出来たかな。ただ結局ボンネットとかのボディの一部を置き換えると、単色ならともかく画像のskinだと位置を合わせるのが至難の業になると思うので、今回の置き換えはもともとWDTSをblenderでボンネット置き換えてUV設定したりしたモデルからパーツを引っこ抜いてるからskinもそれなりになってるわけで。でもまぁホイールやインクラなどの置き換えについては汎用的な方法ではあると思うけども。


とりあえず自分用の備忘ということで(^^;

おすすめ