pixelate_mesh

Crates.iopixelate_mesh
lib.rspixelate_mesh
version0.4.0
sourcesrc
created_at2023-03-13 16:27:01.407017
updated_at2024-07-04 17:36:57.43169
descriptionApply a pixelation effect to any Bevy mesh or scene without post-processing.
homepage
repositoryhttps://github.com/janhohenheim/pixelate_mesh
max_upload_size
id809031
size152,103
Jan Hohenheim (janhohenheim)

documentation

README

Pixelate Mesh

crates.io docs.rs

Apply a pixelation effect to any Bevy mesh or scene without post-processing.

Pixelated foxes

Usage

  • Add the PixelateMeshPlugin, where you specify a component that tracks the main camera.
  • Add this tracking component to your camera.
  • Add the Pixelate component to any entity that you want to pixelate.

The tracking component is needed because the plugin draws the textures on 2D canvases that need to rotate to always face the main camera.

Compatibility

bevy pixelate_mesh
0.14 0.4
0.13 0.3
0.12 0.2
0.10 0.1

Examples

The following is an annotated minimal example. More can be found in the examples folder.

use bevy::prelude::*;
use pixelate_mesh::prelude::*;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        // Add the plugin
        .add_plugin(PixelateMeshPlugin::<MainCamera>::default())
        .add_systems(Startupsetup)
        .run();
}

// Create a component for the main camera
#[derive(Component)]
struct MainCamera;

fn setup(
    mut commands: Commands,
    mut meshes: ResMut<Assets<Mesh>>,
    mut materials: ResMut<Assets<StandardMaterial>>,
) {
    commands.spawn((
        // This cube will render at 64x64 pixels
        Pixelate::splat(64),
        PbrBundle {
            mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
            material: materials.add(Color::WHITE.into()),
            ..default()
        },
    ));

    commands.spawn((
        // Add the tracking component to the camera
        MainCamera,
        Camera3dBundle {
            transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y),
            ..default()
        },
    ));
}

Inspiration

The plugin tries to emulate the effect as seen in Prodeus:
Source

Shortcomings

  • The current setup does not work with multiple main cameras. Feel free to comment on the issue if you have an idea for how to fix this!
  • The plugin deactivates MSAA globally.
Commit count: 66

cargo fmt