This explanation is currently available in Japanese.
ひとことで
爆発・着地・被弾などの衝撃に合わせて画面を短く揺らし、衝撃の強さを体で感じさせる演出です。よく使われる作り方では、衝撃のたびに「トラウマ」と呼ぶ 0〜1 の値を足し、時間とともに減らします。画面のずれと傾きは、トラウマの 2 乗になめらかなノイズを掛けて決めます。
ゲームでの使いどころ
- 爆発・大きな攻撃:近くで爆発したら大きく、遠くなら小さく揺らす(距離で足すトラウマを変える)。
- 着地・重い足音:高い所から着地したとき、巨大な敵が歩いたときに小さく揺らす。
- 被弾・ダメージ:受けたダメージの大きさに応じて揺らし、ダメージを受けたことをはっきり伝える。
- 乗り物・環境:地震、エンジンの振動、荒れた路面など、続けて揺らしたい場面にも同じしくみを使える。
しくみ
トラウマ は衝撃のたびに足して上限 1 で止め、毎フレーム一定の速さで減らします。
揺れの強さ はトラウマの 2 乗(または 3 乗)にします。
2 乗にすると、小さなトラウマではほとんど揺れず、大きな衝撃では急に強く揺れます。また、減っていくときに最後はすっと静かになります。
画面のずれと傾きは、時間で動くパーリンノイズなどのなめらかなノイズ から作ります。
は最大のずれ、 は最大の傾き、 は揺れの細かさ(周波数)、 は時間です。 は、違う場所(シード)で読んだ同じノイズです。
実装のポイント
- 追従の結果に足す:揺れは、デッドゾーンなどで決めたカメラ位置に最後に足すだけにします。揺れた位置を次のフレームの追従の元にすると、カメラが少しずつずれていきます。
- 傾きを少し加える:横と縦のずれだけより、数度の傾きを加えると迫力が出ます。3D では位置より回転を揺らす方が酔いにくいことが多いです。
- 衝撃の向き:爆発の方向へ一度押されてから戻る動き(ばね・ダンパーで戻す)を加えると、どこから衝撃が来たかも伝えられます。
- 設定で弱められるように:揺れで酔う人もいるので、揺れの強さを設定画面で下げたり止めたりできるようにします。
つまずきやすい点
- 毎フレームの乱数:乱数でずらすと、向きがフレームごとにばらばらに飛び、がたがたした安っぽい揺れになります。フレームレートによって見え方も変わります。
- 揺れ続ける:トラウマを減らし忘れたり、小さな衝撃が続いたりすると、ずっと揺れて酔いの原因になります。上限と減る速さを決めておきます。
- UI まで揺らす:画面全体を揺らすと、体力ゲージや文字まで揺れて読めなくなります。ゲームの世界を映すカメラだけを揺らします。
デモで試すこと
- 「大爆発」を押すと、黄色い光が出て、画面が大きく揺れ、しだいに収まります。右下のグラフの赤い線(トラウマ)がまっすぐ下がり、青い線(ずれ)がなめらかに波打ちながら小さくなります。
- 「小さな衝撃」を何度か押すと、トラウマが足し算で積み上がっていくことを確かめてください。1 回だけだと、2 乗のためにほとんど揺れません。
- 「揺らし方」を「毎フレームの乱数」にすると、同じ強さでも、がたがたした落ち着かない揺れに変わります。
- 「揺れの細かさ」を小さくすると、ゆったりした大きな揺れ(船の上のような揺れ)になります。