#bevy #graphics #gamedev #billboard #3dtext

bevy_mod_billboard

Billboard text and texture support for bevy

9 releases (4 breaking)

0.5.1 Dec 5, 2023
0.5.0 Dec 4, 2023
0.4.1 Aug 31, 2023
0.4.0 Jul 24, 2023
0.1.1 Mar 8, 2023

#198 in Rendering

Download history 7/week @ 2023-12-18 17/week @ 2024-01-01 18/week @ 2024-01-08 7/week @ 2024-01-22 10/week @ 2024-01-29 65/week @ 2024-02-05 93/week @ 2024-02-12 231/week @ 2024-02-19 273/week @ 2024-02-26 129/week @ 2024-03-04 25/week @ 2024-03-11 7/week @ 2024-03-18 10/week @ 2024-03-25 239/week @ 2024-04-01

287 downloads per month

MIT/Apache

43KB
969 lines

bevy_mod_billboard

Billboard text and texture support for bevy

showcase

Todo

Features

  • Styled text with multiple fonts.
  • Textures.
  • Depth culling enabling/disabling (enabled by default).
  • Y-axis locking (disabled by default).
  • Full rotation lock for stuff like 3D world-space text (@robftm)
  • HDR support (@robtfm)

Bevy Compatibility

Bevy Version Crate Version
0.12 0.5.1
0.11 0.4.1
0.10 0.3.0
0.10 0.2.1
0.9 0.1.1

Example

Setup:

use bevy_mod_billboard::prelude::*;

App::new()
    .add_plugins((DefaultPlugins, BillboardPlugin));

Text:

commands.spawn(BillboardTextBundle {
    transform: Transform::from_translation(Vec3::new(0., 2., 0.))
        .with_scale(Vec3::splat(0.0085)),
    text: Text::from_sections([
        TextSection {
            value: "IMPORTANT".to_string(),
            style: TextStyle {
                font_size: 60.0,
                font: fira_sans_regular_handle.clone(),
                color: Color::ORANGE,
            }
        },
        TextSection {
            value: " text".to_string(),
            style: TextStyle {
                font_size: 60.0,
                font: fira_sans_regular_handle.clone(),
                color: Color::WHITE,
            }
        }
    ]).with_alignment(TextAlignment::CENTER),
    ..default()
});

Texture:

commands.spawn(BillboardTextureBundle {
    transform: Transform::from_translation(Vec3::new(0., 5., 0.)),
    texture: BillboardTextureHandle(handle.clone()),
    mesh: BillboardMeshHandle(meshes.add(Quad::new(Vec2::new(4.0, 4.0)).into()).into()),
    ..default()
});

Full examples at examples.

Changelog

[0.5.1] - 2023-12-05

  • Fix billboard propagation not working.

[0.5.0] - 2023-12-04

  • Upgrade to Bevy 0.12 (@robftm).
  • Remove texture array implementation.
  • Use 1:N game world -> render world mapping.
  • Remove asset type BillboardTexture.
  • Add BillboardTextureHandle wrapper.
  • Reduce memory usage.
  • Increase performance for most used text case.
  • Add stress_test example (@alice-i-cecile).
  • Add rotating camera to most of the examples to showcase better.

[0.4.1] - 2023-08-31

  • Fix missing texture binding flag.

[0.4.0] - 2023-07-24

  • Support HDR (@robftm).
  • Add rotation locking (@robftm).
  • Upgrade to Bevy 0.11 (@robftm).

Full changelog at CHANGELOG.md.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~46–86MB
~1.5M SLoC