Isometric camera forbevy_cam
An isometric camera plugin for Bevy 0.18 — a two-stage render-to-texture pipeline keeps pixel art crisp at any window size, with pixel-grid follow and optional multiplicative zoom.
Crisp pixels at any size
A scene camera renders the 3D world to a low-resolution texture at a fixed pixel_density, then a display camera upscales it with nearest-neighbor sampling — no full 3D material pass.
- Pixel-snapped follow — tracks CameraFollowTarget on all three camera-space axes to kill jitter.
- Optional zoom — multiplicative scroll-wheel zoom behind the zoom feature flag.
What it gives you
Features
Two-stage pixel pipeline
A scene camera renders the 3D world to a low-resolution texture at pixel_density pixels per world unit (nearest-neighbor), and a display camera upscales it to the window via a fullscreen sprite, avoiding a full 3D material pass.
Pixel-snapped follow
The scene camera tracks entities marked CameraFollowTarget, snapping on all three camera-space axes to kill sub-pixel jitter.
Multiplicative zoom
Optional zoom feature — uniform-feeling zoom that scales by a fixed percentage per notch and interpolates smoothly.
Display-camera hooks
The display camera carries a DisplayCamera marker so games can attach post-processing after startup.
Get started
Usage
use bevy_cam::{IsometricCameraPlugin, CameraConfig, CameraFollowTarget};
app.add_plugins(IsometricCameraPlugin::new(CameraConfig {
offset: Vec3::new(15.0, 20.0, 15.0),
viewport_height: 20.0,
pixel_density: 32,
..default()
}));
// Attach CameraFollowTarget to whatever entity the camera should track:
commands.spawn((Transform::default(), CameraFollowTarget));Questions
Frequently asked
What does the bevy_cam crate do?
It provides an isometric camera plugin for Bevy 0.18 that renders the 3D scene to a low-resolution texture at a fixed pixel density, then upscales it with nearest-neighbor sampling for crisp pixel-art output.
How does the camera follow a target?
Attach the CameraFollowTarget component to any entity. The scene camera tracks it and snaps to the pixel grid on all three camera-space axes to eliminate sub-pixel jitter.
Is scroll-wheel zoom supported?
Yes, behind the optional "zoom" feature flag. Zoom is multiplicative — each notch scales by a fixed percentage and interpolates smoothly toward the target — and is off by default to avoid wasted system dispatch on fixed-camera games.