爆発からの現実的なカメラ/スクリーンシェイク


36

爆発の際にカメラを少し揺らしたいのですが、それを揺り動かすためにいくつかの異なる機能を試してみましたが、その「うわー、なんてバン!」私が探しているタイプの感じ。方形波タイプのパターンと同様に、線形減衰を少し加えた任意の比較的高い周波数の正弦波パターンをいくつか試しました。1つの軸、2つ、および3つすべてを移動しようとしました(ただし、この場合、台車の効果はほとんど目立ちませんでした)。

誰でも良いカメラの揺れのパターンを知っていますか?


2
爆発後のカメラの揺れのフィルム映像を見つけ、スローモーションでそれを見て、カメラが揺れる様子を見て、それに基づいてコードを作成してください。
スキズ

私はまったく同じ問題を抱えています-ぐらつきがあまりにも滑らかに見える
イアン

カメラシェークを実装するときに直面する最大の問題は、カメラではなくプレイヤーキャラクター(カメラが焦点を合わせる)が動くように見えることです。奇妙なことに、周囲を見るとカメラが動いていることに気づきますが、プレイヤーキャラクターに集中しているため、知覚が台無しになります。私はまだこれを解決しようとしています-おそらくカメラがプレーヤーに近づいたり、プレーヤーに向かって移動したときに視野を変えることによって。
カイ

回答:


35

カメラの向きにパーリンノイズを適用することで、適切なカメラシェークが得られました。それはあなたにビルトインされたより高い周波数の振動でまともな大きな衝撃を与え、本当によく見えることができます。

http://mrl.nyu.edu/~perlin/doc/oscar.htmlには、ノイズを生成するための詳細とサンプルコードがあります。


3
ああ、ノイズ、なぜ私はそれを考えなかったのですか...結局のところ、私はかなり短いノイズのバーストを感じました、そうではありません...素晴らしいアイデア!
ファルストロ

良い考えですが、パーリンノイズを使って解決できないものはありますか?:P
Cubed2D

1
ノイズは間違いなく先への道です。後のエフェクト、さまざまな方向へのランダムな動きの短い変化を想像すれば。しかし、それはけいれんにはなり得ないため、一定の短いセクションが必要です。パーリンノイズの完璧な使用のように聞こえます。
減速

17

爆発による画面の揺れを参照している場合、これをプロトタイプゲームに実装しようとしました(2dですが、3dに十分に変換されるはずです、私は期待しています)。見てみましょうユーチューブ動画をおよそ1時35分オフスクリーン揺れキック- 、それはあなたが探しているものだかどうかを確認

とにかく、私が達成した方法は、シーンのビューポートを作成し、中心点を保存することでした(centre)。

爆発が始まると、ランダムradiusに〜30ピクセルを作成します。次にcentre、この多くのピクセルでランダムな方向にビューポートをオフセットします。

後続の更新(画面への描画の間)ごとにradius、10〜20%削減し、この数ピクセルだけビューポートをオフセットcentreします。ただし、このオフセットにランダムな角度を選択する代わりに、以前のビューポートの角度をcentre取得し、そこに180 +/- 60度を追加しました。

したがって、基本的に、各更新(または10〜20ミリ秒程度)centreで、画面のピクセル数を減らすことでビューポートをオフセットします。

疑似コードは次のとおりです。

viewportCentre = (400,300) //Lets say screen size is 800 x 600
radius = 30.0
randomAngle = rand()%360
offset = ( sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
viewport.setCentre(viewportCentre + offset) // set centre of viewport
draw()  

while(true)  //update about every 10-20ms
{ 
    radius *=0.9 //diminish radius each frame
    randomAngle +=(180 +\- rand()%60) //pick new angle 
    offset = (sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
    viewport.setCentre(viewportCentre + offset) //set centre of viewport
    draw() //redraw
}

通常、半径が2.0未満になったら画面の揺れを止め、その時点でビューポートをにリセットしcentreます。


4
私はこの実装がとても好きで、小さな2Dゲームに最適です。コメントとして、randomAngle += (150 + rand()%60)+ /-問題を取り除くために行うのと同じです。
クレレボレ

2
ビデオがダウンしています。
タラ

「+/-」のどのような計算ですか?私はこの種のものを見たことがありません。
松尾洋

4

カメラの揺れを「感じる」ように正しくするには、動きの方向についてではなく、加速曲線についてより正確になります。

カメラの揺れはアニメーションの領域に入り込んでいるので、アクション/リアクションのすべてのルールが適用されます。ポイントからポイントへ直線的に移動している場合は、滑らかで均一に感じられ、衝撃のようなものではありません。

頭を前後に振ると、方向を変える中間点で最も速く動き、最初に減速してから新しい方向で起動する必要があるため、両側で減速することに気づくでしょう。

以下は、モーションに適用するさまざまなイージング関数のリストです。最初のモーションをEaseOutだけで少し急に感じさせ、残りをEaseInOutでヘッド/カメラの動きをシミュレートしたい場合があります。


1
緩和により、それでもスムーズになりすぎると思います。パーリンノイズは良いアイデアのように見えますが、そうでなければフェードアウトするためにランダム範囲が時間とともにゼロに減少する単純なランダムに見えます(実際の動きよりも半径を小さくして、動きを緩和するさまざまなイーズ関数を試してみます)それ自体がカメラを春のように感じさせ、私の経験ではカメラの揺れを感じることはありません)。
カイ

3

wkerslakeは正しい、カメラの揺れはあなたが思うよりも複雑に見える。

揺れているカメラをエミュレートするときは、どのタイプのカメラ(オペレータ)を模倣したいかを考える必要があります。カメラの重量は慣性に影響します。重いカメラは、小さな「ランダムな」動きを滑らかにします。レール上または車内のカメラオペレーターは、ノイズを追加します。

PerlinノイズまたはSimplexノイズを使用することは間違いなくオプションです。それは、異なるノイズ比の間で適切なバランスを見つけることです。しかし、値間の補間を使用すると計算負荷が低くなり、同じくらい効果的であることがわかりました。

少し前に、私は多くのことを正しくしているように見えるMayaスクリプトを見つけました。あなたは見てみましょうことができています

また、Gran Turismo(5)をご覧ください。ゲームのリプレイを見るときに、彼らのチームはさまざまな種類のリアルタイムのカメラシェーキングを行うという印象的な仕事をしました。


2

動的オブジェクト物理学(おそらく正しい言葉ではないが、私が言っていることのようなもの)があり、固定されていないオブジェクトが爆発によって「吹き飛ばされる」場合、カメラをそのようなオブジェクトとして影響させることができます。
唯一の違いは、カメラの回転/ピッチ/ヨー/ロールを変更することであり、位置は変更しません。
それ以外に、おそらく乱数シーケンスを生成し、それらを何らかの方法で回転に変換しますか?ハイトマップ、グレースケールのものが一例かもしれないと考えてください。それらはまったく違いはありませんが、ランダムです。


面白いアイデアを1つ、ノイズの動きを試してみると思います。それを実行したら、カメラがスプリングに取り付けられて後方に押されているかのように、スモスドリー効果を追加しようとします衝撃によって。
ファルストロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.