关于 scenario-blender-sculpting
面向使用 Blender 制作头部和角色的创作者,提供从低分辨率块面到表面细化的雕刻流程。脚本用于无头模式下构建基础形体,表面处理则通过实时 GUI 中的 Blender 笔刷完成。
主要功能
- 01以低分辨率构建头部块面
- 02按明确平面塑造主要形体
- 03逐阶段检查比例与网格
- 04通过 GUI 笔刷完成表面细化
- 05创建表情形态键并渲染审查
适用场景
- 01构建头部与角色的基础形体
- 02检查下颌、颧骨等轮廓结构
- 03为中性角色创建微笑表情
- 04从多个视角审查雕刻结果
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-blender-sculpting安装后在 Claude Code 中输入/scenario-blender-sculpting确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/critique.mdexpert-notes.mdprocedures.mdsources.mdscripts/bx_sculpt.py详细介绍
雕刻(头部与角色,Blender 5.2)
专家级雕刻先塑造结构,最后才处理表面:用明确的平面和转折塑造体块,在低分辨率下锁定比例,每个阶段都通过长焦视角观察判断,最终标准是是否有吸引力,而不是网格数值。Agent 通过无头模式构建粗模和一级形体(scripts/bx_sculpt.py:平滑混合的 Clay、平面切割、numpy 笔刷),并在实时 GUI 会话中使用 Blender 的真实笔刷完成客户端品质的表面处理(bx_gui)。如果这里提到的同级技能不在你可用的技能中,请让用户安装(npx skills add scenario-labs/skills --skill <name>);若无人值守,则根据工具架构继续操作,并标明这一缺失。
必备背景知识: scenario-blender-expert(执行渠道、审查循环、5.2 API 变更)。
方法(专家级差异)
- 平面要明确指定,而不是寻找出来。 Thelen 使用 Draw Sharp 切出平面边界,遇到某个面“看起来不对”时就重新切割;Naydenov 将形体简化为平面,再进行平滑;Reinhardt 使用 Scrape、Trim 和 Line Project 进行干净利落的切割。可执行的形式是:为
Clay半空间裁剪或plane_cut/corner_cut指定平面(点 + 法线)。flatten或scrape笔触会拟合其下方球体的平面,因此会跟随球体变化。 - 下颌是带有下颌角的块体,颧骨是带有自身下平面的体块。 Zarins:下颌角是体现年龄和性别的调节器,成年男性的角度较陡;脸部最宽处位于颧弓上部。Naydenov:颧骨从耳部向下、向前延伸,只有下缘可见。Thelen:骨骼加软组织,绝不能像刀刃一样锐利。
- 先从上游修正体块;平面只负责重新明确形体。 如果重新切割平面无法改善观感,问题就在体块或比例上(Thelen 的诊断方法)。实测结果:在球状下颌上进行平面切割,虽然改变了形体指标,但渲染出来像宝石切面;重建下颌块体后问题得到解决。
- 尽可能长时间保持低分辨率。 Abbitt:平滑只对大多边形效果显著;Thelen:在粗模阶段锁定比例。每次重新网格化后都进行对称化(Keelan Jon),然后全局松弛(Kaspar FDscc66fC90 00:11:55)。
- 尽早表现细小的标志性特征(鼻孔、眉毛、眼睛):Yan 通过鼻孔发现鼻子过宽(vB7kPWjBgQI 00:05:11)。
- 通过一致的夸张手法实现风格化(Yan:第一分钟就选定夸张方向,并让相邻特征配合;长脸需要更小的头骨,而不是拉长头骨)。
- 概念头部需要具备相应特征。 Thelen:头发能让男性头部更容易被辨认(00:48:58);Naydenov:头发会极大改变整体观感(00:53:05)。一个没有头发或服装的“冒险者”看起来就像个秃头人体模型。
- 不对称和表情应放在形状键上;基础形状则保持中性且对称(Kaspar f-mx-Jfx9lA 00:09:44;Thelen 00:38:27)。表情测试会暴露比例错误;应在中性形状中修正这些错误(Kaspar 00:10:49)。
首先确定
| 输入 | 影响 | 未说明时的默认值 |
|---|---|---|
| 人物(性别、年龄、类型、态度) | 下颌角、眉形、下颌宽度、造型语言 | 成年男性、中性基础型,已注明 [added] |
| 风格 | 风格化:夸张程度表;写实:正典 + 参考图 | 风格化,“抽象到足以避免诡异感”(Kaspar) |
| 角色特征 | 能体现类型的头发、服装、道具 | 至少有头发和一种服装标志 [added] |
| 用途 | 静帧(顶点绘制、简化)与游戏或电影(重新拓扑) | 静帧;若为动画,则使用 scenario-blender-retopology |
| 交付构图 | 细节频率、表情幅度 | 半身像填满 1080 px 画面 [added] |
| 比例 | 若尺寸以头高 H 的分数表示,则无需填写 | H = 0.24 m [added] |
| 渠道 | 无头模式 numpy / Clay,或实时 GUI 笔刷 | 无头模式粗模;桥接可用时用 GUI 处理表面 |
工作流
- 设计表格。
G = S.head_guides(H)、一个 STYLE 字典(那一两个夸张特征)、提示清单,以及各平面的标志点:下颌角、下巴底部、颧骨。GATE:记录完毕。 - 粗模(体素尺寸 H/40)。 头部的默认模式:
Clay。用颅骨侧面和前部收窄半空间裁切椭球形颅骨;在口部凸起后方放置一个sd_round_box下颌,并用下颌角处的侧面、下方和下颌支平面进行裁切;制作方形下巴块;沿耳朵至脸颊的连线放置颧骨椭球,并加一个下方平面;口部凸起;眉脊;鼻子;向前倾斜约 15 度的颈部;耳朵;眼睛周围的额部方块。以 0.08 至 0.15 H 融合大体块,以 0.02 至 0.03 H 裁切边缘。可选:对基本体使用union_remesh(圆角方块会经 Catmull-Clark 变成球状块:绝不要用它做下颌)。GATE:1 个组件;lower_face_report(head, H)["ball"]为 False;轮廓图和 90 mm 渲染在侧面和四分之三视角下均显示出下颌线和下颌角;夸张特征清晰可见。 - 主要形体(H/100 至 H/110)。 用更精细的体素尺寸和标志点重建 Clay:眼窝(球体尺寸为眼球的 1.1 倍,小于眼睑)、包覆独立眼球的薄层眼睑(Keelan Jon 的眼睑取自眼球,amVAlpxHp8k 00:37:05)、收进脸部的鼻翼、耳窝、颈部肌肉。头发和服装使用独立的 Clay 对象(任何不对称对象都使用
to_object(name, symmetric=False))。GATE:侧面效果突出;眼睛不能像玻璃球或眼袋;头发能衬托脸部;stage_report无问题。 - 次要细节(H/130 至 H/150,
remesh_stage)。 在朝向投影的表面上用crease_line绘制线条(嘴部、下唇下方、眼睑边缘);从下方处理鼻孔。仅在体块正确且移动幅度较小时,用corner_cut/plane_cut重申平面。GATE:面数少于 100k(Abbitt);90 mm 渲染中没有划痕、裂缝或凸边。 - 表面润饰(客户端品质):实时 GUI。 通过
bx_gui使用真正的 Clay Strips、Scrape、Crease Polish、Smooth 0.2(已修复并验证:笔触会射线投射到网格上,并传递对象空间位置;先执行set_view(frame=obj),view_distance设为几个头部高度)。无头模式下的 numpy 笔触适用于粗模和主要形体,不适用于润饰。仅在基础网格稳定且干净后使用 Multires(Henning Cmi0KoFtc-4 00:16:04)。 - 表情。 以中性对称形态为基础;
sc = S.Sculptor(head, symmetry_x=False), 对嘴角、脸颊、下眼睑和另一侧眉毛使用move_feature;S.write_shape_key(head, "Smirk", sc.co)。根据交付画面确定嘴角移动幅度(数字)。体素重建会丢失键:放在最后一步。 - 最终渲染。 使用
S.final_render(objs, path, direction, lens=90, res=1600)(凹腔效果,以真实顶点为中心取景),渲染正面、侧面、四分之三视角,以及中性和表情状态;打开每张图检查。
每个阶段内部:渲染,指出一处最薄弱环节,修复,再次渲染(Yan)。如果指标通过但渲染效果不对,以渲染结果为准。
数字
| 数值 | 数字 | 来源 |
|---|---|---|
| 体素层级 | H/40 用于粗模,H/65 到 H/110 用于主要部分,H/130 到 H/235 用于次要部分,细节约为 H/330 | Morren、Abbitt;示例 |
| 每个体素对应的面数 | 约为 1.5 x 面积 / 体素^2(voxel_for_faces) | 测量值,3 % |
| 示例半身像面数 | H/40 为 8k,H/110 为 64k,H/150 为 103k(含颈部) | 测量值 |
| 面数门槛 | 形体塑造在 100k 以内;细节约 500k | Abbitt |
| 原始重构镜像误差 | 最大 0.67 到 0.75 体素,平均 0.05 到 0.07 体素(最近顶点) | 测量值 |
| 黏土融合(头部) | 块面为 0.08 到 0.15 H,平面裁切为 0.02 到 0.03 H,眼睑为 0.012 H | 示例 [添加] |
| 下颌 | 双下颌角宽度为颧弓宽度的 0.90 到 1.00 倍(示例为 0.93);示例中的下颌支与下颌底夹角为 124 度 | Thelen;示例 [添加] |
| 眼睛(风格化) | 半径 0.064 H,眼睑厚 0.012 H,上眼睑边缘高于中心 21 度 | 示例;14 度时看起来慵懒 |
| 头发 | 发束半径为 0.065 到 0.115 H,从发际线向后延伸,高度为半径的 0.8 倍;底部为 0.008 到 0.02 H | 示例 [添加] |
| 能看出变化的角点移动量 | 约为嘴宽的 1/8(65 mm 宽时为 8 mm,即 0.03 H);在 1/30 时不可见 | 测量值 |
| 每毫米像素数 | 半身像填满 1080 px:2.8;半身像高 270 px:0.75 | 测量值(framing) |
| 平滑强度 | 0.2(5.2 中的默认值为 0.7) | Henning |
| 折痕分辨率 | 半径范围内至少有 3 到 4 个顶点 | Ryan King |
| 审阅镜头 | 85 到 95 mm 透视 | Morren、Kaspar、Naydenov、Yan |
| 标志点 | 眼线位于 0.5 H;鼻底在眉毛与下巴之间的中点;唇缝位于鼻底到下巴距离的 1/3 处;耳朵从鼻底延伸至眉毛;宽度为 H/1.5;嘴角位于眼睛中心下方;眼角倾斜约 8 度;颈部向前倾约 15 度 | Abbitt、Naydenov、Thelen |
质量门槛
- 可度量:
S.stage_report(obj, voxel)(连通组件为 1、非流形为 0、拉伸 p95/中位数小于 2.5、不对称前的 mirror_max 小于 1e-4)。S.lower_face_report(head, H):ball为 True 表示下脸可拟合到同一个球体内,误差不超过 10%,且拟合效果是平面的两倍(校准数据:三个 E2 balloon 下颌为 0.057 到 0.082,基线为 0.18 到 0.20,v2 示例为 0.23 到 0.26)。S.profile_rhythm(obj):下巴向外、向内,嘴唇向外、向内,鼻子向外(鼻子基部以下悬垂的鼻子会遮住嘴唇的起伏节奏)。针对指定平面使用sc.planarity(c, r)。 - 视觉(门槛): 使用
S.long_lens_render或final_render,以 85 到 95 mm 焦距从正面、侧面、四分之三视角和下方渲染;另外使用bx_review.review(..., modes=("silhouette", "matcap"))检查正交视图轮廓。顺序:轮廓、大平面(关闭腔体,或使用mode="flat")、下方与上方、线条、缩略图尺寸下的角色辨识度。评估标准:references/critique.md。
常见错误
| 错误 | 表现 | 修正 |
|---|---|---|
| 下颌呈圆角盒形或椭球形,平滑过度 | 下半张脸像气球:脸颊、下颌和下颌肉都成了一个球体 | 用 Clay 塑造出具有明确平面的下颌块;通过 lower_face_report 检查 |
| 压平或刮擦塑形笔触来“做出平面” | 切面顺着球体的形状 | 明确塑造平面:用 Clay 截切,使用 plane_cut、corner_cut |
| 在错误的体块上切平面 | 像宝石切面一样带有边缘,但指标仍然达标 | 先移动或重建体块,再切面 |
| 下颌块的前缘超出嘴部 | 下半张脸像戴着面具或覆盖了一块板 | 下颌位于隆起体块之后;前部应由隆起体块和下巴构成 |
| 下颌块过高,过渡过小 | 面颊上出现一道板状边缘 | 降低体块,向上混合 0.15 H |
| 眼窝比眼睑宽 | 环形凹槽、眼袋 | 眼窝为眼球的 1.1 倍,眼睑混合 0.012 H |
| 眼睑延伸至眼球赤道后方 | 形成封闭口袋,有 3 个组件 | 在眼球中心平面处截断眼睑 |
| 头发偏移统一,或发束附着在厚重的发帽上 | 像头盔的凸缘,像戴着一顶长虫状发束的针织帽 | 底层要薄,让发束形成体积 |
| 发束从发际线后方开始 | 额头上方露出光秃秃的发带 | 让发束从发际线开始 |
| 将不对称部分对称化 | 扫掠式头发被镜像,出现中缝 | to_object(..., symmetric=False) |
| 在掠射表面上投射刻痕 | 出现平行裂纹 | 只在朝向视图的表面上刻痕;否则跳过 |
| 在基础形状中雕刻微笑 | 无法消除不对称 | 使用中性基础形状,write_shape_key |
| 嘴角移动 1 到 2 mm | 表情不明显 | 约为嘴宽的 1/8,并检查像素 |
| 没有头发或服装 | 光头人体模型 | 使用阶段 0 中的提示列表 |
| 比例尚未确定就开始添加细节 | 在错误的颅骨上刻线 | 通过各项检查前,保持粗略塑形 |
| 从远处以最近点捕捉笔触 | 鼻尖上出现凹槽 | 使用 on_surface(p, view) |
| 重网格后遮罩仍然存在 | 某个区域对所有笔刷都不起作用 | remesh_stage 会清除遮罩 |
| 缩小视图后使用 GUI 笔触 | 整个网格都被压平 | 使用 bx_gui.set_view(frame=obj),检查 view_distance |
| 将发际线做成一条倾斜切线 | 从侧面看像军帽,前方是一堵垂直的墙 | 将发际线设为方位角的函数(鬓角、耳朵上方、延伸至颈背);从发际线向上做出约 0.12 H 的飞机头坡面 [eval] |
| 眼睛镜像对称 | 没有目光方向,神态呆滞或茫然 | 让两个眼球分别朝向目标;眼睑边缘和眉毛角度可调节神态(中性基础形状需保持眉毛水平)[eval] |
| 特征仅在两处连接 | 鼻子从侧面看会漂浮,存在穿透可见的空隙 | 对每个视图使用射线网格探测轮廓孔洞;大鼻子应有侧壁连接面颊;最后一次重网格后,使用 bx_audit 检查自相交 [eval] |
Blender 5.2 注意事项
- 无界面模式下崩溃(段错误):雕刻模式下的
sculpt.symmetrize、sculpt.mesh_filter、paint.mask_flood_fill、sculpt.mask_filter、sculpt.face_sets_create、sculpt.face_sets_init、object.voxel_remesh。轮询检查失败:sculpt.brush_stroke、sculpt.set_pivot_position、sculpt.detail_flood_fill、修剪手势。可用操作:paint_mask_extract、brush.asset_activate、 编辑模式下的mesh.symmetrize、quadriflow_remesh、多分辨率操作。 - Blender 5.2 自带 OpenVDB(
import openvdb):FloatGrid.copyFromArray+convertToQuads可将 Clay 网格化。 - 笔刷是 Essentials 资产;Flatten、Fill、Scrape 都是 Plane 类型;
size表示直径; Draw Sharp 默认设为 SUBTRACT。sculpt_tool是sculpt_brush_type。 - 体素重构网格的输出为平面着色(
shade_smooth()),会保留属性(包括遮罩),但会丢弃形状键。 - Blender 中的 NumPy 2:使用
np.ptp(a),不要使用a.ptp()。
参考资料
references/procedures.md:涵盖每个阶段的测试代码(Clay 配方、 平面、形态检查、头发、眼睑、表情、最终渲染、崩溃矩阵、笔刷表、GUI 配方); 编写任何雕刻脚本前都应加载。references/expert-notes.md:专家原则及时间戳; 设计角色或选择方法时加载。references/critique.md:包含阻塞项的阶段评估标准;每个检查点都应加载。references/sources.md:27 个源视频及其最佳时间戳。- 示例:
tests/code/blender-sculpting/stylized_head_blockout.py(13 秒,渲染输出位于stylized_head/stage_N/);对比图:tests/code/blender-sculpting/compare/compare_sheet.png。
评论
支持 Markdown