takeyohのおぼえがき

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

車体側のシフトアニメーションの作成(スカート付き編)その1

以前、ドライバのシフトアニメーション作成を書きましたが、それに合わせて車側のシフトアニメーションを作成します。

今回は、ようやくシフトノブ下にあるスカート部分(って言うのかな?)の処理方法もわかったので、合わせて覚書にします。

具体的にはこの丸の部分です。

通常、オブジェクトにアニメーションを設定するときは、blenderの場合、

1)エンプティを作成する。

2)エンプティの下に動かしたいオブジェクトをいれる。

3)エンプティにアニメーションを設定する。

という作業になります。シフトレバーのアニメーションも同様に作成することは可能なのですが、一つ問題が。

普通にアニメーションを作成すると、例えば3速にシフトを入れるとこうなってしまいます。

シフトレバーは動くのですが、その下にあるスカート部分(皮やゴムなのでおおわれている部分ですね。)も一緒に動いてしまいます。

実際にはこうなってほしいわけです。

「レバーは倒れるけど、その下のスカート部分は伸び縮みして、縁部分は動かない」です。

ちなみにKUNOSのガイドにもこの部分については記載があるのですが、何せ3DMAXを前提に書かれているので、blenderでやる場合どうすればよいのか?がずっと解読できませんでした。ある日ふと「こうやればいいんじゃ?」と思い試したらようやく実現できました。長かった・・・。(ふぅ)

では、blenderでこのアニメーションを実現する方法です。

 

まず前処理として、アニメーションとして動かすオブジェクト(シフト部分やサイドブレーキ部分)は、他のパーツから分離して独立したオブジェクトにしておきます。

(これはエンプティを使ってアニメーション作成するときと同じです。)

 

2023.7.22追記)

下記のアーマチュアがコレクションの直下に来ますので、アニメーションとして動かすオブジェクトがどこかほかのエンプティの下に入っている場合は、コレクション直下に移動させます。

かつ、アニメーションとして動かすオブジェクトはオブジェクトプロパティで、回転X=90, Y=0, Z=180に設定されていることが必要です。

コレクション直下に移動させたときオブジェクトの位置が動いてしまうのは、その親となっていたエンプティの設定情報がなくなったためです。コレクション直下に移動させてから、オブジェクトを元あった位置に戻しましょう。

そして、このオブジェクト群の原点はワールド原点に設定します。3Dカーソルをワールド原点に移動させ、オブジェクトの原点を3Dカーソルに移動させることで設定できます。

ここまで)

 

このアニメーションを作成するには、エンプティは使いません。ドライバモデル作成時と同じ、アーマチュアを利用します。

アーマチュアは人型のモデルに骨を入れ、モデルにウェイトを設定することで、骨の動きに合わせてモデルを変形させることができる機能です。

今回の例でいうと、シフトレバーやハンドブレーキレバーのオブジェクトに骨を追加し、それにウェイトを設定することで、アニメーションさせたときモデルが変形するようにするわけです。

 

ではシフトレバーを例に作っていきます。

シフトのスカート下あたりに3Dカーソルを移動させます。そして「追加」から「アーマチュア」を選択します。

すると3Dカーソルがある場所に巨大な骨(ボーン)が登場します。

そしてアーマチュアという人の形をしたオブジェクトが一つできます。この名前も2バイト文字は認識できないので、1バイト文字に修正します。(今回の例ではshiftAnimとしました。)

生成されたボーンをクリックして選択し、Tabキーで編集モードに切り替えます。

スケールを使って、ボーンを小さくします。小さくすることで3Dカーソル位置からずれた場合は、小さくしてから、Shift+Sで「選択物→カーソル」を選択すると3Dカーソルの位置にボーンが移動します。

その結果はこのようになります。

次に、スカート部分をボーンに合わせてウェイト設定します。※1

1)「編集」から「オブジェクトのモードをロック」のチェックを外す。

2)アーマチュアを選択し、モードをポーズモードに変更。

3)スカート部分のオブジェクトを選択

4)ctrlキーを押しながら、上記のボーンを選択

 すると、スカートのオブジェクトがオレンジ色、ボーンが青色になります。

5)ctrl+pでペアレント対象を表示。「自動のウェイトで」を選択。

すると、スカート部分のオブジェクトが選択したボーンに紐づき、いったんウェイトが自動で設定されます。

6)スカート部分のオブジェクトを選択して「ウェイトペイント」モードに変更。いい感じに塗る。(ぉぃ

で塗った結果がこうなります。

赤いところが、ボーンの影響を強く受ける部分、青くなるほど影響を受けない部分です。一つ目のこのボーンはベースになる部分で、アニメーション設定はしません。

つまりそのボーンに対して赤く塗られているということは「この部分は動かない」ということになります。

次に、ボーンを一つ増やします。

1)上記の1つ目のボーンを選択する。

2)Tabキーで編集モードにする。

3)四角錘の先端方向(子の方)の球体を選択する。

4)Eキーを押すと新しいボーンが登場するので伸ばす。

その結果はこんな感じ。

この2つ目のボーンは、シフトレバーが倒れる部分のアニメーションに使います。

