关于 scenario-zbrush-stylized
面向 ZBrush 风格化角色与收藏品制作的技能,适用于需要把解剖、轮廓、发型和玩具生产约束转化为可检查步骤的创作者与 Agent。它以量化比例旋钮、曲线路径和阶段质量门来组织建模流程。
主要功能
- 01按真实基准定义风格化比例
- 02以轮廓和形状语言指导设计
- 03用曲线路径生成发束与配件
- 04提供建模阶段检查门
- 05纳入玩具与收藏品生产约束
适用场景
- 01规划风格化角色的比例与轮廓
- 02为角色规划雕刻式或分束发型
- 03制作适配打印尺寸的收藏品角色
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-zbrush-stylized安装后在 Claude Code 中输入/scenario-zbrush-stylized确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/critique.mdexpert-notes.mdgui-paths.mdprocedures.mdsources.mdscripts/zb_stylized.py详细介绍
ZBrush 风格化角色与收藏品
专家级风格化作品会有意简化解剖结构:以真实的骨骼标志点和比例为基准,设定少数明确的夸张参数,并制定可由 Agent 根据剪影衡量的造型语言规则。曲线是 Agent 最好的工具:发丝、发束、带子和围巾尾端都由计算得出的 3D 路径生成,因此“微调”会重新生成路径,而不是直接雕刻。如果这里提到的同级技能不在你可用的技能中,请让用户安装它
(npx skills add scenario-labs/skills --skill <name>);如果要在无人值守的情况下继续,请依据工具架构进行操作,并指出这一缺失。
必备背景: scenario-zbrush-expert(桥接、笔触引擎、审核循环、2026 年陷阱)。
立场(专家之道)
- Shane Olson: 风格化不是“糟糕解剖结构的借口”。以接触表面的骨骼标志点(髋点、膝盖、两侧踝骨、肘部、锁骨顶端、颈椎底部、骶骨三角、头骨)为依据搭建风格化骨架,并省略永远不会显露的骨骼。每一处偏离真实比例的设计,都要用相对于真实值衡量的明确参数来描述(膝盖位于腿长一半处,双手垂至大腿中部);谨慎调整参数,因为角色一动就会暴露问题。
- Guillaume Tiberghien(Keos Masons): “简单最难。”先添加解剖细节,再进行简化。风格化意味着清晰的方向性平面,像木头或岩石一样带有凿刻感;转折处要刻出折线,确保细分后依然笔直;形体之间要相互嵌合,形成细小的接触阴影。建模扎实之前不要上色。
- Rakan Khamash(Blizzard): 造型语言是一套规则,不是个人喜好。使用 S 形和 C 形曲线,不要出现平行线,不要等分(改为 70/30),顶部外扩、底部收尖,细节旁要留出休止区,并且“要么表达清楚,要么干脆不表达”:角色必须在房间另一端也能一眼辨认。低模的 90% 到 95% 已在白模阶段确定。
- Cedric Seaut(Keos Masons): 从剪影开始;将多个设计并排展示,才能塑造出鲜明不同的造型。
- Pablo Munoz Gomez: 雕刻前先规划发束,再从一个角度为每束头发刻一条长笔触。将 DynaMesh 的分辨率设得略高于拾取器的数值;Polish 2 和 ClayPolish 就能让你“达到 80%”。
- Dan Eder: 发束就是绑定的分段。先在临时主体上为每束头发铺设一条管状发丝,每条发丝设置一个多边形组,从前向后制作。不要平滑发丝。先不使用对称功能制作分缝发型,再进行镜像。切换 MatCaps 来查找缝隙。
- Paul Bennett(Hasbro): 玩具是一种产品。先雕刻没有关节的中性站姿设计;关节用球体和圆盘制作,并用服装遮挡;壁厚不得低于 1 mm;融合飘散的发丝;不要制作相互接触手指之类的闭合环;注明文件比例(PVC 收缩率为 104%)。
先确定
| 输入 | 变更 | 简介未说明时的默认值 |
|---|---|---|
| 用途 | 游戏(循环、预算、绑定头发)、收藏品或玩具(墙体、零件、比例)、概念设计或静帧 | 作品集静帧 |
| 参考 | 概念图、三视图、风格(《Overwatch》的厚重感、《Disney》的圆润感) | 无:以真实为基准,只加入明确提及的夸张效果 |
| 头发 | 发丝(绑定或按块重拓扑)或单个雕刻网格 | 雕刻网格(Pablo) |
| 预算 | 每个主角及每个头发版本的三角形数 | 静帧不设预算;Blizzard 的主角是 16k [unit ?] |
| 比例 | 打印高度或玩具系列(6 in、3.75 in) | 无论如何都使用一个 200 mm 的标尺 SubTool(Shane) |
| 对称性 | 设计是否对称 | 对称,然后刻意进行一次不对称处理 |
工作流
- 设计表。 将每个旋钮写成一个数值,并注明其实际含义(大鼻子:
nose_third,眉毛到鼻底的距离占脸长的三分之一,实际值为 1.0;浓眉:眉骨深度;长小腿:femur_tibia)。从概念图中获取每个数值;如果概念图没有提供,就把指定特征夸张到在 64 到 128 px 缩略图中仍能看清,并记录下来。写出三层视觉信息(Rakan):剪影构想、承载意图的次级形状、三级细节。规划头发分束和分缝。GATE:每个旋钮都有目标值和理由。 - 先做剪影。 用两个或三个原始形体变体(scenario-zbrush-sculpting)进行初步构型,并用
zb_review.review渲染。GATE:变体之间的lineup()IoU 低于 0.85 [added];选定的变体在 64 到 128 px 下仍清晰可辨(squint())。 - 按标志点搭建风格化骨架。 所有正交视图都关闭透视(Shane:透视会让遮罩、裁切和镜像产生偏差)。规则:
- 颅骨加下颌,在眼线处分开;下颌角位于耳朵下方、头部深度的中点;
- 头部两侧:从顶视图看,头部两侧并非平行,因此要裁切颅骨两侧,让头部朝脸部逐渐变窄(Shane 02:00:26),然后让两侧呈弧形,而非平面(02:11:58)。Agent:在正交顶视图中用两点 ClipCurve 笔划,或对颅骨 SubTool 使用 Deformation Taper(两者均需 [verify]),再用 Move 或 Clay 笔划塑出弧度;
- 眼睛:先放置眼球球体,再塑造包裹眼球的眼睑;每只眼睛向外转几度(scenario-zbrush-sculpting P17);外眼角明显位于内眼角之后(从顶视图检查);
- 骨盆前倾,胸廓后仰,股骨向内倾斜,胫骨保持笔直。GATE:
subtool_boxes()上的head_checks和body_checks均通过,或者将每项失败记录为有意打破规则;对仅含颅骨的顶视图渲染运行head_taper();渲染正面和侧面的正交视图并与概念图对照;再渲染一张三分之四透视观察图(zb_sculpt.persp_snapshot_code)检查眼窝。
- 合并并塑造平面。
- 将初步构型以 128 到 256 的分辨率执行 DynaMesh(
remesh_code,scenario-zbrush-sculpting);用宽幅 hPolish 或 TrimDynamic 笔划切出平面(较宽容,因此脚本化笔划也能奏效);让形体彼此嵌合。ClayPolish 可作为全局平面滤镜 [added for forms; Pablo uses it on hair]。 - 细分时保留平面(Guillaume 00:46:42 to 00:47:50):先对合并后的部件使用 ZRemesher,生成适合雕刻的拓扑,然后对平面边界加 crease,使其细分后仍能“保持笔直”:
crease_planes(Groups By Normals、Crease PG、CreaseLvl),再按层级规范执行 Divide(scenario-zbrush-sculpting P15)。Crease 是边标记:之后任何 DynaMesh 或 ZRemesher 操作都需要重新添加 [added]。GATE:正面、侧面和三分之四剪影的shape_language():没有平行边对,直线占比不超过 0.25,每 1000 px 的噪点翻转不超过 4 次(默认值 [added]);45% 到 55% 区间内没有band_breaks()断点;MatCap Metal01 下没有凹陷(Plouffe);细分后,掠射视角下加 crease 的边界仍保持清晰。
- 将初步构型以 128 到 256 的分辨率执行 DynaMesh(
- 次级形状和道具(围巾、带子、腰带)。
- 使用 scenario-zbrush-sculpting 中的圆环和带子,结和搭扣偏离中心(70/30)。
- 尾部和带子做成曲线带:使用
sides=0的lay_strands(Curve Flat,Pavlovich),或使用sides=4做带子;用带重力的march_strand生成路径,并弯成 S 形。 - 只在压力或关节造成褶皱的位置塑造褶皱(Rakan)。需要重量感的围巾先用 Dynamics 布料模拟垂坠(scenario-zbrush-character-creature),然后重新塑造褶皱。GATE:正视图中每条尾部都能归类为 S 形或 C 形(
classify_polyline);没有平行的尾部(strand_report)。
- 头发。 可绑定或用于游戏的头发采用发束;静帧、打印件和单一网格采用雕刻网格。两种方式都要先在头发主体的 OBJ 导出文件上规划路径(P3 to P5)。
- 规划:沿分缝和发际线布置
roots_along,从分缝向外布置directions_away,用plan_strands交替设计 C 形和 S 形弯曲,并用vary()改变长度;在正面、右侧和顶面渲染图上用overlay_paths绘制路径并检查(Pablo 用 polypaints 区分发束;Dan 在概念图上绘制分区)。 - 雕刻式(Pablo,P4):使用
scalp_shell;每束头发用粗 CurveTubes,然后用 DynaMesh 将数百束融合;每个发缕从其best_view方向各做一笔stroke_from_viewClayBuildup 笔划(sculptris=True);沿每条crevice_path使用 Dam_Standard Zsub;执行rebalance;再执行finish_hair。 - 发束式(Dan,P5):在头部内放置一个小型虚拟 SubTool(Pablo);每条发束用一个 CurveTube,从前向后延伸,前部抬高更多;执行 Auto Groups;运行
strand_mesh_report;之后镜像分缝发型。GATE:规划图中没有平行的相邻发束,设计的发束类型在右视图和顶视图中清晰可辨;眯眼观察时头发仍清晰;五张检查视图(顶视图能看到分缝)在两种 MatCap 下都没有间隙或穿插;其余区域保持简洁。
- 规划:沿分缝和发际线布置
- 不对称、明度、颜色交接。
- 有意添加不对称细节:结、刘海、眉毛。
- 检查 Guillaume 的灰度效果(
value_check):不能有纯黑或纯白,最强对比应在脸部;上色前只加深睫毛和瞳孔。 - 为每种材质规划不同颜色的材质 ID;在顶层进行 polypaint,并在纯色 SkinShade4 下评估,因为 MatCap 的色相和明度并不准确(Pablo VRisbJQAaZw 00:23:40, 00:24:54)。
- 产品限制(玩具或收藏品)。
toy_scale(高度 / 12,再为 6 in 增加 4%;3.75 in 则 / 18);- 在打印尺寸下检查发束和薄形体(1 mm 墙厚、0.5 mm 修边);
- 头发作为独立部件,并与头部对接定位;飞散的头发要融合,发束要成簇以便重复上色;不能有闭合环,裙摆上要开缝。不要把雕刻细节做到超出打印尺寸所能呈现的程度(Carratala,90 mm)。
数值
| 数值 | 相对于 | 来源 |
|---|---|---|
| 膝盖位于腿长的一半处;双手位于大腿中部;下颌角位于头部深度的 0.5 处 | 旋钮的真实基准 | Shane |
| 眼线位于头高的 0.5 处;面部三庭长度相等,误差约在头高的 5% 以内 | 真实头部 | Anatomy For Sculptors(角色摘要) |
| 外眼角至少比内眼角靠后头部深度的 0.10 | 起始阈值 | 风格化摘要 [补充] |
| 从顶部看头部两侧:收窄(窄处 / 宽处)比例至多为 0.95;侧面下垂至少为深度的 0.01 | head_taper 默认值 | Shane 规则,阈值 [补充] |
| 70/30,绝不 50/50;比例为 0.45 到 0.55 时发出标记 | 沿跨度的分界位置 | Rakan;范围 [补充] |
| 粗模 = 低模的 90% 到 95%;主角预算为 16k,包含两种发型 | 游戏角色 | Rakan |
| 头发 DynaMesh:128 壳;440 阻挡;1416 精修;1032 到 1784 细化;在 2.4M 到 2.6M 个点时重新执行 DynaMesh | Pablo 的头部,他的机器 | Pablo 画面 |
| Deformation Polish 2;ClayPolish Max 25、Min 0、Sharp 0、Soft 0、RSharp 和 RSoft 约为 5 | 收尾 | Pablo 画面 |
| Curve Tube Brush Modifier 默认值 20、方形值 4、平坦值 0;Z Intensity 34 会压平 | 管状轮廓 | IMM 文档,Pavlovich |
| 发丝横截面约为 3 到 4 个多边形 | 游戏发丝 | Dan 画面 |
| 1 mm 壁厚(0.85 时标记)、0.5 mm 边缘、0.12 mm 配合偏移、肘部 115 度 | 玩具生产 | Bennett |
质量检查门槛
- 代码检查:
head_checks和body_checks通过或有意保留;在顶视图中检查head_taper; 在眉线、围巾带和分缝处检查split_check;三个剪影中的shape_language标记为空;没有 50/50 的band_breaks;检查lineupIoU;strand_report中没有平行对,并且每个视图都有设计好的类型;strand_mesh_report中每根发丝只有一个壳,且面数在预算内; 每次 DynaMesh 后检查点数;玩具使用 mm 单位的feature_check。 - **视觉检查:**使用 MatCap Gray 加 Metal01(凹陷处)或其他 MatCap(头发间隙、Dan)检查
zb_review.review;在 64 和 128 px 下眯眼检查;使用annotate_shape;铺设头发前显示计划叠加图;检查透视效果是否吸引人;顶视图检查分缝和头部两侧;也要完成头部后侧。
常见错误
| 错误 | 看起来像 | 修正 |
|---|---|---|
| 所有部分都夸张 | 每个特征都很突出,看不出重点 | 只指定一两个参数;其余保持基准值 |
| 眼角位于同一平面 | 从上方看,脸像一张平面面具 | 将外眼角向后收(canthus_recess) |
| 头部两侧平行,或侧面是平面 | 从上方看,头骨呈方块状或气球状 | 削切两侧,保留弧线(head_taper) |
| Divide 后平面感消失 | 风格化平面变得模糊、圆润 | 在 ZRemesher 之后、Divide 之前使用 crease_planes |
| 四肢或带子的边缘平行 | 腿像管子,裤子显得乏味 | 顶部展开,底部收窄 |
| 按 50/50 分割 | 围巾或腰带恰好在中间分段 | 调整为 70/30(split_check) |
| 到处都是细节 | 轮廓杂乱,没有留白 | 保留简洁区域(Pablo、Rakan) |
| 头发是一整团或由成千上万根发丝组成 | 眯眼看时看不出发束 | 先规划大块发束,再为每块加一根发丝或一绺发束 |
| 用笔刷推动并平滑发丝 | 发丝变软、弯折 | 重新生成路径并重新铺设;Dan 从不平滑发丝 |
| 没有清除 ClayPolish 遮罩 | 下一个笔刷“毫无反应” | finish_hair 会清除遮罩 |
| 玩具带有乱发或手指相互接触 | 铸件断裂,无法脱模 | 合并、分离,并在 1 mm 处检查 |
交接
- **接收:**来自 scenario-zbrush-sculpting 的基本体和 DynaMesh 形体(带版本号的 ZTL、
stats()、评审表);来自 scenario-zbrush-character-creature 的布料垂坠和真实解剖结构。 - **交付:**交给 scenario-zbrush-paint-render 紧凑的雕刻、明度目标和材质 ID 计划;交给 scenario-zbrush-pose-print 不带关节的中性设计、部件和关节计划 (球体和圆盘)、作为带键控部件的头发、比例因子和文件百分比;交给 scenario-zbrush-retopology-export 按每根发丝分组的束状头发(绑定链)、块状多边形组、 每根发丝的面数、与边线对齐的设计线(Rakan)。
ZBrush 2026 说明
- Curve Flat 和 Curve Flat Snap 已随版本提供(2021.6.3),Bend 拆分为 Bend Start 和 End,IMM 笔刷 可接受任意笔划(2024),曲线笔刷几何错误已在 2026.2.1 修复。
- Pablo 的头发笔刷和 DE_HairTubes 是第三方工具:可用 ClayBuildup、Standard、
Dam_Standard 和 CurveTube 代替;自定义笔刷从 Asset Directory
LightBox/Brushes加载。 - 曲线 API 接受工具空间中的点,但无法读回曲线;
curves_to_ui单独使用可能无法 构建网格(Maxon 的示例):live_01 会测量应用操作和轴映射。 - 透视设置为
Draw:Perspective(已安装的 commands.xml 中提供,没有Transform:Persp);PATHS会先尝试已安装的 ID。Gizmo 是默认设置,局部对称跟随 Gizmo。在 macOS 上按 Cmd+W 会退出 ZBrush。
参考资料
references/procedures.md:各阶段的桥接代码。运行任何操作前都要加载。references/expert-notes.md:按专家整理的原则,附有时间戳;包含分歧及决策条件。references/critique.md:自我审查标准。references/gui-paths.md:调色板、笔刷、设置、快捷键(计算机操作 Agent)。references/sources.md:来源、凭据、URL、时间戳。scripts/zb_stylized.py:该模块;通过zb_stylized.call()访问其 ZBrush 端,而不是zb_launch.call。测试:tests/code/zbrush-stylized/。
评论
支持 Markdown