Page MenuHome

Creates a hair system with hair guides derived from mesh objects.
Closed, ResolvedPublicPATCH


Project: Blender Extensions
Tracker: Py Scripts Upload
Blender: 2.66
Category: Object
Python: 3.2
Script name: HairNet
Wiki page:
Local Download:

Author(s): Rhett Jackson
Status: Open

HairNet lets users create simple meshes to define the basic shape of a hair system. If a simple mesh plane is used as a starting point, one edge of the plane is marked as a seam. This edge will be the root from which all hairs start and each edge loop that intersects it will become a hair guide. Multiple meshed can be used as long as the number of vertices in each "guide hair" in every mesh is the same.

Event Timeline

Rhett Jackson (jandals) attached 1 file(s): Unknown Object (File).
Rhett Jackson (jandals) attached 1 file(s): Unknown Object (File).May 21 2013, 7:37 PM

Version 0.2 does some extra checking so that HairNet can manage multiple hair systems, each derived from a separate mesh object.

Rhett Jackson (jandals) attached 1 file(s): Unknown Object (File).Jun 12 2013, 11:36 PM

Version 0.4 adds a second button aimed at creating hair systems from an object containing only edges (specifically, a ZBrush fiber mesh). Hair guides could be created backwards and HairNet doesn't account for that yet,

Rhett Jackson (jandals) attached 1 file(s): Unknown Object (File).Jul 2 2013, 12:01 PM

Version 0.4.5 adds a button for converting curves (without bevel objects) to hair systems.

Hi Rhett,

I'm using Hair Net for an upcoming character creation course over a Blender Cookie. It's a very powerful tool already, fantastic job! I'm running into a wonky issue though:

Whenever I add a second hair system, the particles/points of the first hair-net-generated hair system are all moved slightly, despite touching every one in particle edit mode to "lock" them in place.

Thank you khtrammell. The problem was created by having the script disconnect and then reconnect the hair system while moving all the hair vertices into place. I was able to observe the same effect manually by clicking (twice) the "Disconnect Hair" button which appears when combing hair in Particle Edit Mode. It appears to have been an unnecessary step so the script no longer does it.

Version 0.4.5 required users to manually select a particle system that matched the name of the mesh object being used as a guide. Version 0.4.6 will find and use a matching particle system for you.

@Rhett Jackson (jandals) -

Oh yeah, 0.4.6 works like a charm! Thanks so much for the quick fix. I'm excited to showcase the tool in my new course.

@Rhett Jackson (jandals)

Thanks a ton for fixing the bug! It’s been working great ever since.

I have been very EAGER to explore the workflow that’s now possible thanks to Hairnet. I know a lot of studios employ this method where modelers build a hair style with geometry and hair is simply generated from it. It’s great that Blender can finally do this. As I continue to work extensively with your add-on I’m developing some ideas that could make the "Hairnet workflow" much more efficient. Maybe we could work together to level up the add-on! My Hairnet workflow thus far looks like this:

  1. Model hair geometry (sheets, fibers, or curves)
  2. Generate the hair from geo to test the final look.
  3. Tweak numerous hair settings
  4. 99% of the time deciding it’s not quite right, deleting hair, modifying geometry, repeat

It only took a couple redo’s to realize that the majority of default hair settings never work, and remembering/re-imputting them in each time was a big hinderance. So I began to maintain a quick script for ‘saving’ the settings I tweaked each time. Now when I generate the hair I can simply click ‘run script’ and the hair updates with my ‘preset’. That worked well enough yesterday.

Today, I’m realizing that in order to really fine tune a hairstyle with Hairnet, I need to use multiple geometry pieces which usually require slightly different settings (clump, roughness, etc). Also, I’m finding that modeling a low-res piece is easiest to manage for tweaking yet when I generate hair from it, subdividing the geometry produces more appropriate numbers of strands. Therefore I’d like suggest a wish list to make Hairnet a little more fully-featured:

  1. Ability to store particle hair settings in presets
  2. Tag each hair proxy object with a preset. In the Hairnet UI perhaps there could be a small info section displaying the tags of the active object.
  3. Automating Hairnet generation to allow multiple selected hair proxy objects to generate their own particle systems with settings according to their tagged preset.
  4. A checkbox for subdividing the hair proxy(s) before generating hair from them. In order to maintain their editability at thier low resolution I recommend the operator duplicates each proxy first, adds and applies a subsurf modifier, generates hair, deletes duplicates.

What do you think? If you don’t have the time or don’t share the interest, I certainly understand.


@Kent Trammell (khtrammell)

