1 unstable release
0.1.0 | Jun 2, 2022 |
---|
#1915 in Game dev
200KB
537 lines
Pixel-Perfect Outline Shader for Bevy
A easy-use pixel-perfect outline shader for bevy using vertex extrusion method. Inspired by this wonderful tutorial.
Features
- Pixel perfect: the width of drawn outline is in pixel unit and the same as what we want.
- Eliminate foreshortening: the width of outline is uniform from near view to far view.
- Customizability. Width and color can be determined by user.
Usage
First, add bevy_outline
as a dependency into your Cargo.toml
:
[dependencies]
bevy_outline = "0.1.0"
Second, add OutlinePlugin
into your app add set Msaa
to a reasonable value:
App::new()
.insert_resource(Msaa { samples: 4})
... ...
.add_plugin(OutlinePlugin)
... ...
Third, use OutlineMaterial
as a mesh material:
fn setup(
...
mut outlines: ResMut<Assets<OutlineMaterial>>,
...
) {
...
commands
.spawn_bundle(PbrBundle {
mesh: meshes.add(Mesh::from(shape::Cube { ..default() })),
material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()),
transform: Transform::from_translation(translation),
..default()
})
.insert(outlines.add(OutlineMaterial {
width: 5.,
color: Color::rgba(0.2, 0.3, 0.4, 1.0),
}));
...
}
Note that the unit of width
attribute of OutlineMaterial
is pixel.
Demos
See Example
Problems
-
the width of outliner seems not to be uniform. - outline of built-in torus seems weird (algorithm is wrong and will be fixed in 0.8)
Bevy Version Support
I intend to track the main
branch of Bevy. PRs supporting this are welcome!
bevy | bevy_outline |
---|---|
0.7 | 0.1 |
License
This project is licensed under the MIT License.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in bevy_outline by you, shall be licensed as MIT, without any additional terms or conditions.
Dependencies
~36–50MB
~873K SLoC