bevyengine / bevyengine/bevy

Tracking issue: Amazing Gizmos

Open
#9,400 21 comments 49 reactions 0 assignees View on GitHub
A-Gizmos C-Feature C-Tracking-Issue
Dominant language
Rust
Stars
48.2k
Forks
4.8k
Avg merge
3d 16h
Merged PRs (30d)
171

Description

This issue tracks the progress on [Gizmo] features

### Contributing

Want to check off one of those checkboxes? Nothing easier!

1. [Open a feature request][open-feature-request] you can copy/paste the description if you feel lazy!
2. Implement the feature and open a PR!

All related issues will be listed in this tracking issue.

#### The (IMO) easy ones

* Linecaps
* more gizmo shapes
* light source gizmos

#### All features

Not sorted in any specific order:

* [X] **Gizmos MVP** #6529 Make it possible to draw lines on screen, for them to be immediately despawned next frame
* [X] **AABB gizmos** #8468 Draw entity bounding boxes
* [x] **Light source gizmos**: Gizmos that show where light sources are placed, potentially their intensity, color & direction (#12228)
* [ ] **UI layout gizmos**: show outline of CSS flexbox and grid UI elements. #11237
* [x] **More than one gizmo kind**: Gizmo line width/depth bias/render layer should be configurable at call site, not just in a resource (system level: #10342)
* [x] **multiple line width**
* [x] **multiple depth bias**
* [x] **multiple render layers**
* [ ] **Retained gizmos**: We want to give shape to invisible things such as physics collider. It would make more sense to have a retained API for this. Would supersede wireframe rendering #9178
* [ ] **`FixedUpdate` gizmos**: Currently gizmos do not work if used in the `FixedUpdate` schedule. (#10973, #9153)
* [ ] **More gizmo shapes** (#10571)
* [x] **arrows** (#10550)
* [ ] Double ended arrows (#11890)
* [X] **lines**/linestrip/ray
* [X] **cuboids**/rectangles
* [X] **spheres**/circles
* [X] ellipses
* [X] Regular polygons
* [X] **arcs**/ semi-circles
* [x] **grids** (#11988)
* [ ] 3d Grid
* [ ] **splines**
* [ ] **camera**
* [ ] **3D meshes**/2D meshes/wireframes (#10621)
* [x] **axes** (#12211)
* [x] **light bulb** (#12228)
* [ ] **rounded cuboid** (#11948)
* [x] **Cylinder**/arbitrary 3d shape extrusion
* [X] **frustum** (conical frustrum with 4 segments)
* [X] **pyramid**/cone (Cone with 4/N segments)
* [x] **capsule**
* [X] **triangle**
* [x] tetrahedron
* [X] torus/donuts
* [ ] Rounded arbitrary shapes
* [x] **Gizmo registry**: Allows plugin to register categories of gizmos and defer to user ability to toggle or control properties of gizmos within a category. See #9187 and #10342
* [ ] **System-level gizmo registration**: Automate the gizmo registration by inheriting a system-level registry assignation
* [ ] **Actually-immediate-mode API**: no `SystemParam` required, just a macro/function call to draw gizmos, nothing more. No more need to modify the system signature to add gizmos, or even pass around the gizmo struct, in the style of )
* [ ] **dotted lines**: Gizmo with a dotted line effect.
* [ ] **Line caps**: Gizmo squares have ugly corners because the line caps are not filled. See [The tutorial that led to bevy_polyline](https://wwwtyro.net/2019/11/18/instanced-lines.html)
* [ ] **Square caps**: Extend the gizmo lines by the line width
* [ ] **Round caps**: Add a semi-circle of line-width radius to the end of lines
* [x] **Line Joints**: Smooth out space between subsequent lines (#12252)
* [x] **Round joints**
* [x] **flat joints**
* [x] **spiky joints**
* [x] **Text gizmos**: Draw text on screen without the `bevy_text` sanctimonious rituals. Just a `gizmo_print!("foobar")` and it would show on screen.
* [ ] **multiline text**: Should support line returns
* [ ] **user-provided font**
* [x] **Text in 2d space**: Gizmo should let print text on screen on arbitrary positions in 2D games.
* [ ] **log-style text**: Users would not provide a position, but it would show up on screen as event in a way similar to a console message in Garry's Mod or Minecraft. Note: This is already implemented as a 3rd party plugin in
* [ ] **Text in 3d space**: Gizmo should let print text in 3D games, may chose to keep the same size with distance or apply perspective.
* [ ] **Oriented text**: Text that always faces a specific direction.
* [ ] **Non-overlapping text**: There could be a toggle that allows text placed on screen through 2D or 3D API to not overlap, even if they should, given their provided position.
* [ ] **Filled shape gizmos**: We want to be able to draw filled shapes, this might be useful for special signaling or highlighting areas. See https://github.com/james-j-obrien/bevy_vector_shapes
* [ ] **semitransparent filled shape gizmos**: Semi-transparent this becomes apparently much more useful.
* [ ] **Reactive gizmos**: ability to associate Gizmos to game state; accept input from gizmos and modify game state from gizmos. It probably would look like an immediate mode UI, but 3D #9498

[open-feature-request]: https://github.com/bevyengine/bevy/issues/new?assignees=&labels=C-Enhancement%2C+S-Needs-Triage&template=feature_request.md&title=
[Gizmo]: https://docs.rs/bevy_gizmos/0.11.0/bevy_gizmos/

Contributor guide

Open the contributing guide

Research direction

This is a broad tracking issue rather than a self-contained task. Start by choosing one unchecked gizmo item and reading its linked issue, then follow that issue's entry points and tests; completion means implementing the scoped feature, opening a pull request, and checking off the corresponding item.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
computer-graphics, game-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.