The results of the simulation with parameters tuned as they are look very good given how quickly they can be generated with POPs. But one error has crept into your VEX code. fit01() expects input value ranging from 0 to 1. So if you plug @id into expression like "float value = fit01(@id,1,100)" the resulting value will be 1 for particle with @id = 0 and will be 100 for the rest of the particles. And after that you get the rand of "value" that in turn produces float numbers from 0 to 1. So for example your airresist multiplier changes not from 1 to 100 but rather from 0 to 1 as a result. If you want to randomize something based on particle @id and have the result within a certain range you better use one liner like "airesist *=fit01(rand(@id),5,10)". And finally just to verify that you can add POPWrangler for group "just born" ( that you need to specify in the POPSource node) with expression like "f@bla = fit01(rand(@id),1,3)". That will add another attribute called "bla" to your particle object. Now you can look in Geometry Spreadsheet for attribute called "bla" on "Geometry" data for your pop object and see that its value is really ranging from 1 to 3. After all those changes it would take some time to re-tune parameters of your sim to look as beautiful as they were originally.
came here to mention this, but just found you beat me to it! (im very late to discovering these excellent tutorials) your write up of the error and solution is excellent and I couldn't of written it better. crazy how such a small detail can have such a big impact, especially when the results of the original setup do so well at disguising the error!
@@KonstantinPromokhov-p3n thank you for such a great explanation. You're completely right, I've missed the point and didn't find the issue until recently. Would love your insight on other tuts too :D I must admit that the SideFX explanation to fit01 "Fits a value to the 0-1 range." got me a bit confused. It's more like "fits a 0-1 value to the new range"? Do I understand correctly?
Hi! Amazing tutorial as always :) I was wondering if there was a way to make the bubbles that are closer to the emitter bigger? Or, as you mentioned in the description, should I be using Pyro for that? I yet have to get used to all those parameters, wondering if there is a POP parameter that could be used for it.
It'd be extremely difficult to make entirely in the POP simulation. Because there's no parameter that controls it. So it's better to run a pyro simulation, then turn the smoke to VDBs and mesh together with the particles. As an alternative, we can always use full FLIP simulation, but that'd be heavier than POPs. :)
I'm quite confused by the airresist vexpression, how does fitting the seed value create the desired result? Surely the output of the rand function would still be between 0 and 1, wouldn't it make more sense to fit that output?
I'm glad you asked! You're right that the rand expression returns the value between range (0,1), but it'll be based on the seed provided with the fit01. So it's all about controllability of the values and clamping the id values outside the fit01 range. But of course you can fit the output, it'll also make sense and allow you to control the values more directly, so feel free to do that :) You'll be able to get the same results, just the values will be different.
Hey ComedicRick, I just realised which section you're referring to (did I mention I'm a bit rusty coming back to YT? :P). You're totally right, I made a mistake in the struggle to record everything in one take haha It'd be much better to fit the whole value too! I'll add a note there, thanks for spotting :D
I'll add it to my list, but I think it's better if I use the pyro technique for something else and then you can apply it to this effect :) it'll be more versatile But, in a nutshell, you can make a simple pyro billowy smoke for these bigger air bubbles (emitted from the same geo as the particles) and then mesh it together with the particles from the tutorial.
Hello Vicky. Thank you for the tutorial! I am new in houdini and I have a question. If I have let's say a sphere, and the particles are entering the sphere how can I slow them down when touching the sufrace of the shpere and then kill them, as they touch the surface again on they way up through to buoyancy?
Hi Timoleon G, I'm not sure I understand correctly, can you confirm? The bubbles are emitted at the bottom of the water container, next they go up and go inside a sphere and collide with it. When they touch the surface of the sphere (or half sphere, because it needs to be opened on one end) they die. Is that correct?
@@VoxelFX Thank for the response Vicky. To expain better my project: I have a grid that emits rain like particles and I have a sphere under this grid like a collision object. I want same paricles when they hit the surface of this sphere and go inside to start producing your effect, but as the particles start rising because of the buoyancy effect and touch the surface of the sphere again to disappear.
@@timoleong6786 I see what you mean now. The best way to do it is always to split the project into smaller parts - rain & bubbles. So, the first one would be the rain simulation. In the rain POP solver you can switch on the "collider group" so you know which particles hit the sphere. You can also use the hit attributes to know when they hit it. I would use the "stick" option in the POP solver/Collision Behavior/Response = stick The second part would be using the particles that hit the surface as the source for the new POP simulation. You can blast all the particles outside the "collider group" and use them as the emission for the bubbles. Now, the tricky part is to make them emit only for one frame. It'll be difficult to explain briefly, but you can use VOPs to assign an attribute to each particle that gives it a number for each frame it is present (alive). Then, you can blast all particles that have a number higher than 1. And lastly, to make the bubbles disappear when they hit the sphere, you can use the "die" option under POP solver/Collision Behavior/Response = die Let me know if it makes sense :D
@@VoxelFX Thank for your trouble, so match Vicky! By doing a personal project I am leaning a lot faster. I will send you my motion graphic when it is done.
This effect is really nice! 👍 But for the render, why did you used Mantra?? And not KarmaXPU or Redshift, or any other FAST renderer? 🤔Because with Mantra is nice but you need too much CPU power... 😱
Thanks 3D Forever! Most beginner artists use Mantra, so that's the main reason, I wanted to make the tutorial as straightforward as possible. Also, if I wanted to render it fast and nice, I'd probably use Katana haha :D
for some reason as soon as I add the pop fluid node, I no longer see any particles. Freezing or removing the node puts it back to where its working gain.
@@VoxelFX Yeah in your example you wired all the forces in a line, the only way that got it to work for me was to take my source, then my forces, then the pop fluid and wire them side by side with a merge node. Odd, still not sure why but it worked.
@@madmodder I'd need to see the scene to tell you exactly why it happens :/ But your approach is correct too, it's fine to merge the nodes and plug in the merge straight into the sim network :) Well done on finding a solution!
I just discovered your channel and I wanted to thank you because the tuts are really clear, straightforward and easy to follow 👏
finallyyyy, welcome backkk voxelll, hope there will be a lot of tutorial from youuu
definetely gonna stick up to your vids while learning houdini, big thanks for the content!
As always, very well organized and very helpful to me, looking forward to your next tutorial!
wow just wow! already loved it!
The results of the simulation with parameters tuned as they are look very good given how quickly they can be generated with POPs. But one error has crept into your VEX code. fit01() expects input value ranging from 0 to 1. So if you plug @id into expression like "float value = fit01(@id,1,100)" the resulting value will be 1 for particle with @id = 0 and will be 100 for the rest of the particles. And after that you get the rand of "value" that in turn produces float numbers from 0 to 1. So for example your airresist multiplier changes not from 1 to 100 but rather from 0 to 1 as a result. If you want to randomize something based on particle @id and have the result within a certain range you better use one liner like "airesist *=fit01(rand(@id),5,10)". And finally just to verify that you can add POPWrangler for group "just born" ( that you need to specify in the POPSource node) with expression like "f@bla = fit01(rand(@id),1,3)". That will add another attribute called "bla" to your particle object. Now you can look in Geometry Spreadsheet for attribute called "bla" on "Geometry" data for your pop object and see that its value is really ranging from 1 to 3. After all those changes it would take some time to re-tune parameters of your sim to look as beautiful as they were originally.
yes,this is the correct.
came here to mention this, but just found you beat me to it! (im very late to discovering these excellent tutorials) your write up of the error and solution is excellent and I couldn't of written it better. crazy how such a small detail can have such a big impact, especially when the results of the original setup do so well at disguising the error!
@@KonstantinPromokhov-p3n thank you for such a great explanation. You're completely right, I've missed the point and didn't find the issue until recently. Would love your insight on other tuts too :D
I must admit that the SideFX explanation to fit01 "Fits a value to the 0-1 range." got me a bit confused. It's more like "fits a 0-1 value to the new range"? Do I understand correctly?
Great tutorial :) I hope to see more videos from you :)
Very Very Help Full Thank you very much
Hi! Amazing tutorial as always :) I was wondering if there was a way to make the bubbles that are closer to the emitter bigger? Or, as you mentioned in the description, should I be using Pyro for that? I yet have to get used to all those parameters, wondering if there is a POP parameter that could be used for it.
It'd be extremely difficult to make entirely in the POP simulation. Because there's no parameter that controls it.
So it's better to run a pyro simulation, then turn the smoke to VDBs and mesh together with the particles.
As an alternative, we can always use full FLIP simulation, but that'd be heavier than POPs. :)
I'm quite confused by the airresist vexpression, how does fitting the seed value create the desired result? Surely the output of the rand function would still be between 0 and 1, wouldn't it make more sense to fit that output?
I'm glad you asked! You're right that the rand expression returns the value between range (0,1), but it'll be based on the seed provided with the fit01. So it's all about controllability of the values and clamping the id values outside the fit01 range.
But of course you can fit the output, it'll also make sense and allow you to control the values more directly, so feel free to do that :) You'll be able to get the same results, just the values will be different.
Hey ComedicRick, I just realised which section you're referring to (did I mention I'm a bit rusty coming back to YT? :P). You're totally right, I made a mistake in the struggle to record everything in one take haha It'd be much better to fit the whole value too! I'll add a note there, thanks for spotting :D
is it possible to have the same tuto but using smoke / volume ?
I'll add it to my list, but I think it's better if I use the pyro technique for something else and then you can apply it to this effect :) it'll be more versatile
But, in a nutshell, you can make a simple pyro billowy smoke for these bigger air bubbles (emitted from the same geo as the particles) and then mesh it together with the particles from the tutorial.
Hello Vicky. Thank you for the tutorial! I am new in houdini and I have a question. If I have let's say a sphere, and the particles are entering the sphere how can I slow them down when touching the sufrace of the shpere and then kill them, as they touch the surface again on they way up through to buoyancy?
Hi Timoleon G, I'm not sure I understand correctly, can you confirm?
The bubbles are emitted at the bottom of the water container, next they go up and go inside a sphere and collide with it. When they touch the surface of the sphere (or half sphere, because it needs to be opened on one end) they die.
Is that correct?
@@VoxelFX Thank for the response Vicky. To expain better my project: I have a grid that emits rain like particles and I have a sphere under this grid like a collision object. I want same paricles when they hit the surface of this sphere and go inside to start producing your effect, but as the particles start rising because of the buoyancy effect and touch the surface of the sphere again to disappear.
@@timoleong6786 I see what you mean now. The best way to do it is always to split the project into smaller parts - rain & bubbles.
So, the first one would be the rain simulation. In the rain POP solver you can switch on the "collider group" so you know which particles hit the sphere. You can also use the hit attributes to know when they hit it. I would use the "stick" option in the POP solver/Collision Behavior/Response = stick
The second part would be using the particles that hit the surface as the source for the new POP simulation. You can blast all the particles outside the "collider group" and use them as the emission for the bubbles. Now, the tricky part is to make them emit only for one frame. It'll be difficult to explain briefly, but you can use VOPs to assign an attribute to each particle that gives it a number for each frame it is present (alive). Then, you can blast all particles that have a number higher than 1.
And lastly, to make the bubbles disappear when they hit the sphere, you can use the "die" option under POP solver/Collision Behavior/Response = die
Let me know if it makes sense :D
@@VoxelFX Thank for your trouble, so match Vicky! By doing a personal project I am leaning a lot faster. I will send you my motion graphic when it is done.
@@timoleong6786 I'd love that! Please share when it's ready :D
Can we use Attribute noise instead of VEX?
This effect is really nice! 👍 But for the render, why did you used Mantra?? And not KarmaXPU or Redshift, or any other FAST renderer? 🤔Because with Mantra is nice but you need too much CPU power... 😱
Thanks 3D Forever!
Most beginner artists use Mantra, so that's the main reason, I wanted to make the tutorial as straightforward as possible. Also, if I wanted to render it fast and nice, I'd probably use Katana haha :D
@@VoxelFX Ok I understand that, thanks for the answer!
@@VoxelFX thank you for using mantra. Asbeginner. I cannot afford redshift
Thank you a lot, that`s a
great tutorial
Thanks, well done. It helps me a lot.
Haven't watched it now, going to my non cg related work. But gave its respective like. Gonna enjoy it so much tonight. Do you have ig to follow you ?
Thanks Jhonatan, I hope you will ^^
No, I don't :/ yet... But I'll probably have to at some point haha
Thanks for the tutorial. Hello from your former classmate....good job Viki
Irfan!!! So good to hear from you
Very vice dude
That's so cool!
Thank you !!! any hip available please ?
Yes, thanks for reminding, it's in the description now too: drive.google.com/drive/folders/1ym2Rz-mbPa5J5ReNGfeRcidLh6JJpWni?usp=sharing
for some reason as soon as I add the pop fluid node, I no longer see any particles. Freezing or removing the node puts it back to where its working gain.
Are you sure you're plugging in the node in the right place?
@@VoxelFX Yeah in your example you wired all the forces in a line, the only way that got it to work for me was to take my source, then my forces, then the pop fluid and wire them side by side with a merge node. Odd, still not sure why but it worked.
@@madmodder I'd need to see the scene to tell you exactly why it happens :/ But your approach is correct too, it's fine to merge the nodes and plug in the merge straight into the sim network :) Well done on finding a solution!