With Geometry Nodes in Blender we can easily create the effect of an object flowing from place to place. The effect is universal and can be applied to any mesh.

Add “Suzanne” to the scene (shift+a – Mesh – Monkey). Add the “Geometry Nodes” modifier to it and click on the “New” button to create a new node tree.

We will create the flow effect by changing the coordinates of the mesh vertices in such a way that when moving along one axis, for example, the X axis, the coordinates of the mesh vertices along the other two axes will be proportionally change.

First, let’s make a parameter for moving of mesh vertices along the X axis.

We can get the coordinates of the mesh vertices from the *Position* node. Add it to the node tree (shift+a – Input – Position).

Add a *Separate XYZ* node to the scene (shift+a – Vector – Separate XYZ) and feed in the positions of the mesh vertices from the *Position *node to it. Now we will get separate coordinates along the three axes X, Y and Z, for each vertex of the mesh.

Add an *Add *node (shift+a – Utilities – Math) with which we will control the movement of mesh vertices along the X axis, adding the value of this node to their X coordinate. Link the X coordinate from the *Separate XYZ* node to it.

Let’s add a *Combine XYZ* node to combine the separated X, Y and Z coordinates back. Connect the Y and Z inputs and outputs of the* Separate XYZ – Combine XYZ* nodes directly, as long as we do not change these coordinate components. And to the X input of the *Combine XYZ* node, we will link the summ value of the vertex coordinate and a value from the *Add* node.

To assign new coordinates to the mesh vertices (the original coordinate plus the value from the *Add* node), append the *Set Position* node (shift+a – Geometry + Set Position) to the main geometry node tree branch and link the coordinates from the *Combine XYZ* node with the *Position* input of this node.

Now we can move the mesh along the X axis simply by changing (scrolling with the mouse) the value in the field of the *Add* node.

We can modify the Y and Z mesh vertices coordinates according to the X coordinates simply by their multiplication. To do this, add two *Multiply* nodes to the tree (shift + a – Utilities – Math, switch to Multiply mode) and embed them in the branches for the Y and Z coordinates. Feed the value from the X coordinate to their free inputs.

Just now we can see some mesh distortion.

To make the mesh properly mirrored along the X axis, add another *Math* node to the tree (shift+a – Utilities – Math), switching it to *Absolute* mode. Insert it before the multiplication nodes.

This node helps to get the absolute values of the X axis vertiex coordinates makes it always positive. Now the mesh is properly mirrored around its origin point.

The mesh distortion effect works along the entire X axis. Let’s limit it to a range from -1 to 1.

Add another *Math* node to the node tree, switching it to the *Minimum* mode. Insert it next to the *Absolute* node.

This node compares the X-coordinate with the number in the second input (1.0 in our case), and if it is less – returns the coordinate, else it returns this number (1.0).

We multiply the Y and Z coordinates by the value from this node, so in the range from -1 to 1 (negative values are converted to positive by the *Absolute* node), we multiply the Y and Z coordinates by the X coordinate, and outside this interval – multiply by 1, and nothing changes outside the given interval.

Now, by sliding the value in the *Add* node, we see how Suzanne flows from one position to another around its origin point.

To make the effect smoother, let’s add a *Subdivision Surface* modifier to the mesh.

D