bevyengine / bevyengine/bevy

Propagation requires full hierarchy traversal

Open
#7,840 0 comments 3 reactions 0 assignees View on GitHub
A-Physics A-Rendering A-Transform C-Feature C-Performance
Dominant language
Rust
Stars
48.2k
Forks
4.8k
Avg merge
3d 16h
Merged PRs (30d)
171

Description

## What problem does this solve or what need does it fill?
Both visibility and transform propagation require full hierarchy traversals to complete. This is required even if there are no changed components in the hierarchy.

This may be useful in very large worlds with deep hierarchies where the vast majority of the entities in the World are unchanging parts of the environment.

## What solution would you like?
A user-facing way of marking static parts of the hierarchy. Perhaps a `Static` marker component in which halts all propagation systems, forcing it and all it's descendants to be ignored during propagation.

These components can also be flags for rendering and physics for things you generally expect to not change over the lifetime of the app after loading.

## What alternative(s) have you considered?
Continue with the status quo.

## Additional context
Other engines seem to have a similar concept:

- Unity has [static GameObjects](https://docs.unity3d.com/Manual/StaticObjects.html) which enables similar optimizations in rendering.
- Unreal has [static meshes](https://docs.unrealengine.com/4.27/en-US/WorkingWithContent/Types/StaticMeshes/), though primarily used for rendering.
- Godot has [static bodies](https://docs.godotengine.org/en/stable/classes/class_staticbody.html) which are only used for physics.

Contributor guide

Open the contributing guide

Research direction

Begin by locating the visibility and transform propagation systems and tracing how they decide which hierarchy nodes to visit. Compare the proposed Static marker and descendant-skipping behavior with existing rendering and physics flags. Done means a concrete user-facing design and implementation scope for marking static hierarchy parts and excluding them from propagation.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
game-dev, performance
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.