スカートの上部分(上記のウェイトで言うと青い部分)はシフトレバーと一緒に動きますので、上記※1と同じ手順で、今度は2つ目のボーンとスカートでウェイトを設定します。

するとこんな風になります。

先ほどとは逆で、2つ目のボーンは動きますので、赤いところはそれに追従して動く部分、青い部分は影響を受けず動かない部分になります。

これで動かない部分が設定できるなら、1つ目のボーンは要らないのでわ?と思うかもしれませんが、ここが重要なポイントです。

ガイドにも書かれているのですが、この方法(スキンメッシュを使ったアニメーション方法)では、この対象になるオブジェクトはすべての頂点がどれかのボーンのウェイトが設定されていなければならないという条件があります。

オブジェクト(上記例ではスカート部分)を構成するすべての頂点が、どれかのボーンのウェイト影響を受けている必要があります。どのボーンの影響も受けない頂点がある場合、その頂点は原点に移動してしまうので、オブジェクトの形状が崩壊します。

すべての頂点にウェイトを設定するために、ベースとなる1つ目のボーンとアニメーションを設定する2つ目のボーンを用意しているということです。

 

次に、2つ目のボーンの先から3つ目のボーンを作成します。作り方は2つ目の時と同じ。結果はこうなります。

3つ目のボーンは、スカートより上にあるシフトノブ部分にウェイトを設定するためのものです。今度は※1の手順をシフトノブ部分と3つ目のボーンに対して行いウェイトを設定します。その結果はこうなります。

全部赤く塗ります。これで、3つ目のボーンが動くと、このオブジェクトは連動して動くようになります。

ここまで設定した段階で、2番目のボーンを「回転」で前後左右に動かし、シフトレバーが連動して動き、スカート部分が伸び縮みすればOKです。

ここまで出来たら、2番目のボーンにシフトのアニメーションを設定します。

ここで2つ目の大切なポイントです。

ボーンのアニメーション設定は、オブジェクトプロパティではなく、ボーンプロパティで設定すること!です。ドライバアニメーション設定の時に書いた注意事項と同じです。

R(リバース)N(ニュートラル)、1、2、3、4、5、6速の各ポジションにレバーを傾けてアニメーションを設定していくとこうなります。

(以下順番に掲載)


これで、各シフトの位置にレバーが動くアニメーション設定は終わりです。

 

もう一点忘れてはいけないのが、オブジェクトのマテリアル設定です。

今回ボーンでウェイトを設定したオブジェクトは、マテリアル設定でKsSkinnedMeshまたはKsSkinnedMesh_NMDetailを設定する必要があります。

これらのオブジェクトに対して、専用のマテリアルが設定されている場合は問題ないですが、分離する前に前のマテリアルが設定されている場合は、ksEditorで設定が出来なくなってしまうので、ウェイトを設定したオブジェクトに使われているマテリアルは複製などして、別マテリアル設定にしておきます。


続いて、エクスポートです。

今回アーマチュアを設定したので、車のデータもエクスポートしなおします。

いつもと異なるのは、FBXのエクスポート時に「アーマチュア」も選択する、です。

また、シフトレバーのアニメーションはfbxではなく、ドライバアニメーション同様、Assetto Corsa animationアドオンを使ってエクスポートします。

アーマチュア(上記例ではshiftAnim)を選択し、エクスポートからAssetto Corsa animationを選択してエクスポートします。

3つあるチェックは真ん中だけチェックします。上記例ではcar_shiftAnim.ksanimという名前でエクスポートしています。

 

エクスポートした車はksEditorを使い、いつもの手順でkn5を作成してcar modフォルダへコピーします。

ksEditorで読み込んだあと、ウェイトを設定したオブジェクトのマテリアルはKsSkinnedMeshまたはKsSkinnedMesh_NMDetailを設定します。

(設定の例)

 

シフトアニメーションのファイルは、car modのanimationsフォルダの中に入れます。

 

最後にアニメーションの設定です。

car modのextension/ext_config.iniに以下を追記します。

[ANIMATION_...]
INPUT = GEAR
FILE=car_shiftAnim.ksanim
INPUT_AS_PROGRESS = 1     
INPUT_LUT = (|-1=0|0=0.143|1=0.286|2=0.40|3=0.571|4=0.69|5=0.857|6=1|)
INPUT_LAG_UP = 0.6
INPUT_LAG_DOWN = 0.6

GEARをインプットにしてアニメーションします。FILEは先ほど作成したksanimファイルです。

INPUT_LUTは各GEARの時、どのポジションにシフトレバーを動かすかの設定です。

今回はアニメーションのフレーム1から22まで3つおきにポジションを設定したのですが、INPUT_LUTはそのフレーム単位で指定するのではなく、1~22のフレームが0~1の範囲で表現されるので、Reverse(-1)が0、6速が1(22フレーム目)、その間を小数点で刻んで設定します。

INPUT_LAG_UPとDOWNはシフトアニメーションのスピードラグ。0~1の間で設定し、数字が大きくなるほど「ラグが大きい(動きが遅くなる)」です。

 

いかがでしょうか。

今回の内容は複雑なため、十分な説明が書けていません。これまである程度車を作ったことがあって知識がある前提で、ポイントだけかいつまんだ内容になります。

 

 

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