Eyelashes with the help of Geometry Node | Blender 3.1+


Eyelashes. generated using Blender’s Geometry Node and controlled using Curve Deform Modifier for Blender version 3.1 or above.

Download the Eyelashe’s .blend file for FREE by visiting one of the links below
Gumroad | https://ffuthoni.gumroad.com/l/dhkif
Artstation | https://artstn.co/m/50pVx

MAKE SURE THAT YOU USE BLENDER 3.1 OR ABOVE OR IT MAY NOT WORK AS EXPECTED.

Example of a project where I’ve used the eyelashes: Ramona Flowers - Tier 3/3

I have documented all the settings in this video on my YouTube channel:

Included in the .blend file are as follows:

  • Upper Eyelash with its Control Curve
  • Lower Eyelash with its Control Curve
  • Parent empty to place the eyelash easily
  • Four examples for the custom strands
  • One example for the custom bevel object
  • One preset material
  • One Node Group for building the material. Containing three attributes captured from the Geo Node system

Provided settings in the modifier properties

The Geometry Node tree system

Further adjustments using Float Curve nodes



Example material

Provided Node group containing three attributes captured from the Geo Node system

The Outliner

This has been hugely inspired by @Nazar_Noschenko1 method of making eyelashes.
Visit the links below to watch his video and purchase his eyelash pack.

14 Likes

Thanks for sharing.

1 Like

I featured you on BlenderNation, have a great weekend!

1 Like

Thank you so much!

1 Like

My pleasure!

1 Like

UPDATE 1 : Blender 3.3 update

  • Optimized for Blender 3.3 by replacing the Output Attributes with Store Named Attribute nodes so the attributes won’t be lost if you only append the node group. Update your Blender to version 3.3 or above to use this!

  • Expose the material input to the Modifier Properties so you would be able to use a different material for a different object.

Hey, I sent you a message on Artstation about using a thin mesh to control the placement of the eyelashes rather then a curve.

Feel free to reply there or here, whichever is easier. Tho if you want to discuss and/or need me to post images, etc of what I’m talking about, here maybe easier.

Cheers

1 Like

First of all, I’m deeply sorry that there may not be a good/clear answer to your problem than rather some ‘hacky’ workarounds.
I created the eyelashes only with personal purpose in mind for still character render like portrait.

The thing is, the object which has the Geometry Nodes was only used to generate the strands of the eyelash;
While the deforming was done using other curve object using Curve Deform Modifier.
So they’re actually two different objects that do different jobs.

In the making of the eyelash, I’ve actually tried many different methods to deform the eyelash without relying on Curve Deform Modifier (one of which was similar to your suggestion).
But I had no luck finding methods that would result in a good eyelash deformation so I just settled with the curve method which I basically copied from Nazar Noschenko.

I often suggest people who use the eyelashes for animated character to use the control curve’s shape keys and then maybe control them using drivers. Although to be honest, I’ve never tried it myself.

here’s a test using a mesh strip:

Once again, I’m sorry that this doesn’t sound like solid answer.

Hey Fatih, thanks for the reply. I’ll answer here rather then double up on Artstation.

No need to apologize, even while working on stuff animation in mind, I’m having to keep back tracking and re-adjusting stuff once I find out it doesn’t work as well as I expected it too.

I even did a simple test with your eyelash setup for animation, but at the time I wasn’t working on the full Rigify setup and thought it was going to be OK. Turns out I was wrong.

It’s possible I could end up being wrong again, but this time I did use the full rig setup with a mesh strip behind the eyelid and just some instance curve on points as eyelashes. It resulted in just clumps of lines for the eyelashes, but from an animation point of view, it seemed to have worked. Hence if I could place your node group along the mesh, with all of its controls, I should get a great outcome, in theory.

So you’re saying I should be able to basically apply your node group on a mesh strip without the control curve and deform modifier and get a result much like you have there? I think with some tweaking that could work, especially if I use a more subdivided mesh, which I can/would as the whole face is sub-divided to level 2 anyway and the mesh strip will vanish to be replaced by the eyelash curves.

So I’ll have a little play around and see how I go. I’m really trying to avoid shape keys and all that, as they have there own issues, plus ideally I just want to be able to animate/adjust the eye shape as needed and have the eyelashes just follow, if one had to make a shape key for it all, that would add up to a lot of shape keys very fast.

Cheers

I must be missing something here but not sure what.

If I add the node group without the curve to a mesh strip it doesn’t generate the eyelashes along that mesh or follow the animation of the mesh either.

It just shoots out in a line and stays there.

How did you get it to actually stick to and follow along the mesh?

My bad, I forgot to mention that I converted some of the edges from the mesh strip to curve beforehand inside the GeoNode system

