Crate bevy_wind_waker_shader

Source
Expand description

§Wind Waker Shader

crates.io docs.rs

A toon shader that looks like the one used for characters in The Legend of Zelda: The Wind Waker. The main code is taken from the ideas presented in this video.

§Showcase

Sphere:

Sphere

Scene throughout day:

https://github.com/janhohenheim/bevy_wind_waker_shader/assets/9047632/80aa9851-f425-4439-88f1-558918caa9f1

Scene in daylight:

Scene in daylight

Scene at night:

Scene at night

§Functionality

The shader has the following properties:

  • It is a toon shader with only two colors: the highlight and the shadow.
  • The edge between the two colors is not entirely hard but has an ever-so-slight gradient.
  • The color palette used is based on the time of day and the weather.
  • The model has a rim highlight on the edge to make it pop.

All colors and the texture mask are taken from The Legend of Zelda: The Wind Waker.

Differences to The Wind Waker:

  • This shader supports multiple light sources, like in Breath of the Wild. The original Wind Waker only supports a single light source.
  • The rim highlight also comes from Breath of the Wild.
  • The Wind Waker uses even more weather conditions, but I find most of them too specific to include in this shader.

Keep in mind this shader only replicates what is seen on the characters in The Wind Waker, not the environment!

§Example

use bevy::prelude::*;
use bevy_wind_waker_shader::prelude::*;

fn main() {
    App::new()
        .add_plugins((DefaultPlugins, WindWakerShaderPlugin::default()))
        .add_systems(Startup, spawn_character)
        .run();
}

fn spawn_character(mut commands: Commands, asset_server: Res<AssetServer>) {
    commands.spawn((
        SceneRoot(asset_server.load("models/Fox.glb")),
        WindWakerShaderBuilder::default()
            .time_of_day(TimeOfDay::Day)
            .weather(Weather::Sunny)
            .build(),

    ));
}

§Compatibility

bevybevy_wind_waker_shader
0.150.3
0.140.2
0.130.1

Modules§

prelude
Everything you need to get started with the Wind Waker shader. For the main feature, see WindWakerShaderBuilder.

Structs§

WindWakerShader
Build via the WindWakerShaderBuilder and insert into an entity to give it a shader that looks like the one used by characters in The Legend of Zelda: The Wind Waker.
WindWakerShaderBuilder
Builds a new WindWakerShader by setting the parameters to look like those in The Legend of Zelda: The Wind Waker. After insertion, the shader will be moved into the ExtendedMaterial of the entity. If the entity in question is a Scene, this is done for all the entities inside the scene.
WindWakerShaderPlugin
Plugin for the Wind Waker shader.

Enums§

TimeOfDay
The time of day used for the color palette in the WindWakerShaderBuilder. Note that this does not have to correspond to any actual time settings in your game. Rather, think of this as “mood categories” that you can use to set the color palette.
Weather
The weather used for the color palette in the WindWakerShaderBuilder. Note that this does not have to correspond to any actual weather settings in your game. Rather, think of this as “mood categories” that you can use to set the color palette.

Type Aliases§

ExtendedMaterial
The type of the material that will be inserted for you after you insert the WindWakerShader via the WindWakerShaderBuilder into an entity.