Camera & controls

Impulse Camera Shake

インパルスシェイク

衝撃から減衰する揺れをカメラに加える。

3 / 10

Interactive demo

Preparing the demo…

Impulse Camera Shake

Drag to orbit, Ctrl/⌘ + scroll to zoom. Use two fingers on touch screens.

This explanation is currently available in Japanese.

ひとことで

爆発・着地・被弾などの衝撃に合わせて画面を短く揺らし、衝撃の強さを体で感じさせる演出です。よく使われる作り方では、衝撃のたびに「トラウマ」と呼ぶ 0〜1 の値を足し、時間とともに減らします。画面のずれと傾きは、トラウマの 2 乗になめらかなノイズを掛けて決めます。

ゲームでの使いどころ

  • 爆発・大きな攻撃:近くで爆発したら大きく、遠くなら小さく揺らす(距離で足すトラウマを変える)。
  • 着地・重い足音:高い所から着地したとき、巨大な敵が歩いたときに小さく揺らす。
  • 被弾・ダメージ:受けたダメージの大きさに応じて揺らし、ダメージを受けたことをはっきり伝える。
  • 乗り物・環境:地震、エンジンの振動、荒れた路面など、続けて揺らしたい場面にも同じしくみを使える。

しくみ

トラウマ tt は衝撃のたびに足して上限 1 で止め、毎フレーム一定の速さで減らします。

t←min⁡(1, t+a),t←max⁡(0, t−r Δt)t \leftarrow \min(1,\ t + a), \qquad t \leftarrow \max(0,\ t - r\,\Delta t)

揺れの強さ ss はトラウマの 2 乗(または 3 乗)にします。

s=t2s = t^2

2 乗にすると、小さなトラウマではほとんど揺れず、大きな衝撃では急に強く揺れます。また、減っていくときに最後はすっと静かになります。

画面のずれと傾きは、時間で動くパーリンノイズなどのなめらかなノイズ NN から作ります。

Δx=A s N1(f τ),Δy=A s N2(f τ),θ=Θ s N3(f τ)\Delta x = A\,s\,N_1(f\,\tau),\quad \Delta y = A\,s\,N_2(f\,\tau),\quad \theta = \Theta\,s\,N_3(f\,\tau)

AA は最大のずれ、Θ\Theta は最大の傾き、ff は揺れの細かさ(周波数)、τ\tau は時間です。N1,N2,N3N_1, N_2, N_3 は、違う場所(シード)で読んだ同じノイズです。

実装のポイント

  • 追従の結果に足す:揺れは、デッドゾーンなどで決めたカメラ位置に最後に足すだけにします。揺れた位置を次のフレームの追従の元にすると、カメラが少しずつずれていきます。
  • 傾きを少し加える:横と縦のずれだけより、数度の傾きを加えると迫力が出ます。3D では位置より回転を揺らす方が酔いにくいことが多いです。
  • 衝撃の向き:爆発の方向へ一度押されてから戻る動き(ばね・ダンパーで戻す)を加えると、どこから衝撃が来たかも伝えられます。
  • 設定で弱められるように:揺れで酔う人もいるので、揺れの強さを設定画面で下げたり止めたりできるようにします。

つまずきやすい点

  • 毎フレームの乱数:乱数でずらすと、向きがフレームごとにばらばらに飛び、がたがたした安っぽい揺れになります。フレームレートによって見え方も変わります。
  • 揺れ続ける:トラウマを減らし忘れたり、小さな衝撃が続いたりすると、ずっと揺れて酔いの原因になります。上限と減る速さを決めておきます。
  • UI まで揺らす:画面全体を揺らすと、体力ゲージや文字まで揺れて読めなくなります。ゲームの世界を映すカメラだけを揺らします。

デモで試すこと

  1. 「大爆発」を押すと、黄色い光が出て、画面が大きく揺れ、しだいに収まります。右下のグラフの赤い線(トラウマ)がまっすぐ下がり、青い線(ずれ)がなめらかに波打ちながら小さくなります。
  2. 「小さな衝撃」を何度か押すと、トラウマが足し算で積み上がっていくことを確かめてください。1 回だけだと、2 乗のためにほとんど揺れません。
  3. 「揺らし方」を「毎フレームの乱数」にすると、同じ強さでも、がたがたした落ち着かない揺れに変わります。
  4. 「揺れの細かさ」を小さくすると、ゆったりした大きな揺れ(船の上のような揺れ)になります。

References

Unity Cinemachine Position Composer ↗

A general reference for this subcategory.