takeyohのおぼえがき

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

ドライバの作成

最も仕組みがよくわからないのは、ドライバです。

でもここがわかれば、運転中のアニメーション表現に幅が出るかもということで、少しずつ試していきます。

 

とっかかりとして、LOW STYLE GANGさんのDiscord内でSHINGENさんがhow toを書いてくださっているという情報を頂き、読んでみました。

https://discord.com/channels/760705467214331945/827227642666418206/907938235093749820

こちらは、ドライバモデルを作成後、DRIVE_BASE.fbxをベースにドライバアニメーションを追加していく方法です。この方法の一番難しいのは、ドライバアニメーションを自分で一から設定してあげないといけないところです。

私はもっと手抜きがしたい(ぉぃ)ので、ベースとなるドライバモデルのファイルkn5を作成し、以前の覚書に書いたdriver_rigged_v1.blendを使ったアニメーションを適用する方法を試します。

steer.ksanimとdriver_base_pos.knhでドライバポジションを変更(blender) - takeyohのおぼえがき (hatenablog.com)

これだと、ドライバモデルだけ作れば、ステアリングとポジションのアニメーションは簡単に作れることになります。

 

で、ドライバモデルの作成です。

(手順が整理されていないため、順番がめちゃくちゃです。全体がわかってきたら再整理するかも。)

SHINGENさんのコメントに基づき、ドライバモデルは、

3Dモデルの基点をX:0,Y:0,Z:0、回転軸をX:90,Y:0,Z:0、スケール100%にしてモデルにリグを組む。

に従って作ってみました。確かにXYZが0でないと、ksEditorで表示したときにXYZが0の場所にずれて表示されたり、スケールが100%に戻されて頭と体の位置がずれたりしました。

標準のドライバを展開してfbxでblenderにインポートするとこんな感じです。モデル①

特に向きは設定せずインポートしましたが、車の場合とは逆で-Zが前方になっているようです。

まずこれをみるために、アーマチュア、ボーン、リグって何?な状態だったので、こちらのサイトを読み込み、さらにそこからわからないキーワードを検索して調べました。

www.yamato-tsukasa.com

標準ドライバの中を見てみると、DRIVER:DRIVERというアーマチュアが最初にあって、

その下にボーンの集合体と、ドライバの頭(DRIVER:GEO_Driver_FACE)、グローブ(DRIVER:Gloves)、ヘルメット(DRIVER:HELMET)、ドライバの体(DRIVER:suit)が入っています。

まず今回、ヘルメットは不要だったので、DRIVER:HELMETごと削除。(DRIVER:HELMETを右クリックで「階層を削除」です。)ドライバの顔が見えるようになります。

で、このドライバのアーマチュアの構成を生かしつつ、頭、体、手のパーツを入れ替えて、新しいパーツにボーンウェイトを設定してできれば、完成するはず!

 

で、パーツの入れ替えです。入れ替え用のドライバデータ(モデルのみ)を作ります。モデル②

(頭だけ別の場所になっていて違和感がありスミマセン。この後の工程の都合上こうなっています。)

ドライバのモデルが複数パーツで構成されてましたが、これを頭、体、手の3つに分けてそれぞれ統合(ctrl+J)して一つのパーツにします。(マテリアルの設定はそのまま)

位置はXYZ=0,回転もXYZ=0、スケールもXYZ=1.0です。

頭部分だけは、回転がX=90、頭の中心の原点がワールド原点になるように動かしてあります。

また、ドライバのモデルのメッシュ数がたくさんある(細かなデータ)と、モデルが細かすぎる影響でボーンウェイトが設定できない場合があるようです。

例えばこんな感じ。今回もエラーが出たので、頂点の数を減らしてモデルを簡略化しました。

【Blender 2.9】アーマチュアの自動ウェイトが失敗するとき | 謎の技術研究部 (ultra-noob.com)

 

で、最初のドライバモデル①に、差し替えたいドライバモデル②を統合していきます。

モデル①をblenderで開いたのち、同じCollectionの中に、モデル②をインポートします。するとこんな感じ。

二つのモデルが一つに表示されてます。

あとから挿入したモデル②のオブジェクト名が①と被っているため、各オブジェクトの後ろに.001が追加されます。(これはblenderの仕様)

まずは、頭から取り替えていきます。

1)モデル①のDRIVER:GEO_Driver_FACEを削除します。

2)モデル②のDRIVER:GEO_Driver_FACE.001をDRIVER:DRIVERアーマチュアの下に移動。(オブジェクトをShiftキー押しながらドラッグ&ドロップ)

