爆発の際にカメラを少し揺らしたいのですが、それを揺り動かすためにいくつかの異なる機能を試してみましたが、その「うわー、なんてバン!」私が探しているタイプの感じ。方形波タイプのパターンと同様に、線形減衰を少し加えた任意の比較的高い周波数の正弦波パターンをいくつか試しました。1つの軸、2つ、および3つすべてを移動しようとしました(ただし、この場合、台車の効果はほとんど目立ちませんでした)。
誰でも良いカメラの揺れのパターンを知っていますか?
爆発の際にカメラを少し揺らしたいのですが、それを揺り動かすためにいくつかの異なる機能を試してみましたが、その「うわー、なんてバン!」私が探しているタイプの感じ。方形波タイプのパターンと同様に、線形減衰を少し加えた任意の比較的高い周波数の正弦波パターンをいくつか試しました。1つの軸、2つ、および3つすべてを移動しようとしました(ただし、この場合、台車の効果はほとんど目立ちませんでした)。
誰でも良いカメラの揺れのパターンを知っていますか?
回答:
カメラの向きにパーリンノイズを適用することで、適切なカメラシェークが得られました。それはあなたにビルトインされたより高い周波数の振動でまともな大きな衝撃を与え、本当によく見えることができます。
http://mrl.nyu.edu/~perlin/doc/oscar.htmlには、ノイズを生成するための詳細とサンプルコードがあります。
爆発による画面の揺れを参照している場合、これをプロトタイプゲームに実装しようとしました(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
ます。
randomAngle += (150 + rand()%60)
+ /-問題を取り除くために行うのと同じです。
カメラの揺れを「感じる」ように正しくするには、動きの方向についてではなく、加速曲線についてより正確になります。
カメラの揺れはアニメーションの領域に入り込んでいるので、アクション/リアクションのすべてのルールが適用されます。ポイントからポイントへ直線的に移動している場合は、滑らかで均一に感じられ、衝撃のようなものではありません。
頭を前後に振ると、方向を変える中間点で最も速く動き、最初に減速してから新しい方向で起動する必要があるため、両側で減速することに気づくでしょう。
以下は、モーションに適用するさまざまなイージング関数のリストです。最初のモーションをEaseOutだけで少し急に感じさせ、残りをEaseInOutでヘッド/カメラの動きをシミュレートしたい場合があります。
wkerslakeは正しい、カメラの揺れはあなたが思うよりも複雑に見える。
揺れているカメラをエミュレートするときは、どのタイプのカメラ(オペレータ)を模倣したいかを考える必要があります。カメラの重量は慣性に影響します。重いカメラは、小さな「ランダムな」動きを滑らかにします。レール上または車内のカメラオペレーターは、ノイズを追加します。
PerlinノイズまたはSimplexノイズを使用することは間違いなくオプションです。それは、異なるノイズ比の間で適切なバランスを見つけることです。しかし、値間の補間を使用すると計算負荷が低くなり、同じくらい効果的であることがわかりました。
少し前に、私は多くのことを正しくしているように見えるMayaスクリプトを見つけました。あなたは見てみましょうことができています。
また、Gran Turismo(5)をご覧ください。ゲームのリプレイを見るときに、彼らのチームはさまざまな種類のリアルタイムのカメラシェーキングを行うという印象的な仕事をしました。
動的オブジェクト物理学(おそらく正しい言葉ではないが、私が言っていることのようなもの)があり、固定されていないオブジェクトが爆発によって「吹き飛ばされる」場合、カメラをそのようなオブジェクトとして影響させることができます。
唯一の違いは、カメラの回転/ピッチ/ヨー/ロールを変更することであり、位置は変更しません。
それ以外に、おそらく乱数シーケンスを生成し、それらを何らかの方法で回転に変換しますか?ハイトマップ、グレースケールのものが一例かもしれないと考えてください。それらはまったく違いはありませんが、ランダムです。