-
Notifications
You must be signed in to change notification settings - Fork 73
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Customizable particle attribute layout #109
Labels
C - enhancement
New feature or request
Comments
This was referenced Jan 11, 2023
djeedai
added a commit
that referenced
this issue
Feb 11, 2023
This change introduces a new dynamic particle layout based on _attributes_. A particle attribute is a single scalar or vector value describing one aspect of the particle. The value is stored per particle, and the set of attributes for all the particles of an effect is organized into a layout describing the offset and alignment of each attribute into the particle buffer on the GPU. This new design allows customizing the particle storage itself based on the modifiers used for each effect, which enables both greater customizing and a compact memory footprint, as particles only store the attributes needed by the effect. To enable even greater customization, _properties_ can be attached to effects. A property is a dynamic quantity assignable at runtime, and uploaded to the GPU each frame, allowing to control the quantity it's bound to. Properties can be bound to values of modifiers, like the `AccelModifer` acceleration, to enable users to vary that field at runtime without the need to recreate the effect. Properties trade some performance for greater control and customizing. This generalize an implicit concept previously only available for the acceleration of `AccelModifier` and the force field sources, and now made available to any property-enabled field of any modifier. Fixes #109
djeedai
added a commit
that referenced
this issue
Feb 25, 2023
Initialize the render shader variables used by modifiers with the attributes of those modifiers if present, or with a default attribute value otherwise. Related to #109
djeedai
added a commit
that referenced
this issue
Feb 25, 2023
Initialize the render shader variables used by modifiers with the attributes of those modifiers if present, or with a default attribute value otherwise. Related to #109
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The current particle attribute layout is hard-coded into the
GpuParticle
type:bevy_hanabi/src/render/mod.rs
Lines 1117 to 1129 in 0f7494d
It contains the position and velocity of the particle, its age, and its maximum lifetime after which the particle dies.
Although this is the most common set of attributes, some effects require more per-particle attributes, like the particle size (per-particle size variation/randomness), or its color, among many examples. To unlock building such effects, the particle layout should instead be dynamically determined by the set of modifiers which define the effect. This allows enabling a wide range of new effects while keeping the per-particle data as small as possible.
The idea is to define an
Attribute
type representing a single attribute of a particle, with a name (e.g. "position") and a value (e.g.vec3<f32>
), and compose the minimal set of attributes needed per effect into a particle layout which determines how the per-particle data is encoded in the GPU buffer of particles.The text was updated successfully, but these errors were encountered: