Introduction
Blender’s Set Hair Curve Profile, introduced in Blender 3.5, controls hair strand thickness by setting the radius attribute of hair curves. It defines strand thickness at the root, tip, and along its length, enabling realistic tapering and volume. This node group, part of Blender’s hair asset library, is essential for natural-looking results, providing cross-sectional shape and thickness for rendering in Cycles and Eevee. It offers convenient controls for customizing strand thickness variation, saving artists from manual radius assignment or heavier modeling.
Compared to the basic Set Curve Radius node, which lacks built-in profile shaping, Set Hair Curve Profile offers more options for radius shaping along the strand. Curve to Mesh conversion, another approach, creates mesh geometry, but is less efficient and unnecessary for rendering hair in Blender. Set Hair Curve Profile adjusts the internal hair radius attribute without converting curves to mesh.
Set Hair Curve Profile is the recommended method for controlling strand thickness in Blender’s new hair system, offering ease-of-use and flexibility beyond basic radius nodes or manual modeling.
Understanding Inputs
The Set Hair Curve Profile node group has several input sockets that let you customize the hair thickness profile. These inputs control how the radius (thickness) is applied and shaped along each curve. Below we break down each input socket and its role:
Geometry Input Socket
This is the standard geometry input for the node group – you plug in your hair curves geometry here. In practice, this will be the stream of hair curves you are grooming (for example, the output from a Generate Hair Curves or Interpolate Hair Curves node in your geometry nodes tree). The node will process these curves and set their radius attributes according to the profile. Typically, the geometry will be a Curves data type (the new hair curves object in Blender), but it can work on any curve geometry. (It’s worth noting that although designed for hair, this node group “can be used with all kinds of curves” – not just hair strands
There are no special settings needed for this socket; just ensure your hair curves are connected so the node can modify them.

Replace Radius Input Socket
The Replace Radius input is a boolean toggle that controls how the node applies the new radius. When enabled (true), it replaces the original radius with a new base value from the Radius input. When disabled (false), it preserves existing radius values and adjusts them with the profile shape. Enabling Replace Radius is common for newly generated hair curves with default or no radius, allowing the node to assign meaningful thickness. Disabling it is useful for refining or modulating pre-existing radius values. Leaving it false on zero-radius curves may result in no visible effect. For a clean, controlled starting point, enable Replace Radius, unless preserving a prior radius is intended.
Radius Input Socket
The Radius input, a float value, sets the base thickness of hair strands when Replace Radius is enabled. It acts as the root radius or overall scale. If Replace Radius is true, it sets each curve’s starting radius to this value before applying the profile shape. If false, this input is ignored, and existing radii are used. The Radius value is in Blender units.
For real-world scale characters, a Radius of 0.001–0.01 is common for human hair. High values create thick, tube-like hairs, while low values make them nearly invisible. Start with a small radius appropriate for the hair type and fine-tune with profile factors. This Radius multiplies Factor Min and Factor Max to determine the actual radius at each hair end.
Shape Input Socket
The Shape input controls the profile curve of hair thickness along each strand, influencing the radius transition from root to tip. It adjusts the interpolation curve between end thicknesses. The default profile is linear or eased. The Shape input modifies this, similar to a “taper curve” or exponent. A linear shape means even thickness decrease, while other shapes can create rapid tapering or leveling off. It’s similar to the “Shape” parameter in Blender’s old particle hair system.
Increasing the Shape value (positive) biases the profile, making hairs thicker near the root and thinner at the tip. Decreasing the Shape (negative) causes a stronger taper near the root and a gentler slope towards the tip. A Shape of 0 means linear interpolation. Experiment to fine-tune hair looks: a ponytail might need a uniform thickness, while fur might taper quickly. Drive it dynamically or link it to an attribute, but usually, set a number. The node has no built-in sliders as it’s a group, making this Shape value easily adjustable.
Factor Min Input Socket
The Factor Min input, a float, sets the thickness factor at the “minimum” end of the hair curve, usually the tip. It’s the relative radius at the tip, as a percentage of the base Radius. For example, if Base Radius is 0.01 and Factor Min is 0.2, the tip radius is 0.002. Lower Factor Min values make the tip finer, higher values thicker. A Factor Min of 0.0 creates a pointed tip; 0.2–0.3 leaves some thickness for realism. Realistic hair often uses a small, non-zero Factor Min. Setting Factor Min higher than Factor Max creates unusual effects. Factor Min and Max together determine the overall taper.
Blender’s default hair profile likely uses a low Factor Min for natural tapering. A Factor Min of ≈ 0.2 can create a slightly rounded tip. Adjust this value for the desired sharpness. Non-zero tip thickness can prevent rendering issues and aliasing.

Factor Max Input Socket
The Factor Max input, a float, controls the thickness factor at the “maximum” point, typically the hair root. It defines the relative radius at the root as a factor of the base Radius. Usually, Factor Max is set to 1.0, making the root thickness equal to the base Radius. Values above 1.0 thicken the root further, while lower values thin it. For a typical strand, Factor Max is larger than Factor Min. A common setup is Factor Max = 1.0 and Factor Min = 0.0 or 0.2, creating a taper from full thickness at the root to a fine tip.
“Min” and “Max” refer to curve parameter ends, not numerical values; inverting them creates creative effects, but realistic hair uses Factor Max ≥ Factor Min. If both are 1.0, there’s no taper, resulting in a constant radius. To create a taper, set one end lower.
Factor Max controls root thickness ratio, Factor Min controls tip thickness ratio. The node interpolates between these, with the Shape input influencing the interpolation. A large difference between Factor Min/Max creates a dramatic taper, a small difference maintains uniform thickness. These inputs allow precise hair profiles, enabling users to set specific ratios between root and tip thickness.
Understanding Outputs
Geometry Output Socket
The node group’s output is Geometry, consisting of modified hair curves with a new radius profile applied, as detailed on docs.blender.org. In a geometry nodes setup, this output connects to the next node in the hair modifier stack or to the Group Output if it’s the final step. The output geometry includes all incoming curves with their radius attribute adjusted based on prior inputs, without additional output attributes like separate values or masks—it directly modifies the curves’ data.
The node adjusts the .radius attribute on each curve’s control points according to the preset and passes the geometry forward. After the Set Hair Curve Profile node processes the data, subsequent nodes or the renderer use these radius values. For instance, feeding the output into an Interpolate Hair Curves node allows child hairs to inherit the radius profile from guide hairs for consistent thickness, while rendering in Cycles uses the radius for curve segment shading, and in Eevee, the Hair Shape may need setting to Strip or Thick to visualize the radius. The Geometry output represents hair curves with the thickness profile applied, prepared for further grooming or rendering.
Faster Hair in Blender using PixelHair 3D Hair Asset Collection
Blender’s geometry nodes allow detailed hair grooming, such as using the Set Hair Curve Profile preset to adjust strand thickness, but creating a full hairstyle from scratch is time-consuming. PixelHair, developed by Yelzkizi (yelzkizi.org), offers a solution with pre-made, high-quality 3D hair assets for Blender and Unreal Engine. These assets, featuring pre-groomed hairstyles as hair curves or particle hair, enable artists, studios, and agencies to quickly apply professional-looking hair to characters, bypassing hours of manual grooming.
PixelHair’s primary benefits are speed and consistency, streamlining workflows by eliminating the need to build complex hairstyles from scratch (yelzkizi.org). It provides pre-styled assets with realistic details like shape, strand thickness, volume, and shading, optimized for studio-quality results and tested for realism. These assets save time for those on tight deadlines and are fully customizable—users can tweak materials, shapes, or underlying curves after application, balancing rapid setup with artistic control.
PixelHair complements rather than replaces Blender’s geometry nodes. Currently built with Blender’s traditional particle hair system, PixelHair assets arrive with optimized thickness profiles baked in, reducing the need for nodes like Set Hair Curve Profile. However, users can still apply geometry nodes, such as adjusting strand thickness, as the assets remain compatible with Blender’s tools, offering a solid baseline for further grooming.

Yelzkizi plans to integrate geometry-nodes-based hair into PixelHair (yelzkizi.org), with a version in development that will use Blender’s new Hair Curves system. This will allow easier node-based tweaks, like adjusting thickness with Set Hair Curve Profile, and ensure compatibility with future Blender updates as the particle hair system phases out, merging PixelHair’s quality with procedural flexibility.
PixelHair also supports Unreal Engine workflows, aiding game studios and animators with assets including scalp meshes and strand data exportable as Alembic grooms or cards/meshes (yelzkizi.org). Compatible with MetaHuman characters, PixelHair ensures seamless Blender-to-Unreal transfers, with optimized density and LODs for real-time rendering and physics. This cross-platform utility speeds up hair workflows for projects like game cinematics or AR/VR, maintaining quality across platforms. The forthcoming geometry-nodes integration will further enhance its adaptability for procedural artists.
(PixelHair is just one example of leveraging asset libraries to speed up hair creation. Even if you prefer to groom manually, studying PixelHair assets can provide insights into effective node setups and hair settings used by professionals.)
Frequently Asked Questions (FAQs) about the Set Hair Curve Profile Node
- I used Set Hair Curve Profile, but in the viewport my hair still looks like thin lines (or not visible). Why can’t I see the thickness?
Blender hair curves appear thin in Solid view and Eevee preview. Fix in Eevee: set Curves > Shape to Strip or Thick in Render Properties > Curves to render hair with correct radius from Set Hair Curve Profile. Without this, hairs are invisible. Check Radius and factor aren’t too small. Affects Eevee and Workbench; Cycles is fine. - What’s the difference between using Set Hair Curve Profile versus just a Set Curve Radius node to thicken hair?
Set Curve Radius sets radii but needs manual tapering. Set Hair Curve Profile from Blender’s Essentials is hair-optimized with built-in tapering via Shape/Factor controls. Use it for quick hair tapering; Set Curve Radius for uniform/custom radii. - How do I adjust the thickness at the roots versus the tips of the hair using this node?
Here’s a shorter summary of the Set Hair Curve Profile node in Blender:- Radius: Base strand thickness.
- Factor Max: Root thickness multiplier.
- Factor Min: Tip thickness multiplier.
- Shape: Taper style (0 = linear, >0 = slow drop, <0 = fast drop).
- Workflow: Set Radius, adjust Max/Min, tweak Shape.
- Example: Radius=0.01, Max=1.0, Min=0.1 → root=0.01, tip=0.001.
- What exactly does the Shape input do, and how should I use it?
Shape in Set Hair Curve Profile adjusts taper:- 0: Linear root-to-tip.
- >0 (e.g., 0.5): Thick longer, sharp tip drop.
- <0 (e.g., -0.5): Quick root drop, thin tail.
- Range ~ -1 to 1; 0.5 is natural. Tweak from 0 for realistic, nonlinear taper.
- I added the Set Hair Curve Profile node group, but it doesn’t seem to be changing my hair at all. What could be wrong?
If you’re not seeing any effect, here are a few things to troubleshoot:If Set Hair Curve Profile has no effect, check:- Replace Radius: Off with radius 0 → no change; enable it or set initial radius.
- Connections: Node must link to output or next node.
- Values: Subtle/uniform settings may hide effect; test Max=1, Min=0.
- View: Use Material Preview/Rendered (Eevee needs Strip).
- Stack: Place correctly in active modifier.
- Defaults: Matching current radii hides change; test extremes.
- Common fixes: toggle Replace Radius, ensure connection. Then it works.
- Think harder
- explain Replace Radius
- hair curve tools
- more concise
By going through these steps, you can usually identify the culprit. A lot of times, it comes down to that Replace Radius toggle or the node not being in the execution path. Once corrected, the Set Hair Curve Profile should definitely alter your hair – it’s a straightforward node group, so if it’s properly applied, any change in settings should reflect in the hair geometry immediately.
- Can I use Set Hair Curve Profile on curves that aren’t hair, say a regular Bezier or curve object to give it thickness?
The Set Hair Curve Profile node works on any curve, not just hair. It adjusts the radius of curve points, enabling tapering. While used for hair, it can taper any curve. For visibility outside of hair, the curve must be beveled or converted to a mesh. - Does using Set Hair Curve Profile have any impact on performance? Is it heavy to use on a lot of hairs?
The Set Hair Curve Profile node is computationally light, simply setting a radius attribute. It’s efficient even for many hairs, and doesn’t significantly slow down rendering. Performance issues are more likely from high hair counts or other nodes, not this one. - At what point in my hair grooming node chain or modifier stack should I use Set Hair Curve Profile?
Hair thickness is set either early on guide hairs or at the end. Setting it early allows children hairs to inherit the thickness. Setting it at the end ensures consistent thickness after all modifications. Blender’s default fur setups include this node at the end. Place it before rendering. It affects thickness only, not shape. - How can I export or use the hair (with this profile) in other software or game engines?
To export hair with Set Hair Curve Profile’s thickness:- For engines with hair grooms (Unreal): Export as Alembic (.abc) to preserve radius.
- For others: Convert to mesh (Curve to Mesh) or bake textures.
- Alembic maintains dynamic curves; mesh is for static cards.
- Optimize hair count for performance.
- The node’s profile is baked into the exported radius.
- Does the Set Hair Curve Profile node affect physics or simulations of the hair, or is it purely visual?
The Set Hair Curve Profile’s radius is visual, not physical. Blender simulations ignore it. Game engines may use it for collision approximation. It only affects appearance.

Best Practices for Hair Profile and Grooming Workflow
To get the most out of the Set Hair Curve Profile preset and maintain an efficient, high-quality hair grooming pipeline, consider these best practices:
- Use Realistic Scale: Work with your scene scaled correctly. Hair radius values are small – for a life-sized character, start with a base Radius that makes sense (e.g. ~0.005 for human hair). This ensures your hair isn’t unnaturally thick or thin. Consistent scale also helps lighting and shading of hair.
- Replace Radius when Starting from Scratch: If you generate new hair curves (which often have default zero or uniform radius), enable Replace Radius in the node and set a reasonable Radius value. This gives all strands a controlled starting thickness. Only skip Replace if you intentionally layered radius from a previous node.
- Tweak Factor Min/Max for Taper: Aim for Factor Max ≥ Factor Min. Typically use Factor Max = 1.0 (full thickness at root) and choose Factor Min based on how pointed you want tips (0 for a sharp point, 0.2–0.3 for a subtle taper, etc.). For most human hair, a small non-zero Factor Min avoids hair ending in razor-sharp points (which can look frizzy or disappear).
- Leverage Shape for Natural Falloff: Adjust Shape after factors for natural thickness distribution. Positive Shape (0.5) is common; higher values for quick tapers, negative for unique effects. Small changes improve realism.
- Preview in Rendered Mode: Always check your hair in Cycles or Eevee rendered preview as you adjust the profile. This shows the true appearance (accounting for lighting and shader). The viewport in solid mode won’t reflect thickness. By doing frequent test renders, you can spot if the hair looks too coarse or too fine and adjust Radius or factors accordingly.
- Combine with Other Grooming Nodes Thoughtfully: Place the Profile node after major deformers but before Interpolate for consistent thickness. If applied after interpolation, ensure all strands get it. Use one profile per hair system for uniformity.
- Don’t Stack Multiple Profile Nodes on the Same Strands:One application is usually enough; using it twice without purpose may overwrite or compound effects. For varying profiles (e.g., vellus vs. long hair), split into separate hair systems or use selection attributes to apply different factors within one node group.
- Optimize Hair Count vs. Thickness: Balance density and thickness by increasing hair count or strand radius. Avoid overly thick strands; adjust thickness mainly for fine-tuning.
- Keep Node Trees Organized: If you’re building a complex hair geometry nodes setup, label the Set Hair Curve Profile node group clearly (it’s already named, but if you tweak it or combine it, name frames or reroute). This makes it easier to identify the profile step in your grooming pipeline. A clean node tree helps in troubleshooting and iterating.
- Test with Different Lighting: Hair thickness can appear different under various lighting (backlighting might make thin tips almost invisible, etc.). After setting up the profile, test render your character in a bright light, a rim light, etc., to ensure the taper is visible and pleasing. Adjust Factor Min if the tips disappear too much under backlight (slightly thicker tips can catch highlights).
- Use Consistent Units Across Assets: If you’re a studio or team, decide on typical hair profile values for characters so they look consistent. For instance, you may decide all human characters use base Radius ~0.005 and tip factor ~0.1 for fine ends. This avoids one character having wildly thicker hair than another unless stylistically intended. Document these or create your own presets (you can save node groups or modifier presets).
- Integrate with Rendering Strategy: If using Cycles, know that it renders hair as true strand primitives – the profile will directly influence shadowing and shading. If using Eevee, remember to set Strip shape. Also, hair shader (Principled Hair BSDF) works well with varying radius; thinner tips will naturally appear softer. No need to do anything special except ensure your profile is applied.
- Backup and Version your Grooms: Hair grooming can be trial-and-error. Save different versions or use Make Instances Real on your hair modifiers to cache a result before trying big changes. While the profile node is not destructive, if you’re combining it with heavy sculpting or manual edits, having backups lets you revert if needed.
By following these best practices, you’ll maintain precise control over your hair profiles and integrate the Set Hair Curve Profile node smoothly into your workflow – whether it’s a single character’s hairstyle or a large-scale production with many hairstyles. The goal is to achieve the desired look efficiently while keeping your setup manageable and performance-friendly.

References & Additional Resources
- Blender Manual – Set Hair Curve Profile: Official documentation on this node group, describing its inputs and usagedocs.blender.org.
- Blender 3.5 Release Notes – Hair Assets: Introduction of the new hair grooming node assets in Blender 3.5, including Set Hair Curve Profile, which made hair creation “out-of-the-box” easier.
- Blender DevTalk Forum – Procedural Hair Nodes (Blender 3.5): Developer Simon Thommes’ post about the hair node group assets and their design goalsdevtalk.blender.org – an insightful look into how these presets were intended to replace the old hair system.
- 80.lv Article – Hair Grooming Workflow Example: “How to Sculpt & Texture a Scary Humanoid Creature” – a tutorial where the artist uses Blender’s hair nodes. Notably, they “apply a Set Hair Curve Profile to define the thickness and shape, then Interpolate Hair Curves to populate the hairs”80.lv. This real-world example can help you understand node order and usage in practice.
Recommended
How do I render from a specific camera in Blender?
Blender Camera Angles: Capturing the Perfect Shot with The View Keeper
How do I lock a camera to an object in Blender?
How to Save Blender Camera Settings: Complete Guide to Managing and Reusing Camera Views in Blender
How do I make the camera look at an object automatically in Blender?
Can you animate multiple cameras in one Blender project?
How do I add a background image to the camera view in Blender?
Unlocking Cinematic Power: The Best 5 Blender Camera Add-ons to Elevate Your Workflow