I am grateful for the feedback you have from using HairNet in a workflow that demands a higher level of performance than I can test for. I'd enjoy working on the script to make it more useful and your input is will be very meaningful.

Here are my first thoughts on your wish list items:

  1. Storing hair settings in presets - I agree that this would be useful. As it is, I am not sure what means I have to store a template within the script. In my mind, Blender already has a way to save hair settings in a blend file so I imagined that the easiest way to do what I think you are describing would be to maintain a "hair library" blend file. Using Blender's existing capability would involve Appending the desired hair preset from another blend file, then renaming the hair system's settings to match the name the HairNet looks for. It would be sort of like a settings transplant.

I would like to see the "quick script" you are using so I can get a better idea of the work it is doing for you. That'll help me figure out how much I can do within HairNet itself.

  1. Tag each proxy object with a preset - It has taken me a while, but think I see where this is going. See #3
  1. Automate hairnet generation - Yes! After this last revision, HairNet is a bit smarter about connecting a proxy object with its hair settings. It should be quite easy to update it further so that all proxy objects can be processed at one time.

In my mind, tagging them might end up being redundant. That will become clear as we correspond a little more. I can see the usefulness of a workflow which lets you assign a "curly bouffant" hairstyle to proxy object #1 and make that association stick so you don't ever have to redefine a hair style's settings. I *think* that "transplanting" hair settings as I mentioned would achieve that but you would know better than I. If it is necessary to pre-tag objects with a hair style, it ought to be possible. I have done something like it before so HairNet should be able to make a list of proxy-object->hair-style pairs for each object.

  1. Subdividing proxies - Definitely yes. I would really like to be able to do this. Earlier this year, someone made a similar suggestion and I don't yet know a reasonable method to approach it. One question I have is whether it would be helpful or harmful to have it subdivide in only one direction (ie. to multiply the number of guide hairs but not the number of points in each hair). Using a subsurf modifier would multiply geometry in both directions and doubling the number of control points in each guide hair may not always be desirable.

Those are my first thoughts. I hope we can keep this going and I'll look forward to hearing more from you either here or via email.


Great tool!
I found this script for maya and i was impressed when i found HairNet too.

@Rhett Jackson (jandals) could we improve the HairNet based on Maya's script?
I mean this:

  1. Make Particle system at the same mesh. Without a head object or any other reference object. As in Maya's script you can see how they edit polygons.

This will solve some issues as we can use the same hair on a polygon and we don't need to move hair's orgin.
Also we can put a integer value how many hairs will be generated on the mesh. Sometimes it;s ok to have 3 hairs and sometimes it's ok to have 30 hairs.

  1. Make distribution with some thickness

You can see on side view a bit thickness.

  1. Make different types of distribution.

Also, could you put your work at github? I could help you with some programming and could make pull requests.
Also, what's license of your script?


You can also see some examples maya's script here .
But sorry it's in russian.

@paul geraskin (mifth) Thanks for making suggestions and sharing the examples. There are a lot of good ideas there.

I hadn't considered attaching the generated hair to the proxy object and I can see how useful it would be. I have added that as an option so users can put the hair systems on either the proxy objects or on a separate "head" object.

I had always intended that the script would be GPL but I haven't made it official.

When I get the code on GitHub, I'll get in touch with you. Thank you for offering to help out.

@Rhett Jackson (jandals) Thanks for answering. Waiting you on Github.
I'm certanly sure that we can make the same quality tool as Maya's one. You already did good job!

Made a couple of quick changes to restore features:

  1. Hair can be created from disconnected meshes in a single object.
  2. Returned to a more Blender-like interface. The last object selected receives hair from proxy objects.

Some selections will cause errors when HairNet is not used as intended. It still needs a way to handle them without failing.

Hi there, hope this is a good place for a comment/bug report. Is this addon still being supported? just curious since its useful...

The current version doesn't seem to work with fibermesh from ZB. This worked with past versions (quite a while ago).
I'm selecting the fibermesh object first, then the hair emitter, then clicking 'Add hair from Fibers'. I'm using the latest from

line 591, in invoke
    return self.execute(context)
line 507, in execute
    hairGuides = fibersToGuides(hairObj)
NameError: name 'fibersToGuides' is not defined
location: <unknown location>:-1

Thanks for reporting, Frederick. I'm glad to hear HairNet is useful to you. It sounds like I broke a connection to one of the helper functions. I'll try to find time this week to sort that out.

I fixed the error Frederick reported. Converting from fibers should work like it used to do.

Tried the latest and my initial test seems to work! Thanks!


