#bevy #shader #gamedev

bevy_old_tv_shader

An "old TV" effect based on the Bevy post-processing example

2 unstable releases

0.4.0 Dec 12, 2025
0.3.0 Dec 12, 2025

#1683 in Game dev

MIT license

45KB
275 lines

bevy_old_tv_shader

An "old TV" effect based on the Bevy post-processing example.

Movie of the old TV shader effect in action on 'cube' example.

Usage

To use this effect, add the crate to your project.

Add the crate

cargo add --git https://github.com/Defernus/bevy_old_tv_shader.git

Add the plugin

# use bevy::prelude::*;
# use bevy_old_tv_shader::prelude::*;
fn main() {
    App::new()
        .add_plugins((DefaultPlugins, OldTvPlugin))
        .update();
}

Add the settings to the camera

This effect will only appear on cameras with an OldTvSettings component.

# use bevy::prelude::*;
# use bevy_old_tv_shader::prelude::*;
fn setup_camera(mut commands: Commands) {
    // camera
    commands.spawn((
        Camera3d::default(),
        OldTvSettings {
            screen_shape_factor: 0.2,
            rows: 64.0,
            brightness: 3.0,
            edges_transition_size: 0.025,
            channels_mask_min: 0.1,
        },
    ));
}

Features

"ui"

Applies the effect to the UI and text as well.

Examples

cube, 3d camera

The "cube" example shows a rotating cube with the effect (shown above).

cargo run --example cube

shapes, 2d camera

The "shapes" example shows 2d shapes.

cargo run --example shapes

shapes

text

The "text" example shows UI text with or without the effect.

No effect on UI

cargo run --example text

Effect on UI

cargo run  --features ui --example text

text

The "text" example also accepts an argument of "3d-camera". This was mainly used to spotcheck that the effect worked with a 3d camera.

Effect on UI with 3d camera

cargo run  --features ui --example text 3d-camera

Compatibility

bevy_old_tv_shader bevy
0.4.0 0.17
0.3.0 0.16
0.2.0 0.15
0.1.0 0.8

License

This crate is licensed under the MIT License.

Dependencies

~56–97MB
~1.5M SLoC