Ahh, OK, well that’s starting to make sense then. My initial thought was somehow have all the eyelashes generate out from across the surface of the mesh, but this seems to work as well.

At least sort of. My first issue was that the total rotation was completely messed up.

I’m guessing you are testing this on a flat plane of a mesh, where mine matches the actual shape of the top eye lid.

I managed to get it to follow the actual mesh, which also works during animation, so a big plus there, by just totally by-passing the Tightening and Offset group within the node. So I directly connected the Left and Right Flipping group to the Crossing group and that mostly works.

It does however leave one more problem, while overall it looks pretty good, it’s going from thin to fat in the wrong direction. This is the Left eye, so that needs to be thin/few eyelashes at the start, rather then how it looks now.

I tried the Left/Right option in the node settings, and the above is how it looks set to 0. If I set it to 1, all of the eyelashes just disappear. If that worked I think we would pretty much have a solution.


No, I always make sure to shape it like an eye in every test

I’m not sure how did you get the rotation problem in the first place but here’s the settings I use in the test:


yeah, the tightening and offset settings wouldn’t work in this case because it’s based on the position vector and the deformation happens before the eyelashes are generated as opposed to the curve deform method.


my best guess is that the order of the vertices index in the mesh strip goes in the opposite direction
maybe try adjusting it using the “Scale Gradient” float curve node to something like this

1 Like

Ahh, well that answers that part and it turns out it also solved the bit above it as well. I had values in the Tightening and Offset, likely from first playing around with it before knowing I needed to select the edges on the mesh in a vertex group and pass that to the nodes.
So with those at 0 the rotation problem also went away, which is of course what by-passing that group basically did anyway.

Yup, that worked, so just means a node group per eyelash per eye with manual adjustments. But that’s fine, it animates, it follows the bones/controls as per the rest of the eyelid and I can still use the group controls to change eyelash resolution, spread, thickness, etc, etc.

So I just need to fully apply it all to my main character/rig and test it all out, but at this stage it all seems doable.

Thanks very much, cheers.

That’s the unfortunate part, at the moment we can’t control something like float curve nodes from outside.
And the “Left & Right Flipping” also cannot be used since it uses the same method as the tightening.

Good luck with your animation!
I’m happy to help!
and sorry for my often late responses

I knew it was too good to be true, there just had to be something to mess things up and it seems I’ve now found it.

The issues seems to be with armatures.

In the image above, I’ve just marked a few edges of a simple sphere, applied the node group and then rigged the sphere with a single bone armature (as a stand in for a whole character rig).

  1. On the first left most eyelash, you see the default base object. Think of this as the rest pose of the character.

  2. On the middle eyelash, I selected the armature and in OBJECT mode, rotated it. The eyelashes fully rotate with it, as in they continue to point outward the same amount as they rotate around.

  3. On the right most eyelash is where we have the problem. In this case I entered pose mode and rotated the bone (much like one would rotate a character control, where its the weighted vertices that are now rotated. All vertices of the sphere are fully weighted to the armature/bone).

As you can see, while I rotated it the same amount as the middle eyelash, the right one doesn’t actually move/rotate the eyelashes with the sphere, instead they keep pointing in the original direction.

That’s fine for a eye blink where the head didn’t move (which was the only test I had done so far), but the moment I move/rotate the head in pose mode, all the eyelashes are going to end up sticking inside the eye.

Any idea if there’s a solution to this problem?

Would you mind sending the .blend file shown in the screenshot? I’m a bit lost here, to be honest :pensive:

After checking the .blend file, the problem was somewhat obvious.
The problem lies in how Blender works and how the eyelashes were created

So, the eyelash strand was, by design, created to point to the -Y direction. This makes sense with the curve deform method in mind, that’s why I created the eyelashes that specific way.

And the rest is how Blender does rotation and how Blender’s Armature/Bone works.
I can give you an oversimplified explanation about this if you want.

In conclusion, I would say that this problem is neither Blender’s nor the Eyelashes’ fault since that’s just how Blender works and how the Eyelash was created.
I’m sorry I can’t really help you here.

That’s what I was afraid of, my minor theory was that maybe surface normal’s could be used to keep the eyelashes pointing in the right direction, but I have no idea how or even if that sort of info can be accessed as part of a armature deform and passed to geometry nodes.

My revisit of other options still don’t look all that workable, so I’m now somewhat stuck.

I know there are some extremely good people with geometry nodes on this forum that may know of a solution or confirmation that it’s just not going to work at all, but that would require sharing that blend file with your node group (well most of it, I removed the parts that didn’t work for mesh strips), however I don’t want to do that unless you are OK with it.

Why not just convert/apply the geonodes setup into a real object? Maybe I am misunderstanding the issue, but do you need the eyelashes created dynamically at all times?

2 Likes