Found a couiple of issues:

Advanced option not available: Clicking the advanced hair checkbox before the initial combing will make the guide hairs lose the fibermesh styling. However, the initial combing makes the advanced option is unavailable.

Switching to interpolated children mode will make the guide hairs go a bit crazy.

Those are both properties of Blender's hair system. I don't think the addon can do anything about them.

I think that combing overrides the settings available when "advanced" is checked so Blender disables it when you manually edit particle hairs.

Interpolated child hairs follow the guide hairs loosely because they are filling-in the spaces between guides rather than just following their parent hair.

Where is the best place to get the latest version?

The "Local Download" and the external link to should both lead to the most recent version.

hi, is this still valid? @Rhett Jackson (jandals)

As far as I know, the plugin still works. I haven't tested it in a while so I'll have to find some time to make sure. The instructions in the wiki page and the addon itself should still be valid.

hi @Rhett Jackson (jandals) If your interested I'm putting some addons from the tracker into contrib, maybe you could double check this is still working ok?

Thanks for your interest, Brendon. I have done a run-through and it appears that Everything still works fine.

Brendon Murphy (meta-androcto) changed the task status from Unknown Status to Resolved.Apr 17 2017, 4:52 AM

@Rhett Jackson (jandals)
hi, I've committed this to addons contrib so it can be a part of the 2.79 addons contrib pack, sorry for the late run.
It's possible we may change how contrib works in 2.8 series so I cannot guarantee the addon inclusion past 2.79 & the last of the series.
If you have any updates please post to this task or create a new task.
Thanks for your participation & welcome. We look forward to seeing you again in the 2.8 series.

user1 (user1) added a subscriber: user1 (user1).EditedDec 10 2017, 2:37 PM

I tried to use this amazingly well working addon to convert makehuman's character eyelashes (alpha textured planes) into real hair, and it did the job as expected, but when i pose the eyelid, the created hair doesn't follow. I pushed the particle system in front of the armature modifier, but that didn't do the trick. Checking "use modifier stack" in the particle settings makes a real mess, breaks the hairnet result. Is this a bug? My only, cumbersome way to circumvent this is described in this video:
MH eyelashes made real

Hi Rhett this addon is so great!!! it allows a funcionality that particle hair really needs to incorporate. It will be such a contribution to be able to use it in 2.8 with eevee hair render. If you don't mind me asking, are you considering to upgrade it to 2.8 in a near future? thanks a lot =)

Hi Rhett this addon is so great!!! it allows a funcionality that particle hair really needs to incorporate. It will be such a contribution to be able to use it in 2.8 with eevee hair render. If you don't mind me asking, are you considering to upgrade it to 2.8 in a near future? thanks a lot =)

Hi Eduardo. Thanks for the comment. I would like to make sure that HairNet works in 2.8 but, as you may have guessed from my delayed reply, I haven't got much time to commit to it right now. I wish I had a timeline for keeping it current, but I can't predict what it'll take to update to 2.8.

But updating HairNet is on my mind and I'd like to add a few features to it. But I haven't yet got a plan to make it happen.

Yuriy (YuriyKozachok) changed the task status from Resolved to Unknown Status.Feb 1 2019, 12:55 PM

Hello, dear Rhett Jackson (jandals)!
I really need a working version of the add-on for Blender 2.8.
Is it planned to be updated and when ?

Waiting for an answer, Yuriy.

Brecht Van Lommel (brecht) changed the task status from Unknown Status to Resolved.Feb 1 2019, 1:06 PM

Please leave old tasks closed.

I'm a bit new to this, but I sent a pull request with changes I made to make this work with 2.8.

Eduardo (lapiznegro) added a comment.EditedApr 6 2019, 10:59 PM

cool bro thank you both for such contribution =)

Please give version 2.8 if you already have one.
Very necessary!

You can find the changes here :
Please note that I only changed the code to make it work with 2.8, i.e. I just made it stop throwing up errors. I have not fixed any issues that it might of had or added anything.

It sounds like Nicholas and I have done the same job. When I clear out everything that throws up an error, HairNet doesn’t move hair particles into place because of a bug in Blender that has not yet been addressed.

I’ll look at Nicholas’s changes, in case he’s done something different than I have, and I’ll try it with the latest build of Blender, in case the bug we’re waiting on has been resolved.

I installed Nicholas version, it says upgrade to 2.8 required, despite not throwing any errors, hairnet option is not enabled so i can not used it. Time will solve this good day!

I am testing it on 2.9 today. Will be back with feedback. Thanks for making such amazing addon.