Skip to content
crates · rust · bevy

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.
RustBevy crate
Bevy 0.18Engine
2-stagePipeline
MITLicense

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

main.rs
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.