This is a drain effect that I often use in order to illustrate muscle theft. This is made out of Some Geometry Nodes Bullshit that basically generates points in an area around an origin object, and then those points fly towards a target object.
You can set an object to act as a collider, which will then deflect the points away from that object, and if the point hits the object, it gets deleted.
Below is an explanation of how to use this effect. The download link is at the bottom of the page.
I won’t explain how I made it here because 1) I actually made this a good while back in an insane week-long fugue state, and 2) most of this is combining several different tutorials at once, so it’s not like I came up with all of it myself. I recommend checking Xan3D‘s channel, as he has many cool geonodes tutorials.

Effect components
This effect is composed of two mandatory components, and one material.
- The point simulator object, which contains the Geometry Nodes setup to create points and direct them to their target.
- The trail generation object, which looks at the points generated by the simulator, and adds trails.
- The drain trail material, which can be edited in Shader nodes with the trail object selected.
In this file there are two empties that are already selected as the origin and target objects.
Any object can be used as the origin and the target, but these empties allow for easier control. For example, if you want the target to be a character’s hand, you can simply parent the Target empty to their hand, and then set the character’s body as the collision. I haven’t been able to figure out an elegant way to use vertex group selection for the particle generation that does not move the entire simulation when the generator object is moved, so I’ve settled on these controllers instead. Please leave the points and trail generator objects at world center, and only move the origin and target objects instead.
Point generation settings

Clicking on the Drain Points Sim object and going to the modifiers tab shows this Geometry Nodes setup. All of the options here have tooltips, so they should be fairly self explanatory.
You select the origin and target objects, and optionally, define a collision object. You can also set how far away from the origin the points should appear, as well as the length of the ray for them to detect collision. Longer rays will make them react to the collider from greater distances.
Then you choose whether to have random starting velocity or not, and by how much. You can also define a starting velocity by the XYZ vector, so that you can control exactly which direction the points should begin traveling. Mind that this is evaluated in world space, not local space.
Velocity controls how fast the points fly towards the target, and damping acts as a percentage multiplier of that speed.
Noise adds random directional velocity while the point flies in order to create a more erratic flight path.
Deflection controls how strongly the points are deflected away from the collider.
In the frequency tab, the settings are fairly self explanatory, determining how many frames points should live for, how fast they are generated, and how many at a time.
Drain trails settings

As for the Drain Trails Sim object, the settings are also fairly self explanatory.
Trail lifetime is how many frames the trail is alive for. More frames means longer trail.
Thickness is the trail’s overall thickness, though its overall curvature can be controlled within the Geometry Nodes setup if you need finer control.
Resample curve and circle resolution control the number of points in each curve, as well as how many vertices are in the circle profile of each curve. Lower values generate less geometry, but are also more jagged. Higher values generate a lot of geometry, but are very smooth.
Material settings

The material for the trails is fairly simple, where it uses the factor attribute, PAR.Factor to drive the opacity and emission strength of the trails. A curve’s factor means a value of 0 to 1 that represents the factor along the curve’s length. I also included a little optional rainbow effect where I use an attribute named PAR.IDRandom to assign random values to each point in the trail and have that be a different color along a rainbow.
Enjoy the trails!

As with everything else in this blog, feel free to use it however you see fit, change things, steal things, etc.
Leave a Reply