ひとことで
目標からのずれに比例して引き戻すばねと、速度に比例してブレーキをかけるダンパー(減衰器)を組み合わせた運動モデルです。行き過ぎて揺り戻す「弾み」や、ぷるんと揺れて収まる動きを、たった 2 つのパラメータで作れます。
ゲームでの使いどころ
- 揺れもの:髪、しっぽ、アクセサリー、アンテナ、ぶら下がった看板。
- UI の弾み:ボタンを押したときのへこみと戻り、ドラッグを離したカードが所定位置へ戻る動き。
- ヒットリアクション:攻撃を受けた敵や的がぶるっと揺れる。
- カメラ:衝撃でずれたカメラが揺れながら戻る、乗り物のサスペンション表現。
しくみ
質量 の物体の、目標位置からのずれを 、速度を とすると、ばね定数 、減衰係数 の力は
となります。この運動の性格は、減衰比 で決まります。
| 減衰比 | 名前 | 動き |
|---|---|---|
| 不足減衰 | 行き過ぎて振動しながら収まる(弾む) | |
| 臨界減衰 | 振動せず、最短で収まる | |
| 過減衰 | 振動しないが、ゆっくり戻る |
(固有角振動数)は揺れの速さを、 は揺れの収まり方を決めます。 と を直接いじるより、(または周波数)と で調整するほうが、アーティストにとって直感的です。
実装のポイント
- サブステップ: が大きい(硬いばね)と、1 フレームの では数値的に発散します。デモのように 1 フレームを数回に分けて積分するか、解析解を使う方法(Daniel Holden の "Spring-It-On" など)を検討します。
- 親の動きを入力にする:揺れものは「親が動いた分だけ、ばねの先端が相対的に取り残される」と考えます。デモでも台座の移動量をずれに加えています。
- 軸ごとに独立:x, y, z を独立なばねとして扱っても、多くの場合は十分自然です。
つまずきやすい点
- 陽的オイラー法で発散する:位置を先に更新する素朴な積分では、減衰なしでも振幅が増えていきます。半陰的オイラー法を使います。
- フレームレート依存:可変の で積分すると、フレームが落ちたときに挙動が変わります。固定の小さなステップで回すのが安全です。
- 揺れすぎ: が小さすぎる揺れものは、いつまでも揺れ続けて落ち着きのない画面になります。0.3〜0.6 程度から調整を始めると扱いやすいです。
デモで試すこと
- 「減衰係数 c」を 0 にすると、標的はいつまでも揺れ続けます。そこから少しずつ上げて、右下のグラフの揺れが収まる速さの変化を見てください。
- 「ばね定数 k」を上げると揺れが速く(周波数が高く)なり、下げるとゆったりした揺れになります。左下の減衰比 ζ も同時に変わる点に注目してください。
- 「叩く」で瞬間的な速度を与えると、ヒットリアクションとしての見え方が確認できます。