3)モデル②のDRIVER:GEO_Driver_FACE.001をDRIVER:GEO_Driver_FACEに名前修正。

4)DRIVER:GEO_Driver_FACEのオブジェクトプロパティを修正。

修正前)

修正後)

「関係」部分の親タイプを「ボーン」に、親ボーンを「DRIVER_RIG_HEAD」に変更します。

体と手はボーンウェイトを使ってメッシュを制御していますが、頭だけはボーンウェイトではなく、この「関係」を使って、頭部分のボーンに頭オブジェクトを紐づけることで制御しているようです。

これを設定することで、頭が正しい位置に移動してきます。

頭だけミクで、体が普通のドライバ・・・。変な形でスミマセン。

頭だけを入れ替えたい場合であれば、ここまででOKで、あとはfbxにエクスポートしてksEditorでkn5のドライバを生成すればOKです。

 

今回はさらに体のリプレイスも進めます。

モデル②にモデル①のアーマチュアを移植するという方法もあると思いますが、今回はモデル①にモデル②をインポートして、モデル①のアーマチュア&オブジェクトにモデル②のオブジェクトを結合していく方法を使いました。

 

1)モデル②の体(DRIVER:suit.001)をDRIVER:DRIVERアーマチュアの下に移動。

2)後の結合作業を楽にするため、モデル①の体(DRIVER:suit)の一部(今回はつま先)を残して、ほかの頂点をすべて削除

3)モデル①の体(DRIVER:suit)とモデル②の体(DRIVER:suit.001)を結合(二つのオブジェクトを選択してctrl+J)

4)2の作業で残した部分(つま先)の頂点を削除。(モデル②の体部分だけ残る)

5)体のオブジェクト名をDRIVER:suitに修正。

6)体のオブジェクトにボーンウェイトを設定。

 先にDRIVER:suitを選択、次にctrlキーを押しながら、DRIVER:DRIVERアーマチュアを選択。ctrl+pを押すと、「ペアレント対象」が出るので「自動のウェイトで」を選択。



とりあえず適当にボーンウェイトが割り当てられます。本来はボーンの位置を合わせたり、ボーンウェイトを適切に塗りなおしたりが必要ですが、動作確認を優先でいったんこのままにします。

です。非常に稚拙なやり方で、かつボーンの位置がモデルとあっていないですが、いったんリプレイスは可能になります。

手のオブジェクトも体と同じ手順で結合していきます。

できたのはこんな感じ

モデル①のボーンにモデル②をすり替えたので、ボーンの位置がめちゃくちゃですね・・・。

いったんこれで、fbxでエクスポート。今回はアーマチュアも使っているので、あーまチェアも選択しておくのを忘れずに・・・。あと前方が-Zになっているのも、car modとは違いますね。

で、エクスポートしたfbxをksEditorで読み込み、マテリアル設定を行ったら、kn5を作成します。

マテリアルの設定が足りていないとエラーになるのでご注意を。(車と同じです。)

で、作成されたkn5を表示してみたところ・・・・?!

なんと、頭だけで、体と手がありません!な、なぜ??

この解決にかなりはまりました。(ちゃんと文献読めばいいのでしょうが・・・)

試行錯誤の結果わかったのは、ksEditorでの体と手のパーツのマテリアル設定でした。

体に設定されているマテリアルの一つを例に。上のもでるでは、costumes.002というマテリアルの設定が、ksPerPixelで設定されていました。

頭のパーツはこれでよいのですが、体と手のパーツはksPerPixelとかは使えず、「ksSkinnedMesh」か「ksSkinnedMesh_NMDetail」でないとだめということでした。

上記のcostumes.002の例でいうと、下記のように修正。



追加されているddsはほかモデルからのパーツ流用してます。

これ以外に体・手に設定されているマテリアルはすべて同様に修正。

(設定が終わったらFileのSave Persistenceで.iniファイルに設定値保存するのを忘れずに)

修正が終わったら、kn5にエクスポート。こんどは・・・・?!

やった!体も手も表示されるようになりました。よかった・・・。

試しに車に乗せてみると・・・。

ちゃんとドライバとして認識されてます。頭も左右に動くし、ハンドルに合わせて手も動きます。

髪の毛が長すぎて、はみ出してます。(^^;

ただ、ボーンの設定が適当なので、腕の関節が変なところで曲がってますね。

次はボーン設定に挑戦していきます。

(ここまでだけでも長かった・・・)

 

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