-
-
Notifications
You must be signed in to change notification settings - Fork 97
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
New particle system request for ideas! #815
Comments
I remember a recent proposal for making trails easier to make (something about spawning based on distance instead of time IIRC)? That one has a ton of applications (smoke/dust/snow trails, light trails, backfire...) EDIT: Also, particles reacting to physics (so that they don't clip through ground/building/car/what have you) |
Compute shaders will be very welcome! Apart from that...
|
A couple things come to mind:
2.1. Or accessing vertices as a mesh?
|
Noise/turbulence for particle systems Better particle trails Particles that can spawn other particles on some sort of event. Collisions with scene, including animated geometry. Friendly naming for forces More forces Global, so its possible to have multiple emitters and forces interact togather. Spawning lights for a percentage of the particles. Node based would be cool and future proof. If node based the ability to write you own nodes easily. Even if not node based the ability to write your own forces. |
Thinking about the GDC talk that described how they implemented rollback netcode into Mortal Kombat: I think one of the things they said was vital for them was the ability to arbitrarily adjust the time of the particle effect in a repeatable way. ie. If I let a particle effect run for 10s, I can set the current time of the effect to t=5s, and the state will become identical to how it was 5s ago. If I record the internal time elapsed of a particle effect, delete it, and then create a new object with the same parameters and set the recorded time elapsed as the initial time, it will look identical to the deleted object. etc. |
@Qws This is not the place to post about it, feel free to open another proposal in this repository for that. |
@admiralzeech that sounds like you would probably need a custom particle system shader written for this that is entirely deterministic, and that you would use only for some things (blood splatter and that kind of stuff most likely, for background decorations it makes no sense). I'm unsure this is a good idea to have to regular particle systems as it would limit them too much. |
If possible/sensible, I'd like to see those values moved into the Animation node in the editor. One other possibility is to just have a different node: AnimatedParticles2D/3D, but I find that a little cumbersome as well, given there are already two slightly-confusing particles nodes per perspective (CPU and non-CPU).
|
Animated Sprite/Model Points of emissionParticles 2d and 3d have a option called points wich can emit based on the shape of the 2d or 3d node, this feature is awesome, but what if we want to emit on these points based on a animated 3d model/sprite , I think that implementing this shouldnt be hard, just hold a reference to the points and them move them accordingly to the model/sprite animation. Example in 2d scenario: Example in 3d scenario: Particle CollisionsNothing much to say, this is a long requested feature :D |
Particle alignment, for example, aligning particle to the normal of mesh. |
@WolfgangSenff I am not sure there is much that can be done about animated particles. Moving animation to the particle system itself would be extremely limiting in possibilities, as you would no longer be able to have a custom shader draw them, or allow us to reuse the same particle processing code for both 2D and 3D. What we can probably do about it (if we are not already) is just warn you that your animation will not be visible until you add a material that can process it. |
Rather than using arbitrary randomness (and spread) values for most particle properties, would it be possible to use random ranges instead? This allows for more precise control over particle behaviour and would also reduce property bloat in the inspector. |
It's been in the docs for a while that Particle2D could use SpriteFrames for animated particles in a future. |
As others have mentioned, a node based workflow with more low level building blocks. Have a look at what Blenders node based particle system currently in development is discussing. Node based
Specific features
|
Particle attractors. Something similar to Unity's external forces module would be great: https://youtu.be/EzNXZIpXJD4?t=527 |
@Kryper Please read the OP, off-topic proposals will be deleted. Open a separate one. |
@redhoot-dev I would really like to see a node based proposal that is more in line with how Godot works. |
Is this proposal discussing both 3D and 2D particles? |
@Jummit yes |
Getting the old attractors back would be cool. Solid particles, like https://www.babylonjs-playground.com/#6UZDJ9#0 If things like a dedicated editor, or node based editor can be made with addons, then a good API for it could be done instead and have all emitter and particles settings on Resources (emission rate, etc.) leaving emitter nodes just for scene dependant details (also allow full central editor panel addons). |
|
The currently not existing feature I miss the most from the current particle system is build in collision detection. It would be great if it would use the existing collision layers system. Attractors would be really great as well. My biggest gripe with the currently existing Particle system is that I can't emit new particles from the same node whenever I want, without killing all existing particles, or spawning a new particle node. I guess what I am asking for is a I would also really appreciate if the all the animation setting could be moved from the CanvasItemMaterial to the Particle node or the ParticleMaterial . At least 90% of my particles use animations. It took me forever to figure out how to use it. It one of the most counter intuitive UX Godot has. |
I would love that the new particle system allows:
thanks for listening! |
Some of this has already been said but here are my issues with the 3.2 particle system.
That about sums up my current gripes. |
Disclaimer: I've only tried the particles a little bit so I might be unaware of things they can already do. But part of the reason I haven't used them more is because I couldn't find what I'd consider to be necessary particle tools. There is a preset shader for simple emissions, and for anything more then the user basically has to write their own particle system in a particle shader. I couldn't find high level tools to add external forces, to do collisions etc. I don't really mind if the underlying system is a particle shader, but I would love to have more intuitive control as a user. Like many have already mentioned, a modular, Node-based system would allow this. It allows flexibility, experimentation, scene interaction and an overview of available tools. Searching for how to do collisions I found this great presentation from Paweł Mogiła: Hope my naive knowledge on the previous system still somewhat useful as a feedback, at least in the sense that it would be good to have a more intuitive, modular system to begin with. |
Random Lifetime as @huttyblue mentioned is something I really miss in the current particle system. Random within a color list In Unitys particle system you can make a list of specific colors where it randomizes between them. So if you set 4 colors in the list (could be Red, Green, Blue, Pink) then it only spits out one of these 4 colors. I often miss this feature. In order to get around it in Godot I can make 4 different particle systems but it would of course be better to only have one. |
Did anyone mention that the current particle system is quite awesome? If not, I will. But if there is going to be a rewrite, my wish list is a mix of improvements on the current system with some new features and I'll keep it short:
I will invariably enjoy any new advanced features like particle collisions or gravity fields but those would be a bonus to an already efficient system which does the job. Thanks. |
One thing I wanted to do but haven't found a way to in the current particle system is reverse time. One can create a time dilation effect by manipulating the speed parameter but it would be cool to have a reverse-time effect, or a negative speed value |
Instead of being limited to either global or local coords, it would be handy to be able to set the referential to an any other Spatial or Node2D. |
Edit:
Edit3: Edit2: Here are a link to unitys. |
I didn't see mentioning the option for nested particles. Imagine explosion and debris splitting into a few smaller particles. Actually it would be super awesome if particles could be bakeable and/ or support volumetric data like OpenVDB from software like Embergen or Godot's own baked particles. |
I'm new to particles, just setting up my system and finding things I'd like to make life easier:
|
I don't use particles very much but have been more recently in Blender. I love using the hair particle emitter with a mesh or collection. Especially with weight maps for different properties, namely density and length (size). I'd imagine in Godot I'd need some kind of wind and turbulence property or shader (vertex shader?) to make this practical for a game. That and basic emitting particles is really all I need. I don't see many high end games using very complex particles. |
How I could see the particle system work in scene tree with nodes is with composition: Example: Particle (config warning: need emission shape)
That way you can immediatly see what (custom) compenents of the Particle system are used and it guides the user with config warnings. |
A simple request, have a way for the particle's rotation to match the direction the particle is currently moving based on its velocity. This may be possible based on what's already been discussed in this thread. |
Would it be possible to expose the random seed for a ParticlesMaterial? That could help me a lot, I'm using multiple viewports just so I can use the same system (still didn't find any other way) |
It would be useful to be able to set other AAB-shapes or even collision shapes as bounds for particles besides AABB. For example capsules, cylinders etc. |
Since the new particles system was added recently this may need to be closed and the feature can start receiving improvement proposals... |
Closing per @eon-s' comment. The following features have been implemented in the new 3D GPU-based particles:
See this article for a detailed list of changes. You should be able to test the new GPU particles by using one of my nightly builds. Please report any bugs you encounter on the main Godot repository after searching for duplicates. 2D particles and CPU particles haven't been reimplemented yet, but both of them are planned. No need to open proposals for those. |
I would have an urging request for Particles2D though (that may also apply to Particles3D, but I never used those before). I spend a number of hours yesterday, ultimately failing, trying to adjust the intensity of a character running dust trail (a single Particles2D) via code. The dust should increase/decrease in strength and scale according to a
You might think you could also just write If you want to have the particles fade out over it's lifetime adjusted dynamically via code (this is done with the ParticlesMaterial Color property using a Gradient and setting the last color in the gradient alpha 0 in the editor), you have to dive much deeper than scale to get to that last Color property. Not sure if that even works as I found it way too much effort for what it is supposed to do. The other alternative is very time consuming finicky and creates a lot of overhead: Adjust the Particle properties and the ParticleMaterial properties manually until they visually look right, save that as a separate scene, and then swap out scenes according to Vector2.length() thresholds. But this won't give you smooth transitions unless you make a lot of these particle scenes. Ideally it would be great if we had a visual representation of the particle lifetime direction and amount in the editor. Something like a curve with starting and end point I can drag around. The curve would be able open up like a hand fan into an arced segment when pulled at arrow icons from the side or to a full circle increasing/decreasing in size when other arrow icons pulled from the starting position. Even if we never get such a handy visual aid, I desperately would need to be able to change particle scale, amount and alpha falloff dynamically via code. |
+1 to @chucklepie's # 6 suggestion:
In my case, restore the 'emission_stopped' signal -- i.e. one that emits when the last particle has died. I am using the 'One Shot' option for a particle system of a bullet after it hits, and would love to have the option of destroying the particle system as soon as it's no longer necessary. I suppose I'll just use a timer. But maybe there's already a better way to do this I'm not aware of? |
godotengine/godot#79527 adds an Amount Ratio property, which allows you to change the amount of particles dynamically without causing the particle system to restart every time you change the amount.
|
Describe the project you are working on:
I will be rewriting the particle system for Godot 4.0.
Describe the problem or limitation you are having in your project:
Users often complain that the particle system in 3.x is limited, so I would like to know what kind of new features they expect from a new one. The one in Godot 4.0 will use compute shaders, so this will probably allow a good amount of extra features.
Describe how your proposal will work, with code, pseudocode, mockups, and/or diagrams:
This issue is here to collect feedback and ideas for implementing a new one. I know there are many issues and proposals open for this topic, but I would like to have everything in one place, so please submit (or link them) here.
NOTE: IDEAS AND SUGGESTIONS UNRELATED TO THIS TOPIC WILL BE DELETED
The text was updated successfully, but these errors were encountered: