HOW TO USE: To begin, you will need your model set up with at least the following: Mirror modifier applied, UV unwrapped, scale and rotation applied. Make sure the UV map has no overlapping faces; if it does, simply create a new secondary UV map with no overlapping faces and use that for the curves. The quality of the UV unwrap doesn't matter much, as long as it has no overlapping faces. Make sure NOT to have "Use subdivision surface" enabled when UV unwrapping. This will break everything. I have no idea why. Just don't do it and you should be fine. Having the model rigged isn't strictly necessary, but can be useful to make sure everything is working. The same can be said for texture painting. Start by appending all the needed nodes from the "RuHairNodes.blend" file. This can be found under File > Append > (Path to File) > RuFurNodes.blend > NodeTree. Append all node trees. With your character's body selected, add in a hair system with Shift + A > Curve > Empty Hair. Without clicking on anything else, immediately go into sculpt mode. With the "Add" or "Density" brush selected, in the top bar you should see "Curve Shape". Click on it, and set the "Points" value to something modest: 4-5 usually works for shorter hairs, might want to go to 8 or 10 for longer hairs. Let's go with the default 8 here. Higher values give you more control over your hair shapes, but also result in a denser mesh for physics calculations. While you're here, take the opportunity to set the hair length to something that makes it easily visible. You can adjust it later if need be. Add in a few hairs; just 5 or 6 for now, they're just to make sure things are working as we go. Next, head over to the modifiers panel (your new curves object should still be selected, but if it's not, select it first) and REPLACE the existing "Surface deform" node tree with a "Hair Scatter" node tree. You should see the hair controller and all it's options pop up. You'll need to enter a few pieces of information into the boxes marked with an "*" before anything happens. Under "Surface Object", add the object/character your hair curves are being emitted from. Under "Surface Object UV Map", enter the name of the UV map you're planning to use for curves. By default this is set to "UVMap", if you've named yours something else you'll have to type it in manually. This won't auto-fill for you, but don't be worried about that; just copy-paste the name of the UV map from the character and paste it here and it will work. If done correctly, you should now see a couple of hairs scattered around each original hair. You can now play with the options to see what they do, but for a quick explanation: "Hair Thickness" is the physical size of each hair. "Child Hairs" is the number of times each original hair is duplicated/scattered. "Scatter Radius" controls how far to scatter each hair. Scattering is done in 3D space, in a circle tangent to the surface the hair was emitted from. "Scatter Seed" lets you change the random seed used to scatter hairs. Clumping Panel: "Clumping" will make all the duplicate hairs meet at the tip of their nearest gide curve. "Clump Shape" Changes where along the curve the clumping starts. "Fake Guide Curves" Allows you to use generated child curves as new guide curves. The higher the value, the higher the ratio of guide curves used, meaning the smaller and more tightly packed the clumps will appear. "Fake Guide Curve Seed" is the random seed used to generate fake guide curves. Appearance Panel: "Interpolation Neighbours" - Child hairs are interpolated to blend in with their nearest guide curve neighbours as they're spread around. This controls how many neighbours to check for interpolation. Honestly, just leaving it at 4 seems to do the best, but it's here if you wanna play with it. "Randomize Lengths" will shorten hairs randomly to add visual variance. "Randomize Length Seed" changes the random seed used to randomize hair lengths "Randomize Endpoint" randomly moves hairs around from the tip, useful to add some "frizz" to hairs. "Random Endpoint Shape" controls where along the curves to start endpoint spread. "Random Noise Strength" randomly displaces curves on a per-point basis, making the hair look more messy overall. "Random Noise Scale" changes the scale of the random noise pattern, low values will give large waves in the fur pattern, higher values will become frizz up every individual hair "Random Noise Offset" shifts the noise pattern. Can be adjusted to fine tune the ranomization effect, or animated to get a sort of "Fur moving in the breeze" effect. "Random Noise - Affect Guides Only" makes noise only affect the parent hairs, keeping clumps of hair cleanly together. Shading Panel: "Transer UVs" - enable to transfer UV coordinates to the fur. Don't forget to create a name for the transferred UV's under the "Output Attributes" panel. Use that name to access the transferred UV's in the fur shader via an "Attribute" node. "Texture UV Map" - The UV map used to control the colours of the fur. By default this is the same as "Curves UV Map", this option can be used if using separate UV maps for body colours and fur connection. "Transfer Normals: - enable to transfer normals to the fur. Don't forget to create a name for the transferred normals under the "Output Attributes" panel. Use that name to access the transferred normals in the fur shader via an "Attribute" node. "Armature" - A reference to the armature is needed to correctly calculate normals. Just enter the character's armature here. Vertex Groups Panel: The vertex group section can be used for finer control over various aspects of the look of your fur. These behave as a multiplier, so for example if your vertex group is simply a weight of 1 for all vertices in your mesh, you'll see no change in behaviour by adding it here. Values lower than 1 can be used to reduce the effect. "Radius" can be used to fine-tune the distance child curves are spread; as curves are scattered in UV space, the distance they travel from their initial guide curve can vary dramatically depending on the shape of the UV map. Use a vertex group here to reign in any that are spreading too far. "Density" can be used to randomly remove some of the curves in an area to thin out the curves a bit, or just prevent curves from spreading where they shouldn't. "Clumping" can be used to control to control clumping more precisely. "Length" can be used to reduce the length of curves; typically it's better to simply do this in the sculpting tools, but this setting can be useful if you decide you want to change the length of your curves after you've set up a physics proxy for them, where changing the length would otherwise require remaking the proxy. "Random Endpoint" can be used to control where endpoint randomization occurs more precisely. "Random Noise" can be used to control where noise randomization occurs more precisely. Physics Panel: "Enable Proxy Physics" and "Proxy" will be explained in the physics section below. "Use Clipping Prevention" can be used to help keep fur from clipping through objects close to the body, for example clothing. Add all clothing objects into a collection and then add that collection here. May not be animation stable, but can be useful for a quick test, and is often sufficient for areas with shorter fur. Optimization Panel: "Resample Curves": Due to current blender limitations, curves-based hair systems don't work properly if there are curves with varying numbers of control points in a single system. Attempting to use such a system will result in very broken behaviour. A common cause of this is switching between "add" and "density" brushes when adding hairs to a surface, as they can have differing settings for the number of points on each hair. Setting this value to a number above 0 will resample all input curves to the number of points given, fixing this issue. Basically, if you find yourself getting extremely broken fur, try fiddling with this and see if it helps. "Use Static Reference": May, in some instances, improve performance slightly. Fairly easy to create to worth a try- duplicate your character's mesh, and remove anything what would cause the mesh to move. Armature modifier, shape keys, subdivision surface modifier, etc. Should be an entirely static mesh. Might be useful on very dense meshes, for example you could use apply a decimate modifier to the static reference mesh to reduce the geometry and make calculations easier, at the cost of some precision. Your mileage may vary, experiment and see what happens- or leave blank, that works too. SETTING UP PHYSICS: Credit to the blender devs for this part, I took the idea of using a proxy for hair physics from them, I just created a hair scattering system that's compatible with it so it could be more easily used for physics. Start by styling the hair you intend to use physics with until it is to your liking. If you decide to change the base structure of the hair this process will have to be repeated, so make sure you like it before starting. For the purposes of this guide, we'll be imagining you're setting up a proper head-hair system with physics, and so it would be named something like "Hair" (as opposed to "tail fur", "neck fluff", etc). Use whatever names you want, just alter them accordingly to keep everything straight. Once it's ready to go, create a duplicate of the hair object and remove the two geometry nodes modifiers from it. It should return back to the base curves. Add in a new Geometry Nodes modifier and add the "Surface Deform" node tree to keep these location curves properly deforming with the mesh. Name the newly duplicated curves object something like "Hair_Location". This will be used to get the proper location for the guide curves at a later step, automatically accounting for shape keys and deformation and the like, so just name it in such a way that it'll be easy to find and tell apart from the original. Hide the original hair curves for now, we just want the "_Location" version. Next, add any new mesh object: A plane or a cube, doesn't really matter. Name it something like "Proxy_Hair". Add a new geometry nodes modifier to it, and enter the "Create Proxy" node tree. Under "Curves Object" enter the "Hair_Location" curves object. Mouse over the geonodes modifier, and press Ctrl+A to apply it. Then immediately add back in a new geometry nodes modifier, and add the "Follow Curves" node tree to it. Add the "Hair_Location" object to the "Curves Object to Follow" Object box. Nothing should visibly change; if it does, try adding the earlier value to the "Points" box, in this case 8. The mesh should now be an exact point-for-point duplicate of the original hairs. This is the object we'll add a cloth modifier to to enable hair physics. Up the "Extrude Thickness" value a little bit to give turn the edges into faces, faces are needed for collision to occur in the cloth simulations. Now add a vertex group to be used for cloth pinning. You can either manually select and enter values for the points if there aren't many and you want finer control, but when here are tons of hairs it's easier to just use a cheaty method: Add a new vertex group, then in edit mode, select all points and assign a value of 1. Call this vertex group something like "Pinning". Next, add a "Vertex Weight Proximity" modifier, and this "Pinning" group into the "Vertex Group" box, and select your character's body/whatever the fur is being emitted from in the "Target Object" box. Switch "Proximity Mode" from "Object" to "Geometry", set the "Highest" value to 0, and turn the "Lowest" value up a bit. We'll fine tune it later. Next, add a cloth modifier to the proxy. In the cloth physics settings, scroll down to "Shape" > "Pin Group" and enter your "Pinning" vertex group. You can now play with the settings in the cloth modifier, as well as the numbers in the Vertex Weight Proximity modifier, to get a look that you like. Once you're satisfied with the behaviour, un-hide your original styled hair object. In it's "Hair Controller" settings, set "Use Physics Proxy" to 1 (In 3.5 or newer this might be a tickbox instead, just tick the box) (the hair should disappear, that's fine), enter your "Proxy_Hair" object in the "Physics Proxy Object" box, (the hair should come back, if it doesn't that's not fine). If the hairs are visibly severely distorted, try setting the "Points" value to the number used earlier, in this case 8. If that doesn't fix it, sorry! Try again from the top of the physics section. Something got messed up somewhere. Now you can go back and tweak the behaviour of the "Vertex Weight Proximity" modifier to get the hair to behave as you like. For longer hair it can be useful to create a temporary mesh out of just the scalp of your character and use that as the proximity object instead, so hair that falls close to the body doesn't get strangely pinned in place. Once you're satisfied with the behaviour, apply the vertex weight proximity modifier. If any roots are not staying attached to the scalp, track them down and manually apply a value of 1 to them. If everything is working, that's it, you're done! Repeat as needed for any other hair systems that need physics. To clean up a bit, you can add your "Hair_Location" and "Proxy_Hair" objects to their own collections. The original "Hair" curves system will be used for rendering and settings that affect visibility, the "Proxy_Hair" object will be used for adjusting the cloth physics settings/baking physics/etc, and "Hair_Location" object just kind of exists, hide it away somewhere and never think about it again.