Cinemachine Impulse Source
Impulse Source は、シーン空間内のある位置から振動信号を発するコンポーネントです。ゲームのイベントを原因として、Impulse Source にイベントの発生位置から信号を送信させることができます。イベントが Impulse を トリガー し、ソースがインパルス (衝突、刺激などの信号) を 生成 します。Impulse Listener 拡張機能を持つバーチャルカメラは、振動によってインパルスに 反応 します。
下の画像では、キャラクターの足が Impulse Source になっています。この足が床と衝突 (A) すると、インパルスが生成されます。カメラは Impulse Listener で、インパルスに反応して振動 (B) し、この結果ゲームビューの映像が振動 (C) します。
Cinemachine には、2 種類の Impulse Source コンポーネントが含まれています。
Cinemachine Collision Impulse Source は、衝突やトリガーゾーンに反応して Impulse を生成します。
Cinemachine Impulse Source は、衝突以外のイベントに反応して Impulse を生成します。
シーンにはいくつでも Impulse Source を含めることができます。例えば、シーン内の以下のような場所に Impulse Source コンポーネントを使用することが可能です。
巨人の足のそれぞれに使用し、巨人が歩行した時に地面が振動するようにする。
ミサイルに使用し、ターゲットに当たると爆発するようにする。
ゼラチンでできた惑星の表面に使用し、何かが触れた時に震えるようにする。
デフォルトでは、Impulse Source は範囲内にある全ての Impulse Listener に反応するようになっていますが、チャンネルのフィルター を適用することで、Source を一部の Listener のみに反応させることも可能です。
重要な Impulse Source プロパティー
振動の Raw 信号は基本的なカメラの振動の "形" を定義しますが、Impulse Source にはその他にもいくつか、生成するインパルスを定義する重要なプロパティーがあります。
これらのプロパティーの一部を詳しく理解すれば、より現実的なカメラの振動の設定が行いやすくなります。
以下は重要なプロパティーに関する詳細な説明です。
Amplitude: 振動の強さの制御です。
Orientation と Direction: Impulse は、振動をその発生源である衝撃の方向と一貫させるために、信号を変換することができます。
Time Envelope: 信号の Attack (立ち上がり) 、Sustain (減衰後の保持) 、Dacay (減衰) を制御し、信号が適切な強度にフェードイン、フェードアウトし、有限の継続時間を持つようにします。
Spatial Range: 信号がシーン内で完全にフェードアウトするまでの伝達距離を制御します。
Impulse Source の全プロパティーの説明や、Impulse Source のシーンへの追加方法の説明は、ドキュメントの Impulse Source コンポーネントに関するセクション および Collision Impulse Source コンポーネントに関するセクションを参照してください。
Amplitude
インパルスの Raw 信号の Amplitude は、個々の衝撃の振動の強さを制御します。Impulse Source の Amplitude の調整方法は 2 つあります。
Amplitude Gain プロパティーは、インパルスの Raw の信号を増幅あるいは減衰させます。このプロパティーは常に全ての衝撃に適用されます。Impulse Source の振動の強さを上げ下げするグローバルの "ボリューム" 設定であると考えてください。
信号の生成時に Velocity ベクトルの大きさを変更すると信号の振幅もスケールされますが、この効果はグローバルではなく個々の衝撃ごとになります。個々の Impulse イベントの速度を調整することで、軽い衝撃は小さな振動を発生させ、大きな衝撃は大きな振動を発生させるように設定することができます。
Cinemachine Impulse Source コンポーネントに関しては、速度ベクトルをスクリプト経由で設定する必要があります。信号の振幅はこのベクトルの大きさによってスケールされます。
Cinemachine Collision Impulse Source コンポーネントは、How To Generate The Impulse のセクションに紹介されている 3 つのプロパティーによって定義される規則に基づいて、速度ベクトルを自動的に計算します。
これらのグローバルな調整と衝撃ごとの調整が乗算されて、各衝撃の実際の振幅が計算されます。
Orientation と Direction
現実味のある振動を作り出すには、インパルス信号は、衝撃の軸の方向において最も強い必要があり、その振幅 (あるいは強さ) は衝撃の力に比例している必要があります。例えば、ハンマーで壁を叩いた場合、壁はまずハンマーの軌道の軸にそって振動します。ハンマーのインパルス信号が現実味を持つためには、この軸にそった振動が最も大きい必要があります。
下の画像では、振動の主要な軸 (A) が、壁に衝突した時点でのハンマーの移動方向 (B) と一致しています。
Impulse は、可能性のある全ての衝撃の方向と強度のそれぞれに個別の信号定義を必要とするのではなく、"ローカル空間" という概念を使用して Raw 信号を定義します。Raw 信号をそのローカル空間で回転、スケールして、実際の衝撃と一致する "最終的な" 信号を作り出すことができます。
Impulse は、衝撃の主要な方向を "ダウン (下向き)" と想定するので、基本的に、信号は Y 軸方向により大きく振動します (6D Shake のノイズのプリセットはこのような設定になっています)。その上で、ローカル空間の回転とスケーリングによって、各衝撃の発生ごとに正確な振動を作り出すことができます。
角度と方向の調整
Cinemachine Impulse Source および Cinemachine Collision Impulse Source コンポーネントには、Raw 信号の方向を制御するプロパティーが含まれています。これらのプロパティーを使用して現実世界の振動を模倣します。
Cinemachine Impulse Source コンポーネントの場合、GenerateImpulse () メソッドが速度ベクトルをパラメーターとして取得します。このベクトルは衝撃の方向と強さを定義します。Impulse システムはこれを使用して、その回転とスケーリングを適切に行いながら、Raw 信号の定義に基づいて最終的な信号を計算します。
Cinemachine Collision Impulse Source コンポーネントの場合、速度ベクトルは、関連のゲームオブジェクトの方向と質量に基づいて自動的に生成されます。
これが行われる方法の制御には、How To Generate The Impulse のセクションで紹介されているプロパティーを Inspector ウィンドウで使用してください。Use Impact Direction プロパティーでは、衝撃の方向に合わせて信号を回転させるかどうかを設定します。
Direction Mode
Spatial Range > Direction Mode プロパティーを使用すると、信号の角度に繊細な調整を加えることができます。これを Rotate Towards Source に設定すると、インパルス信号がさらに回転して振動がより正確に Impulse Source の方向を向くようになります。
この効果は、放射状に対称的な振動の場合は顕著ではありませんが、方向を強調する振動 (例えば 6D Shake など) の場合は、振動の発生した方向を潜在的に感じさせるような効果をもたらします。これは、衝撃を複数の場所で発生させる場合で、その全てを同じ印象にしたくない時に非常に有用です。
Direction Mode のデフォルト設定である Fixed ではこの効果が無効になっています。
Time Envelope
現実世界の衝撃による振動は、最大の強度に達するまで徐々に強まり、その後振動が止まるまで弱まっていきます。このサイクルに掛かる時間の長さは、衝撃の強さと、関連するゲームオブジェクトの特性によって決まります。
例えば、コンクリートの壁をハンマーで叩くと、短くて鋭い衝撃が発生します。振動はほぼ瞬時に最大強度に達し、ほぼ瞬時に停止します。一方、薄い金属の大きなシートを叩いた場合、持続的な振動が発生します。これは瞬時に始まり、しばらくの間最大強度に留まり、徐々に減衰します。
Impulse Source の Time Envelope (時間エンベロープ) プロパティーを使用すると、シーン内の衝撃がカメラを振動させる際に、このサイクルを制御することができます。Time Envelope には以下の 3 つのプロパティーが含まれます。
- Attack: インパルス信号の最大強度への遷移の制御です。
- Sustain Time: 信号の最大強度の状態の持続時間の長さの設定です。
- Decay: 信号が最大強度からゼロになるまでの遷移の制御です。
Attack と Decay は両方とも、遷移に掛かる時間の長さを指定する値と、その方法 (例えば、徐々に発生するか瞬時に発生するかなど) を定義する曲線から構成されます。曲線はオプション設定で、これを Inspector ウィンドウ内で空に設定すると、Impulse はデフォルト曲線を使用します。この曲線は、ほとんどの用途に適しています。Sustain Time は継続時間の値のみです。
上記のプロパティーが組み合わさって、衝撃による振動の継続時間と、そのフェードイン、フェードアウトの仕方が制御されます。ただし、これには衝撃の強さの制御は含まれません。強さの制御を行うには、Scale with Impact プロパティーを有効にしてください。これが有効になっている場合には、Time Envelope が衝撃の強さに応じてスケールされます。衝撃が強いほどエンベロープ (包絡線) が長くなり、弱いほど短くなります。これはエンベロープの均衡には影響しません。
Spatial Range
Impulse Source の Spatial Range プロパティーは、Impulse Source が影響を及ぼす領域をシーン内に定義します。この領域内にある Impulse Listener は ( フィルタリングで除外 されていない限り ) Impulse Source に反応し、領域外にある Listener は反応しません。
この領域は Impact Radius と Dissipation Distance の 2 つの部分から構成されます。Impulse Source が Impulse を生成すると、振動信号は、Impact Radius の限界に達するまで最大強度を維持します。その後、強度は Dissipation Distance にわたってゼロまでフェードアウトします。これら 2 つのプロパティーの組み合わせが信号の範囲全体を定義します。
下の画像では、振動信号は、それが衝撃点から発信された時点から Impact Radius (A) に達するまで最大強度のまま持続し、その後、Dissipation Distance (B) にわたってフェードアウトします。
Dissipation Mode プロパティーは、信号が Dissipation Distance にわたって どのように フェードアウトするかを制御します。
Exponential Decay は、瞬時に開始され、Dissipation Distance の限界に近付くにつれて減速するフェードアウトを作り出します。
Soft Decay は、ゆっくりと開始された後に加速し、Dissipation Distance の限界に近付くと減速するフェードアウトを作り出します。
Linear Decay は、Dissipation Distance 全体に亘る均一なフェードアウトを作り出します。