Feedback

What's your question?

By: [ Editor ] Asked from United States of America

Particle grid acting like the ripple fx

Hi Everyone,

I am vfx and 3D artist learning the ways of programming and, I got a question for you guys. How could I create a ripple fx in Houdini, Maya and or XSI. I don't want to do it using fluid dynamics nor softbodies. It has to be done using particles. here is what I mean

http://www.youtube.com/watch?v=bqfrNraWtro

This was done using only particles, I am not sure of all of the details in terms of the actual process that was took place in the creating of this "river chocolate fx" but someone told me that those were all particles with math functions.

Anyways, like I said before I am in the learning path of programming so this will be a good exercise for me to play with however, so far my results ==0 I tried sin and cos functions with other fields but I just can't get it to work, ANY HINTS, I promise I'll make it look good once I know how to even start.

Cheers and happy fx

ps: The starting point is a grid of particles then ....???? Martin

Add comment viewed 756 times Latest activity 7 months ago

or Cancel

4 answers

  • 3

carsten kolve

You don't necessarily need particles driven by dynamics to generate this sort of motion. Often you get a much higher degree of control if you use deformers to control the point position and animate the parameters so you get a nice flowy motion that looks as if it is physically motivated. Blending between different deformers based on their area of influence allows you to get a nice transitions between the different wave pools.

A nice system that allows layering of lookup curves for deformation (and other stuff) is Houdini's 'Chops', see an introductory movie that describes how to achieve a similar effect to what you are after.

Chops - Deforming Geometry part 1-3

http://www.sidefx.com/index.php?option=com_content&task=view&id=573&Itemid=216

http://www.sidefx.com/index.php?option=com_content&task=blogcategory&id=115&Itemid=216

http://www.sidefx.com/index.php?option=com_content&task=view&id=600&Itemid=216

It's more like visual programming rather than typing out code, but that's not always a bad thing.

NN comments
martin_61
-

Hello Carsten Kolve,

Thanks so much for sharing, this definitely will work as well. Well, since I am learning Houdini I guess this will be a good thing to look at how something like this can be done in Houdini. Cheers

Martin

martin_61
-

Hello Carsten, I also forgot to tell you that the reason why I wanted to use particles is because I would like to eventually replace the particles with geometry like the chocolate commercial. I am watching the videos that you posted and they pretty interesting, CHOPS can really save the day.

or Cancel
  • 2

julian [ Admin ]

Similar to above, you can set the y motion as a function of distance from a point. Then the ripples will be concentric circles like your link.

vector $pos = position;
vector $center = <<100 ,0 ,0>>;
float $distance = mag($pos - $center);
position = <<$pos.x, 10 * sin(($distance / 5) + (frame/12)) , $pos.z>>;

Another option is to set up springs between the particles and use a collision object or a force to get the simulation going.

Or you could use the water texture node. To do this you would use an arrayMapper. Set the X and Z position of particles to the U and V coordinates of the arrayMapper. The arrayMapper output should conmnect to the particle Y position


Hi Martin

A couple of files here

One file has a particle grid that is controlled with the above expression.

The other has particles with an arrayMapper attached. The mapper source is a water 2d texture node with concentric ripples. There is an expression that normalizes the X and Z positions and these values connect to the arrayMapper. the arrayMapper gives back the value it looked up in the waterTexture, and this is set as the position.y value

NN comments
julian
-
, moved your comments here, as they are not answers, but comments on the answer:

I have created two atttributes, the RampPosition UandV where I have added arrayMapper5 and arraryMapper6 outValuePP.

However this does not work. I get only one particle moving for like 10 frames then it disappears.

julian, What did you mean by this? – set up springs between the particles and use a collision object or a force to get the simulation going, Martin

julian
-
– I haven’t forgot about the arrayMapper file – I will get there -been super busy this weekend

martin_61
-

comment comment thee erher e

or Cancel
  • 2

dan bethell [ Editor ]

Houdini is great for this kind of thing, but of course there are a hundred ways to achieve the same effect. If CHOPs does not give you what you want there are a couple of alternatives that jump to mind.

The simplest solution would be to use a Point Op in the Geometry context and have expressions in the position fields drive your point displacement. The problem with Point is that your expressions can quickly become very complicated and expressions are slow when dealing with heavy geometry.

Instead, I prefer to use the VopSop which gives you a VEX Context for manipulating your geometry. VEX has many handy Ops for doing things like displacing a point along a vector, calculating distance between two points, calculating ripples on a surface, etc. Using VEX you can model far more complex behaviour without getting overwhelmed with expressions. It'll usually run much faster than an expression-based Point solution too.

NN comments
martin_61
-

thanks so much Dan, I am currently working with Real Flow and I am slowly doing little things with Houdini. I just finished watching all of the procedural videos done by 3Dbuzz, so as soon as I get around its workflow I’ll be more than happy to try out your advice. Thanks so much.

Martin

or Cancel
  • 1

thnkr [ Editor ]

a runtime expression like:

float $pos[] = particleShape1.position;
particleShape1.position = <<$pos[0], sin($pos[0] + frame/24), $pos[2]>>;
NN comments
martin_61
-

Hello Michiel, I guess I’ll play with other functions that will make the ripples. Thanks

or Cancel
  • 0

martin_61 [ Editor ]

Thanks so much Julian,

I have created two atttributes, the RampPosition V where I have added an "arrayMapper5.outValuePP and RampPositionU where I have added an "arraryMapper6.outValuePP.

This is the part that you guys provided to me and for the position of x and z I used the RampPosition V and RampPositionU.

float $pos[] = particleShape1.position;

float $pos[] = particleShape1.position;

particleShape1.position = <<particleShape1.rampPositionU, sin($pos[0] + frame/24), particleShape1.rampPositionV >>;

However this does not work. I get only one particle moving for like 10 frames then it disappears.

Sorry if I am totally off track however thank you for your help.

I couldn't post the image, I got an error saying that new users can't post images.

I'll just send you the maya file via email

or Cancel
  • 0

martin_61 [ Editor ]

Hello Julian,

What did you mean by this?

set up springs between the particles and use a collision object or a force to get the simulation going.

Martin

or Cancel