Skip to content
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

Rework Particles2D tutorial to be artist friendly #4283

Open
TheDuriel opened this issue Apr 10, 2019 · 11 comments
Open

Rework Particles2D tutorial to be artist friendly #4283

TheDuriel opened this issue Apr 10, 2019 · 11 comments

Comments

@TheDuriel
Copy link

This is my proposal for a rewrite of the ParticleMaterial properties. From a 2D artists usage standpoint. Nearly all of this should translate to 3D as well i think.

The goal of this rework is to make particles more accessible to artists, and those who did not pay much attention in their physics and mathematics classes. This means renaming properties to practical and descriptive counter parts, reworking descriptions to use existing terminology, and adding real usage examples. Mathematical property names can may be kept as a side note in the description.

Part of this proposal is also to change the engines naming of these properties. But i am focusing first on the descriptive text.

The below text is my first pass draft of the new names and descriptions. With editorial notes. I will only list things that need changing. The format is as follows:

Old Name = New Name
New Description. Usage example. Mathematical Name.

Particle2D Node

Randomness = Randomness Scale
Multiplies the effect of the Randomness properties of the individual particle parameters. A value of 0 will result in no randomization.

Fract Delta
What even does this do?

ParticleMaterial

Spread = Emission Cone
The direction in which a particle is emitted. A value of 0 is a straight line, a value of 180 will cause particles to emit in a circle shape in all directions. The thruster of a jet engine may use a value of 22.5 to emit particles in a 45° cone.
Extra Proposal: Rework the property to use a range of 0-360.

Gravity = World Gravity
The the directional pull per second applied to the particle. A negative value on the vertical axis will cause particles to fall towards the ground.

Initial Velocity = Linear Velocity
The initial linear speed per second with which a particle is is emitted.

Angular Velocity = Initial Angular Velocity
The initial rotational speed of the particle, in degrees. This parameter does not affect the position of the particle but rotates it in local space.

Spin Velocity
This appears to not exist. I imagine it a duplicate of angular Velocity.

Orbit Velocity = Orbits
The number of complete circles the particle describes during its lifetime.
Note: This needs some clarification, as the orbits are not around the emitter, but appears to be tangental to its linear velocity.

Linear Accel = Acceleration
The rate at which a particle loses or gains momentum. You can use this to simulate a rough or slippery surface, and slow down or speed up a particles motion over time.

Radial Accel = Emitter Gravity
The gravitational force the emission point excerts on the particle. You can use this to make the particle fall towards or accellerate away from the emitter. This is similar to the gravitational pull a planet excerts on its sattelites. In mathematics this is the Radial Accelleration.

Tangental Accel = Tangental Speed
The rate at which a particle moves around its emitter. You can use this to cause particles to spiral outwards from the emitter, like the spiral arms of a galaxy. In mathematics this is the Tangental Accelleration.
https://www.youtube.com/watch?v=MkDlAI4dYvE

Angle = Rotation
The base rotation of the particles texture in degrees.
Proposal: Limit to -180 to +180

Other things

The gifs need an overhaul. The particle used should be one that allows clear identification of its rotation. Like a compass start with a red tip indicating north. And some gifs do not actually represent the real effect caused by the property, due to the fact that they were recorded with gravity instead of linear velocity.

@TheDuriel
Copy link
Author

Related issue on the main repo: godotengine/godot#27878

@ca3games
Copy link

How bout using a system similar to how layers works on 2D painting software like photoshop or GIMP, maybe make the parts of the particle system being described like effects of layers or blending modes.
Maybe my idea is just dumb, but I still think 2D layers like GIMP is a great way to make something artist friendly.

@TheDuriel
Copy link
Author

From my understanding these properties are applied in the order they are listed. So that's not a problem, but worth pointing out.

@TheDuriel
Copy link
Author

Additional info about the Randomness property of the Particle Node:

The in editor XML claims that i affects the emission lifetime. However that is completely opposite to the documentation, which simply shows a formula seemingly indicating that it randomizes the randomization properties of the individual ParticleMaterial parameters.

So now i'm confused, and my initial suggested change is probably completely wrong.

@ca3games
Copy link

From my understanding these properties are applied in the order they are listed. So that's not a problem, but worth pointing out.

Maybe a basic wizard to help you make your particle?

@Duroxxigar
Copy link

I like this rewrite idea. However, I don't know the viability of a basic wizard. I feel like that is what a tutorial would be for, or as @TheDuriel is proposing, examples inside of the doc.

@TheDuriel
Copy link
Author

Curves

Curves animate their associated ParticleMaterial parameter over the lifetime of the Particle. They are created from CurveTexture resources.

CurveTexture resources represent a mathematical curve, and include a basic curve editor in the inspector. The final number of key frames (the number of times the parameter is updated), is equal to the curves width divided by its bake resolution. This means that a curve with a width of 2048 and bake resolution of 100 (the default values) will update the ParticleMaterial parameter 20 times over the course of its lifetime. To keep the interpolation smooth, you can decrease the bake resolution in proportion to the lifetime.

Note: Right clicking the curve editor allows loading of presets and adding of points. This needs documenting as well.

Note 2: Curves allow saving to png, but doing to results in an error and no png. Loading pngs into curves is impossible.

@bitbutter
Copy link

I think the new property names are an improvement.

re. Randomness Scale. I'd swap 'scale' for 'strength;, since scale can also refer to the frequency of random variations ver time in other a/v contexts. I think strength indicates the meaning of the property with a bit less ambiguity.

Randomness = Randomness Strength

@TheDuriel
Copy link
Author

Thanks for the reminder. After digging into the file:

https://github.com/godotengine/godot/blob/master/drivers/gles3/shaders/particles.glsl#L95

Seems like "Lifetime Randomness" is what it should actually be.

@akien-mga
Copy link
Member

Moved this to godot-proposals which is better suited for such discussion.

@Calinou Calinou added this to the 4.0 milestone Apr 10, 2022
@Calinou
Copy link
Member

Calinou commented Apr 10, 2022

With the particle randomness properties being changed to min/max ranges in 4.0 for better control, I think all we need to resolve this is to implement #4315.

@aaronfranke aaronfranke removed this from the 4.0 milestone Feb 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants