If this is your first visit, be sure to
check out the FAQ by clicking the
link above. You may have to register
before you can post: click the register link above to proceed. To start viewing messages,
select the forum that you want to visit from the selection below.

Faking hair collision in 2.5x & beyond

Since actual particle hair strand collision doesn't seem to be on the core developers' menu any time soon, and recent community efforts (yay!) are still in the works, I decided to try my hand at a reasonable fake method I had in mind. From the attached .blend's text file:
_____________________

Because Blender 2.5x and beyond does not include reliable collision in its Hair Dynamics, I've developed a workaround using the Cloth sim, which does have decent collision if set up properly.

The basic premise is to not have the hair collide, but rather have the hair emitter mesh collide, by turning it into a Cloth object. The hair emitter mesh is divided into long strips that respond much as fat flat hair strands would, and the particle strands emitted by the mesh follow the motion of the emitter to a large degree. The particle strands do not actually collide, though that's what it looks like is happening -- in other words, it's a fake, but a pretty good fake.

In this prototype, the Cloth emitter is designed & specified to move somewhat like hair, and the hair is designed to have only a minimal response to the motion via Hair Dynamics. The majority of hair strand motion is from the emitter as Cloth, but the small amount of Hair Dynamics used makes sure it has some natural motion on an individual strand level as well. Turn off Hair Dynamics during playback & you'll see how much it adds to the illusion.

It took me a while to devise the parameters for the Cloth emitter and the Hair Dynamics. The values I'm using are model-specific, so be prepared to experiment with values on your own models. The general idea is to use fairly high values for Mass and structural stiffness/bending, The collision object values are important as well.

Areas to experiment beyond the physics simulation values include emitter mesh density, number of emitter "strips," particle strand density, use of particle Children, and of course how to use this on an actual character model by building a "wig" made of cloth strips that emit hair.
__________________________

One method of building a "wig" is to create a continuous mesh to begin with, then after it's been given a basic shape, delete alternating rows of faces to form the strips. You can apply the particle hair system either before or after this step, but as usual any final "grooming" in Particle Mode will have to be done on a finalized emitter mesh.

Ok, this is looking pretty awesome. I was wondering if you could use cloth to simulte hair dynamics. Obviously, cloth isn't hair, but you should be able to get some reasonable fakes going on. At least there is a possibility to control the simulation with this method.

I'm interested in the use of poly strips modeled into the shape of hair you want, then having the hair strands follow those strips.

An issue i see here is that your hair strips have hair growing out of them all the way down the strip. Ideally, the hair would only grow out of the top, then the long hair strands would follow the "flow" of the hair strips the length of it. Is such a thing even possible?

This guy is using maya obviously, but his workflow and results bring up some interesting ideas.

On his showreel, there is a girl character near the end that shows what appears to be hair strips being simulated, not hair curves. Perhaps the hair curves are driving the strips, but a cloth sim could produce similar results. I don't know if he's rendering the strips themselves or what, but it defintely has me interested, since his rendered results are impressive.

Secondly, he's painting curves on a mesh, which makes me think you method could work well, since there are similarities. But your method is likely to break with longer hair, since long strands are not likely to work well with your current approach.

Hmm, this individual has been doing some research on this topic as well. I'm linking it here for everyone's reference. Thoughts on this method? There is some very strange rendering behavior on the scalp that he doesn't seem concerned about, but otherwise, some promising results.

Hi, fahr. Thanks for your feedback. I agree that it's not anywhere close to a total solution, hence the "proof of concept" label, just a test to see if the "emitter as collider" idea is feasible. I didn't spend a lot of time trying to create a practical hair mesh using this idea, since any such solution would be very model-specific, from the emitter geometry to the final parameters. But the idea of using the emitter mesh to move the hair strands seemed worth looking into, not sure that's been considered before.

I had also thought of using the Cloth-based emitter as a means of determining strand response more directly, like a "hair guide," but don't have the in-depth knowledge how the strands and Hair Dynamics operate, so I'll have to leave that to others. Hair Dynamics is based on Cloth sim physics, but I only know that subject from user experience, so I tend to think about methods that use existing tools rather than re-making them. Workarounds rather than fixes .

I like the force-field approach, I've seen it described a number of places, and see it as another kind of "fake," but a good and useful fake. A couple of fellows in this thread (Helmut S. and Rhynedahll) are working to incorporate true cloth collision into the hair strands code, with some success I hope to have time to test out soon. The hair collision issue is being attacked on a number of fronts, and likely any practical situations will use not one but many workarounds until it gets addressed wholeheartedly by the dev team or the free-lance code work gets fully integrated. If animating the hair emitter mesh can be useful for any particular case, then this initial test illustrates that at least it can be done, and to some degree how the strands react to that motion.

Side note: When I posted this thread it seemed more useful in Support, where a lot of people go to find solutions, but if the admins feel it belongs more properly in the Blender Tests section, by all means move it there.