---
name: weapon-trail
description: Create a ribbon trail effect that follows a weapon's movement.
---
# Weapon Trail
Create a ribbon trail effect that follows a weapon's movement.
## Technique
Build a custom `BufferGeometry` that stores a history of positions in a ring buffer. Each frame, record the current world positions of trail points and update the geometry vertices to create a ribbon connecting all historical positions.
## Key Concepts
- Define trail points (e.g., base and tip of weapon)
- Use a ring buffer to store position history efficiently
- Create geometry with proper UVs for texture mapping (gradient fade)
- Update vertex positions each frame with `positions.needsUpdate = true`
- Use `localToWorld()` to get world positions from the target object
- Support enabling/disabling with fade out animation
## Usage
```tsx
const trailPoints = [new Vector3(0, 0, 0), new Vector3(0, 1.5, 0)]
{/* weapon mesh */}
```
## Geometry Structure
- Segments: historical snapshots (oldest to newest)
- Points per segment: trail point positions at that time
- UVs: u = position along trail (0-1), v = age (0 = newest, 1 = oldest)
- Alpha map texture for gradient fade effect
---
This skill is part of [verekia](https://x.com/verekia)'s [**r3f-gamedev**](https://github.com/verekia/r3f-gamedev).