# 4. Impulse, Noise, and Extensions
Part of [[Cinemachine 3]]. Prev: [[3.Follow LookAt Framing and Orbital]]. Next: [[5.Blends Custom Blends Cut vs Ease]].
**Docs:** [Impulse Sources overview](https://docs.unity3d.com/Packages/
[email protected]/manual/CinemachineImpulseSourceOverview.html) · [Impulse Listener](https://docs.unity3d.com/Packages/
[email protected]/manual/CinemachineImpulseListener.html) · [Basic Multi Channel Perlin](https://docs.unity3d.com/Packages/
[email protected]/manual/CinemachineBasicMultiChannelPerlin.html) · [Apply noise](https://docs.unity3d.com/Packages/
[email protected]/manual/setup-apply-noise.html)
## 4.1 Continuous noise vs Impulse
| Tool | Feel | When |
|---|---|---|
| **Basic Multi Channel Perlin** | Ongoing handheld / idle sway | Always-on subtle life |
| **Impulse Source → Listener** | Sudden hit that decays | Explosions, landings, footsteps, hits |
Stack carefully. For combat cameras, keep Perlin tiny and let Impulse carry impacts.
## 4.2 Add Perlin noise
1. Select the `CinemachineCamera`.
2. **Noise** shortcut → **Basic Multi Channel Perlin** (adds `CinemachineBasicMultiChannelPerlin`).
3. Assign a **Noise Profile** (package samples include profiles; or create your own).
4. Tune **Amplitude Gain** and **Frequency Gain**.
```csharp
using UnityEngine;
using Unity.Cinemachine;
/// <summary>
/// Scale handheld noise at runtime (e.g. sprint vs idle).
/// NOT compiled in Unity.
/// </summary>
public sealed class CmNoiseScaler : MonoBehaviour
{
[SerializeField] CinemachineBasicMultiChannelPerlin noise;
[SerializeField] float idleAmplitude = 0.3f;
[SerializeField] float sprintAmplitude = 0.8f;
public void SetSprinting(bool sprinting)
{
if (noise == null) return;
noise.AmplitudeGain = sprinting ? sprintAmplitude : idleAmplitude;
}
}
```
## 4.3 Impulse Sources
Two source types (docs):
- **`CinemachineImpulseSource`** — fire from code / events (non-collision).
- **`CinemachineCollisionImpulseSource`** — reacts to collisions / triggers (e.g. giant footsteps).
Listener: add **CinemachineImpulseListener** extension on cameras that should shake. Channel filtering lets Sources affect some Listeners and not others.
```csharp
using UnityEngine;
using Unity.Cinemachine;
/// <summary>
/// Fire a raw impulse at an impact point (explosion, heavy land).
/// NOT compiled in Unity — confirm GenerateImpulse overloads in 3.1.x API.
/// </summary>
public sealed class ExplosionImpulse : MonoBehaviour
{
[SerializeField] CinemachineImpulseSource impulse;
[SerializeField] float defaultVelocity = 1f;
public void Boom()
{
if (impulse == null) return;
// Common CM3 pattern:
impulse.GenerateImpulse(defaultVelocity);
// Or direction-aware:
// impulse.GenerateImpulse(transform.forward * defaultVelocity);
}
public void BoomAt(Vector3 worldPos)
{
if (impulse == null) return;
impulse.GenerateImpulseAtPositionWithVelocity(worldPos, Vector3.down * defaultVelocity);
}
}
```
Wire `Boom()` from animation events ([[Animation Advanced]] part 6), particle collide callbacks ([[Particle Systems and Layered Effects]]), or combat hit logic.
## 4.4 Deoccluder (wall avoidance)
Add **CinemachineDeoccluder** (CM2 Collider). Casts toward the camera to pull it in front of geometry. Tune:
- Collide Against layers (exclude player / triggers).
- Minimum distance from target / wall soft zones.
- Damping so it does not snap.
Combine with Third Person Follow for classic cover-friendly third-person.
## 4.5 Confiners
- **CinemachineConfiner2D** — polygon / composite collider bounds (side-scroll rooms).
- **CinemachineConfiner3D** — volume bounds.
Assign the bounding shape; damping keeps soft edges. Useful for authored rooms in [[SceneManagement in Unity 6]] additive loads — rebind confiner references when streaming.
## 4.6 Group framing
For multi-character shots: **CinemachineGroupFraming** extension with **Rotation Composer**, and a target group object. Prefer this over manually averaging transforms unless you need custom logic.
## Unverified
- Exact `GenerateImpulse*` overload names / signatures across 3.1 patches — check API page in your installed package.
- Noise Profile asset creation UI labels.