# Bevy Toon Shader [![Crates.io](https://img.shields.io/crates/v/bevy_toon_shader)](https://crates.io/crates/bevy_toon_shader) [![MIT/Apache 2.0](https://img.shields.io/badge/license-MIT%2FApache-blue.svg)](https://github.com/tbillington/bevy_toon_shader#license) A [toon shader](https://en.wikipedia.org/wiki/Cel_shading) for the [Bevy](https://github.com/bevyengine/bevy/) game engine. bevy_toon_shader **Features** - "Sun" color & direction - Specular highlight - Light banding - Shadow casting - Albedo map (base color texture) **Not supported (yet)** - Dynamic color banding amount - Shadow receiving - Rim lighting ## Installation ```sh cargo add bevy_toon_shader ``` ```rust use bevy::prelude::*; use bevy_toon_shader::{ToonShaderMainCamera, ToonShaderMaterial, ToonShaderPlugin, ToonShaderSun}; fn main() { App::new() .add_plugins(DefaultPlugins) .add_plugin(ToonShaderPlugin) .add_systems(Startup, setup) .run(); } fn setup( mut commands: Commands, mut meshes: ResMut>, mut toon_materials: ResMut>, ) { // Camera commands.spawn(( Camera3dBundle { /* ... */ }, ToonShaderMainCamera, )); // Sun commands.spawn(( DirectionalLightBundle { /* ... */ }, ToonShaderSun, )); // Ambient light commands.insert_resource(AmbientLight { color: Color::GRAY * 0.2, ..default() }); let material = toon_materials.add(ToonShaderMaterial::default()); // 3D object commands.spawn(MaterialMeshBundle { mesh: meshes.add(Mesh::try_from(shape::Torus::default()).unwrap()), transform: Transform::from_xyz(0., 2., 0.), material: toon_material, ..default() }); } ``` ## Running the example ```sh git clone https://github.com/tbillington/bevy_toon_shader.git cd bevy_toon_shader cargo run --example scene ``` ## Bevy Support Table | bevy | bevy_toon_shader | | -- | -- | | 0.12 | 0.3 | | 0.11 | 0.2 | | 0.10 | 0.1 | ## Credit Code initially adapted from this [excellent Unity tutorial](https://roystan.net/articles/toon-shader/) by Roystan. ## License Except where noted, all code in this repository is dual-licensed under either: * MIT License ([LICENSE-MIT](LICENSE-MIT) or [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT)) * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)) at your option. This means you can select the license you prefer! This dual-licensing approach is the de-facto standard in the Rust ecosystem and there are [very good reasons](https://github.com/bevyengine/bevy/issues/2373) to include both. ### Your contributions 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.