Hanging slime on Niagara

Since I wrote my last post I have started working as a Senior VFX Artist on Slimecore and it’s given me a chance to do more with this kit I was already working on. I created a connecting slime system for the game that I’ll share as well later but I wanted to start with the hanging one since I did it on my own free time.

At first I was trying to use a pendulum module and I got it looking decent enough but it didn’t feel satisfying enough, I realized I was over-complicating my existence and this system so I stripped it down to a spring force and paired it with a new Base Position parameter so it always has a default position that can mask the physics and that did the trick. This is the same logic that I used for the connecting slime system I mentioned.

This BasePosition variable is then used as the Position Binding in the Ribbon Renderer. So the forces and collisions are never directly applied, it is masked through that Lerp.

The collision is kind of a bonus, I think it would need more work for it to be usable and it would depend on the context it’s being used for.

I use the Emitter Random for getting a random color from a range.

On the left is the Spring Force module setup. I use curves with the Normalized Exec. Index so that the bottom tip is much more springier than the top.

The collision doesn’t work too well on its own though. I think it needs some Scratch Pad logic to create a sticky behaviour, remain stuck to the first surface it collides with and then check for how much it’s being stretched like the system from my last post does. I might add it here later.

Here on the right is how I create the shape of the ribbon in the Initialize Particle module.

I set several User Parameters to allow for plenty of variability with the system to avoid visual repetition.

  • Length (Base Position)
  • Width (Ribbon Width)
  • Shape (Ribbon Width)
  • Segments (Spawn Burst)
  • Spring strength
  • Spring tightness
  • Droplets scale
  • Droplets rate

So that’s the ribbon emitter. Then for the drops I use a Particle Attribute Reader to get the Position and Velocity of the 3rd particle from the bottom up in Emitter Update.

We use those in the Inherit Velocity and Shape Location modules to be able to spawn them on the tip of the slime while minding optimization.

I also utilize the Width user parameter for the spawning radius.

For the Particle Scale (pics below this) I’m clamping the size to be able to grow it depending on its stage: Main Float value is to get that growing droplet before it drops and gets affected by gravity; I need this to happen fast and predictably so I use Age instead of Normalized Age since the droplets have a randomized lifetime. For the Minimum value I use velocity because if the drop is already dropping then I don’t want it to be slowly growing anymore.

Then we have the Point Attraction Force module, this is to aid the slow sliding and growth/formation of the droplet and then let it go so gravity does its thing. I’m using the Width parameter once again to make sure it spawns on the surface of the actual ribbon.

And there you have it folks! I’ll be writing about the connecting slime next and eventually maybe add proper collision to this hanging one.

Leave a Reply