Rain on Water



Whats the best way of creating rain in Maya, that will react with water.

heres a scene im working on, its pretty simple and is purely for example sake.

(rain that actually reacts with the water and will reflect physically off of the water, i figured particles is the best way but i’ve never done anything like it before so im pretty new to it…any help would be gr8ly appreciated.)


i would recommend using RealFlow for such task.


hmm, well i kinda dont have realflow, is the effect possible in Maya though? is it possible to connect particles with fluids in that way?


its very good question … and best way to do it, is by connecting particles collision to the surface shader, check this file : ripples.zip …

its not mine and i forget where i get it from … but sure its very usfull to study it :slight_smile:


Geniously made!!!


I agree. we spend a full to study it.


If you want ripples where particles hit, you can make a fluid wake on the ocean and use an expression to collide the particles with it. Note that you may need to increase the resolution of the wake fluid and also lower the simulation rate scale( depending on the speed of the ocean waves ). With a complex scene like that it will be hard to see individual drops hitting the water( in reality it would just look like some added noise on the water ).

Here is particle runtime expression that both kills particles when they hit the groundplane(y=0) and at the same time emits into the fluid( creating a wake ). One can also make expressions that hit the true displaced surface(using colorAtPoint on the oceanShader… see expression created by and oceanSurfaceLocator to see how this is done), but the groundplane is good enough for most uses. For smoother looking splashes one could emit into adjacent pixels on the fluid with less density. This would be like painting a soft airbrush stamp instead of setting a single pixel.

Change particleShape1 to your particle name and fluidShape1 to your wake fluid.


float $dropSize = .2;
vector $myVec = particleShape1.position;

// if the particle hits the ground
if( $myVec.y < 0 ){

// kill the particle
particleShape1.lifespanPP = 0;
float $x = $myVec.x;
float $z = $myVec.z;

// get the fluid voxel index at that particle location
int $vox[] = fluidVoxelInfo -objectSpace false -cb -voxel $x 0 $z fluidShape1;
// vox is zero sized when the particle is outside the fluid
if( size($vox) > 0){
// set the density at that voxel ( zi is ignored for 2D fluids )
setFluidAttr -at density -xi $vox[0] -yi $vox[1] -zi $vox[2]
-fv $dropSize fluidShape1;


This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.