Screen space light maps are one of the simplest lighting techniques for 2D. Despite being simple, it can work really well for certain types of 2D games.
This library provides an implementation of this technique for the Bevy engine. The library is made as a Bevy plugin.
You can find more details about the technique here: https://slembcke.github.io/2D-Lighting-Overview
Screenshot from the example code:
The plugin uses three cameras:
- One for rendering normal sprites.
- One for rendering the light map.
- One for the final image.
The first two cameras render to a texture. These two textures are then multiply-blended and used as the material for a rectangle that fits the screen space. This rectangle is rendered to the screen by the third camera.
To use the plugin, you just need to:
- Attach all your normal sprites to the CAMERA_LAYER_SPRITE render layer.
- Attach your light sprites to the CAMERA_LAYER_LIGHT render layer.
Note that the clear color set on the light camera determines the level
of ambient light in your scene.
The plugin provides a resource LightmapPluginSettings
with which you can
change the ambient light setting, the clear color on the sprite camera
as well as the bloom intensity.
See the example code in examples/moving_truck.rs
for details.
Note that in the example you can zoom in-out using the mouse wheel.
To run the example use: cargo run --example moving_truck
Bevy | bevy_2d_screen_space_lightmaps |
---|---|
0.14.x | 0.14.0 |
0.13.x | 0.13.1 |
0.13.0 | 0.13.0 |
Some of the code was borrowed from https://github.com/zaycev/bevy-magic-light-2d
The sample uses some assets made by beeler, Gif and Icons8.