在 Blender 里做角色头发,手动一根根梳理既耗时又很难保证左右对称。把粒子系统的基础插值和自动随机化能力用足,再配合 AI 生成密度贴图、参考走向甚至曲线数据,可以在较短时间内完成从短发到长卷发的多个版本。整个过程的核心不是完全依赖 AI 一键出形,而是让自动生成提供足够的初始分布,再用手工导向曲线修正轮廓。

粒子系统头发基础:从发射到子级插值
要给角色快速铺满头发,第一步是在物体上添加粒子系统修改器。在属性面板里把粒子类型改为毛发,发射源选择面。父级粒子数量决定导向线密度,而最终渲染用的发丝数量主要来自子级插值。子级类型分为简单和插值两种,简单子级直接在父粒子周围随机分布,容易出现杂乱感;插值子级则会在相邻父粒子之间生成平滑过渡,更适合表现顺滑发丝。
参数方面,hair_length控制总长度,hair_step决定每根发丝的段数,段数太少头发会显得僵硬。根部和尖端半径可以塑造发丝从粗到细的变化。子级设置中的roughness_1和roughness_end_shape分别控制根部扰动和末梢散开程度,适量加大能让头发看起来更自然。想要卷发效果时,可以开启卷曲并把形状设为CURL,再配合频率与幅度控制波浪密度。
下面的脚本创建一个完整的毛发粒子系统,可以直接在 Blender Python 控制台里运行。它会自动设置父级数量、长度、子级数量以及卷曲参数,作为后续微调的基础。
import bpy # 获取当前选中物体 obj = bpy.context.active_object # 添加粒子系统修改器 ps_mod = obj.modifiers.new(name="HairParticle", type='PARTICLE_SYSTEM') psys = ps_mod.particle_system settings = psys.settings # 基础设置 settings.type = 'HAIR' settings.emit_from = 'FACE' settings.count = 15000 settings.hair_length = 0.4 settings.hair_step = 8 settings.radius_scale = 0.8 settings.root_radius = 0.02 settings.tip_radius = 0.005 # 子毛发设置 settings.child_type = 'INTERPOLATED' settings.child_nbr = 80 settings.rendered_child_count = 250 settings.roughness_1 = 0.05 settings.roughness_end_shape = 0.12 # 卷曲效果 settings.kink_axis = 'Z' settings.kink_shape = 'CURL' settings.kink_amplitude = 0.25 settings.kink_frequency = 2
完成基础设置后,进入粒子编辑模式可以进行更直观的造型。梳理工具能把交叉的导向线分开,剪切工具可以剪掉过长的发梢,增长工具则适合补充局部头发。粒子编辑模式里还有一个重要的功能是使用顶点组控制密度和长度,这样可以让刘海、鬓角和后脑勺的疏密分布更符合真实头发生长规律。
导向曲线、顶点组与发型轮廓控制
粒子系统生成的头发如果完全依靠随机分布,很难做出有明确走向的发型。导向曲线就是解决这个问题的关键。在粒子编辑模式下,父粒子本身可以理解为导向线,使用梳理、吸引、膨胀等工具调整它们,子级发丝会自动跟随变化。另一个控制手段是顶点组,可以在权重绘制模式下给头皮不同区域设置不同灰度值,然后让粒子系统读取该顶点组作为密度或长度。
在下方的脚本里,我们为物体创建一个名为HairDensity的顶点组,并用随机数填充权重,模拟自然稀疏分布。实际项目中可以把随机权重替换成根据头皮曲率或 AI 贴图计算出的数值,让头发避开耳朵、眉毛等不该生长的地方。
import bpy
import random
obj = bpy.context.active_object
mesh = obj.data
# 新建顶点组
vg = obj.vertex_groups.new(name="HairDensity")
# 为每个顶点分配随机权重
for v in mesh.vertices:
weight = random.uniform(0.2, 0.9)
vg.add([v.index], weight, 'REPLACE')
在粒子设置中启用顶点组后,找到密度选项并选择刚才创建的HairDensity,这样权重低的位置父粒子会更稀疏。再配合粒子编辑模式的梳理工具,可以先把头发压向后方,再在头顶和发尾局部拉起,形成有走向的基本发型。对于复杂角色,建议把刘海、鬓角、后脑拆成多个粒子系统,分别设置不同的导向和长度参数。
AI 辅助生成密度贴图与曲线走向
AI 在头发自动生成里适合做两类工作:一是根据参考图生成多角度发型设计,二是直接生成可以驱动 Blender 粒子系统的密度贴图或方向数据。以 Stable Diffusion 配合 ControlNet 为例,只需要输入一张头部模型的深度图或法线图,再给出发型提示词,就能得到与头型匹配的正面、侧面和背面头发参考图。这些参考图可以用作造型蓝本,不必直接追求可用的模型精度。
更有数据价值的方法是让 AI 生成密度贴图。密度贴图是一张灰度图,白色区域表示头发更密,黑色区域表示没有头发。把这张图导入 Blender 后,可以通过 UV 坐标把像素灰度读取到顶点组权重,从而让粒子系统自动在头皮不同区域生成不同密度。下面的脚本读取一张已导入的密度图,并按每个顶点的 UV 位置把灰度写入顶点组。
import bpy
obj = bpy.context.active_object
image = bpy.data.images["hair_density.png"]
pixels = list(image.pixels) # 每个像素 RGBA 四个值
width, height = image.size
vg = obj.vertex_groups.new(name="AIDensity")
# 遍历顶点,根据 UV 采样图像灰度
for v in obj.data.vertices:
uv = obj.data.uv_layers.active.data[v.index].uv
x = int(uv.x * (width - 1))
y = int((1.0 - uv.y) * (height - 1))
index = (y * width + x) * 4
gray = (pixels[index] + pixels[index + 1] + pixels[index + 2]) / 3.0
vg.add([v.index], gray, 'REPLACE')
除了密度,AI 还可以把发型图片中的主要发束走势转换为 SVG 路径。把 SVG 导入 Blender 后会得到大量曲线点,可以经过简化后作为导向曲线使用。这种方式尤其适合长卷发或夸张动漫发型,因为它能快速给出复杂走向,但导入后一定要重新采样,否则过密的控制点会让发丝在拐弯处产生不自然的折叠。
渲染优化与常见问题排查
自动生成的头发在视口里看着还行,进入渲染后却经常出现毛躁、穿插或闪烁。多数问题来自三个地方:子级数量与段数不够、材质粗糙度设置不当、采样和运动模糊设置不合理。渲染时先确认子级渲染数量不要低于 200,hair_step至少为 8,长头发还要适当增加段数。如果发丝过细,会在远处产生摩尔纹,可以稍微增大尖端半径。
材质方面,Cycles 提供了专门的 Principled Hair BSDF 节点,比传统的 Principled BSDF 更适合表现头发的高光和透光。黑色头发可以适当降低粗糙度,浅色头发则需要更高粗糙度来避免塑料感。下面的脚本创建一套基础头发材质,并把颜色、粗糙度和黑色素等参数接入节点。
import bpy mat = bpy.data.materials.new(name="HairMat") mat.use_nodes = True nodes = mat.node_tree.nodes links = mat.node_tree.links # 清除默认节点 nodes.clear() bsdf = nodes.new(type='ShaderNodeBsdfPrincipledHair') output = nodes.new(type='ShaderNodeOutputMaterial') links.new(bsdf.outputs['BSDF'], output.inputs['Surface']) bsdf.inputs['Color'].default_value = (0.2, 0.12, 0.06, 1.0) bsdf.inputs['Roughness'].default_value = 0.35 bsdf.inputs['Radial Roughness'].default_value = 0.25 bsdf.inputs['Coat'].default_value = 0.05 bsdf.inputs['Melanin'].default_value = 0.7
如果出现浮毛过多的情况,优先降低子级设置中的roughness_1和roughness_end_shape。如果头发在动画里闪烁,除了提高渲染采样,还应该检查运动模糊是否导致发丝相互穿插,必要时关闭该对象的运动模糊。对于 AI 生成的低分辨率密度贴图,先进行一次模糊处理再写入顶点组,可以避免头皮上出现明显的密度块边界。最终效果仍需要用粒子编辑模式做局部修正,自动生成负责完成约 70% 的基础量,剩下的 30% 手工调整才是决定发型是否耐看的关键。

