takeyohのおぼえがき

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

同乗者のアニメーション

車の助手席に乗せた同乗者も動かせないかな、ということで覚書です。

車の一パーツとしてアニメーション作成しても良いのですが、左右、上下、前後に動く車に合わせて同乗者のアニメーションを設定する方法がないなと思っていました。

(どれかの軸のアニメーションを作ると、ほかの軸のアニメーションが止まる・・・)

検索していたら、これを発見しました。

github.com

CSPの機能の一つで、Wobbly bitsというセクションがありました。

左右、上下、前後へのG-forcesに合わせて、オブジェクトをアニメーションさせられるものです。物理的なシミュレーションではないようですが、それっぽく動くらしい。

ということで、バギーに乗る社畜ちゃんの上半身を分離させ、Wobbly bitsを使って動かしてみました。

まずモデルの構成はこうしました。

社畜ちゃんを頭、上半身、胸、下半身、左足、右足に分割。
頭、上半身、胸パーツをcharエンプティの下に格納。(charエンプティの回転はx=90,y=0,z=180に設定)

です。これをそのまま車作成同様fbxでエクスポートして、ksEditorでkn5作成します。

次に、extension/ext_config.iniに以下を追記。

[WOBBLY_BIT_0]
NAME =char  ; name of the node to move
CONNECTED_TO = 0.3,0.1,-0.6    ; point to which node is attached to, and around which it will rotate
MAX_RANGE = 2.55                ; max range node can move from its original position
DAMPENING_LAG = 0.53            ; think of it as usual AC lag value, trying to zero node’s speed
G_GAIN = 5                      ; how much G-forces affect node’s speed
GRAVITY_GAIN = 3                ; how much gravity affects node’s speed
OFFSET_GAIN = 200              ; how strong is returning force
STIFF_AXIS = 0, 0, 0            ; optional higher stiffness axis to reduce movement along it
STIFF_AXIS_STIFFNESS = 1.7      ; now stiff is optional stiffness axis
G_FILTER = 0                    ; temporal filter for G-forces
DEFAULT_GRAVITY_INCLUDED_ALREADY = 1 ; either `0` or `1`; set it to `1` if you don’t want gravity to skew your stuff when car is in neutral position

NAMEに先ほど上半身を格納したエンプティ名を設定(オブジェクト名だけでなく、エンプティ名でもできるっぽい)

CONNECTED_TOは揺れるときの起点になる座標。今回上半身を揺らすので、腰とかおへそあたりの座標を設定しています。

MAX_RANGEは揺れの大きさ、DAMPENING_LAGは揺れの戻りの抑制。小さくするほど揺れ続け、大きくするほど、一回揺れて終わり、みたいな。

G_GAINはオブジェクトの揺れスピードにGが及ぼす比率。

GRAVITY_GAINはその重力版。

OFFSET_GAINは戻りの強さですね。小さくするほどぐわ~んと大きく揺れて戻り、大きくするとパパっと揺れて戻ってくる、みたいな。
STIFF_AXISはx(左右)、y(上下)、z(前後)の揺れをどれくらい減少させるかです。全部0なので、何も制御しない設定。数字を増やすとその方向の揺れが抑制されます。例えばz=0.5とかにすると、前後の動きだけGの影響が半分に抑制されるってことですね。

のこり2つ試してないのでコメントできませんが、上記に書かれているメッセージをもとにお試しください。(ぉ

 

ちなみに、最初のサイトの情報を見ると、メッシュに穴をあけずにアニメーションさせるにはboneを使ってスキン化し、そのboneをNAMEに指定すればよいような雰囲気の記述がみられます。ので、上記も最初はエンプティではなく、アーマチュア&ボーンを使って作成してみたのですが、ボーンのNAMEに設定しても、アニメーションさせることができませんでした。

具体的な方法がわかれば知りたいですね~。

最後は社畜ちゃんが動く様子の動画です。

youtu.be

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