18 unstable releases (7 breaking)
0.8.1 | Oct 27, 2024 |
---|---|
0.7.6 | Jun 2, 2024 |
0.7.2 | Mar 17, 2024 |
0.5.1 | Aug 11, 2023 |
0.5.0 | Jul 18, 2023 |
#137 in Game dev
140 downloads per month
3.5MB
860 lines
Fast Tilemap for Bevy
Lightning fast tilemaps for bevy
.
Features
- Very high rendering performance (hundreds of fps, largely independent of map size).
- Multiple layers can be achieved by multiple map instances or custom shader logic
- Rectangular and axonometric (eg isometric) tile maps.
- Coordinate conversion for eg computing map position of the mouse cursor.
- Tiles can overlap either by "dominance" rule or by perspective. Perspective mode allows an orthographic camera like 3d look, that is, tiles don't need to be flat but can be isometric "objects" (see examples).
- Optional custom mesh for which the map serves as a texture.
- Color gradient for tinting the whole map.
- Custom shader code that can apply per-tile effects such as tinting or animation.
- Tiles may use textures bigger than a single tile. (see screenshot below).
- Arbitrary boundary shapes through custom shader code.
- Two kinds of "animation" are supported, you can
- Update the tile indices regularly from a system (see Animation Example)
- Inject some custom shader code that can animate a tile in whatever way you can express in WGSL.
Screenshots
Isometric perspective rendering.
Meshes don't have to be rectangles.
Tiles can use bigger textures and (through custom shader code) arbitrary boundary shapes.
Checkout screenshots/ for more.
How it works
The whole map is rendered as a single quad and a custom shader cares for rendering the correct tiles at the correct position.
This works by using a storage buffer with tile indices and a tilemap atlas with the tiles. With some clever sampling, tiles can overlap with correct perspective so a "tile" can actually be any isometric object. Bevy-fast-tilemap store the storage buffer in a special material which you can access and change (see examples/). The tilemap atlas should be provided by you (see assets/ for atlas examples).
As of this writing, this should be (much) faster than most other bevy tilemap implementations out there.
Limitations
- Only tested on Windows, no WASM support
- No support for rotating or scaling the entity holding the map (it will not look like you'd expect). (You can of course still zoom/rotate the camera to achieve any such effect)
- No support for using maps in a 3d setting.
See Troubleshooting for common problems and their mitigations.
Related work
If you dont require all of bevy_fast_tilemap
s performance and are looking for an approach that
supports some more tile shapes and allows to treat each tile as a separate entity, take a look at
bevy_ecs_tilemap which (among others) inspired
this work.
Examples
Check out the examples/ folder to get an overview. You can run the examples like this:
cargo run --example bench
cargo run --example animation
cargo run --example iso_perspective
cargo run --example custom_shader_code
cargo run --example patterns
cargo run --example updates
...
Bevy Compatibility
bevy | bevy_fast_tilemap |
---|---|
0.10 | 0.1.0 - 0.4.0 |
0.11 | 0.5.0 |
0.12 | 0.6.0 |
0.13 | 0.7.0 - 0.7.6 |
0.14 | 0.8.0 |
0.14 | 0.8.1 |
Dependencies
~25MB
~472K SLoC