mcpField
S
scenario-zbrush-hard-surface

scenario-zbrush-hard-surface

github.com/scenario-labs创意与媒体1.2k184 次安装1 天前更新
代码仓库

关于 scenario-zbrush-hard-surface

面向 ZBrush 硬表面建模的技能,指导 Agent 以可重复的脚本操作构建切割、倒角、面板与五金件,并通过检查关卡验证造型。它强调清晰的边缘语言、可编辑布尔堆栈和面向目标镜头的细节规划。

主要功能

  1. 01脚本化创建部件与布尔操作
  2. 02按面组规划折痕和边缘
  3. 03动态细分与倒角控制
  4. 04阵列生成切割和五金件
  5. 05分阶段检查模型与导出

适用场景

  1. 01制作游戏道具的硬表面高模
  2. 02规划开孔、面板和装配缝
  3. 03重复布置螺栓与通风口
  4. 04将模型整理后交付烘焙

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/scenario-labs/skills --skill scenario-zbrush-hard-surface

安装后在 Claude Code 中输入/scenario-zbrush-hard-surface确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
critique.md
expert-notes.md
gui-paths.md
procedures.md
sources.md
scripts/
zb_hardsurface.py

详细介绍

ZBrush 硬表面

硬表面的成败取决于最终效果:每条边都清晰地呈直线或曲线,平面上的高光均匀,边缘宽到足以捕捉光线,而且每个部件都能实际制造出来,这样看起来才像是工业制品(Plouffe,Klimer)。Agent 通过确定性操作(基本体、Live Boolean 堆栈、作为折痕方案的多边形组、Dynamic Subdivision 数值、ArrayMesh、Panel Loops)构建这种表现语言,只有在没有其他办法时才使用点击和笔画。如果这里提到的某个同类技能不在你可用的技能中,请让用户安装它 (npx skills add scenario-labs/skills --skill <name>);在无人值守时,根据工具架构继续操作,并标记这一缺口。

必备背景: scenario-zbrush-expert(桥接、笔画引擎、审查循环、2026 年陷阱)。 工具包:scripts/zb_hardsurface.py (import sys; sys.path.insert(0, "<this skill>/scripts"); import zb_hardsurface as hs,然后 hs.hs_call("new_part", "cube")),基于负责人的 zb_ops、zb_review、zb_audit 和 zb_stroke 构建。它尚未在 ZBrush 中运行过。

立场(专家增量)

  • 多边形组就是折痕方案。 以 45 度使用 Groups By Normals(33 会捕捉较柔和的平面,60 会漏掉边缘)、Mirror And Weld、UnCreaseAll、Crease PG(Pavlovich;Plouffe)。先加折痕,只有在衰减必须局部化时才加循环线。在后续编辑后使用 Crease PG,会重新给你有意软化的边界加折痕:重新分组,或按角度加折痕。
  • SmoothSubdiv 与 CreaseLvl 的差值决定边缘效果。 差值为 0 时效果像剃刀一样锋利,“非常 CG”;CreaseLvl 越接近 SmoothSubdiv,边缘就越紧,因此 4/3 比 4/2 更紧 (hs.edge_width)。Pavlovich 使用 3/2,并烘焙为 4/2;Plouffe 将 CreaseLvl 保持为 3,配合锋利的 4,并认为 2 太软。判断方法:在金属材质下渲染两种效果,保留看起来最有设计感的较宽边缘。
  • QGrid 适用于方正的块体(会让弧线产生分面)。曲线跨度使用 Smooth Subdiv 加 Crease Tolerance,并针对每段调校:22 保住了 Pavlovich 的拱形;数值过低会给弧线的小角度加折痕。
  • 布尔运算需要干净的输入(Live Boolean 文档;Pavlovich):封闭无破面、没有共面、密度相近、Dynamic 级别低,且不能有部分隐藏的内容。开启 DSDiv,每个独立部件使用一个 Start 组,然后使用 ZRemesher Detect Edges,Half。布尔运算会丢失折痕、UV、级别和图层;多边形组会保留。
  • 让切口和重复排列保持可编辑。 对切割器使用 ArrayMesh,而不是对结果使用。实例化紧固件(NanoMesh、ArrayMesh)便于后期通过一次 Edit Mesh 替换为“平头,而非十字头”;逐个座位导入则每个座位都要调用一次。
  • 要么笔直,要么弯曲,不要介于两者之间(Plouffe)。先抛光平面,再处理边缘,最后处理拐角的柔和度,从锐利过渡到平滑;不要让锐边和圆边彼此靠得太近;沿边界加一道凹槽,就能让人觉得这是一块独立的板。
  • 细节由功能和镜头决定(Klimer):制作方式、电力流向、统一的紧固件类型、重复的角度保持一致。在引擎中验证两次:先用绑定验证块体(500 到 40k 个多边形),再用低于 1M 个点的高模降面版本验证。看不到的内部和底面保持填充或简化,用深色 AO 表现出来(Pavlovich)。
  • 微细节留到确认通过后再做,并放在 3D 图层上(Klimer):负强度会向内雕刻,复制会使效果加倍,而任何拓扑更改都会使图层失效,因此要等到最后一次布尔运算、重网格或 Apply 之后再加图层 [新增]。
  • Mirror And Weld 始终将负 X 复制到正 X。 在 +X 上保留正确的一半:先用 Deformation Mirror(Pavlovich,Plouffe)。Slice、Trim 和 BRadius 会忽略对称,因此所有单侧编辑都要在这里完成。

智能体在此处能做什么、不能做什么

确定性(编写脚本)点击或笔画 [验证]仅限 GUI,或替代方案
Primitives、Unify、placement(new_part、place、import_part);Live Boolean roles(set_roles、roles_from_groups)、DSDiv、Make Boolean Mesh、Show Coplanar 和 Show IssuesZModeler:保存一个包含操作和折痕选项的笔刷或 2026 预设,在 click_target 处执行一次 canvas_action(首次为拖动;轻点可重放)Clip、Trim、Slice、Knife(Ctrl+Shift 拖动;press_key 已损坏):布尔切割器、fitted_split_groups、在组轮廓上使用 DynaMesh Groups、ZScript IKeyPress 封装器(scenario-zbrush-automation)
Dynamic Subdiv、CreaseLvl、CTolerance、Crease PG、Crease Bevel、ApplyNanoMesh 插入:在目标组的面上点击一次,或在朝前的平面上点击一次(随附宏的例程)Gizmo 变形器:对齐轴线的零件上的 Deformation 滑块
Groups By Normals、Mirror And Weld、Panel Loops、GroupsLoops、ArrayMesh、NanoMesh 滑块、MeshFromBrush(fastener_from_brush)、蒙版(mask_fillet)、ZRemesher、DynaMesh、DecimationIMM:合成的 Dots 笔画,或在脚本曲线上的 Curve Mode;先运行 imm_readyRetopo 笔刷、Mask By Polypaint 对话框、自由手绘蒙版、hPolish 平整处理(笔画力度较弱)

先确定事项

输入影响未说明时的默认值
目标用途游戏(烘焙到低模)、影视、印刷收藏品、概念设计阅读游戏资产,烘焙到一张 2048 贴图(Pavlovich 的手枪)
摄像机第一人称和 ADS、第三人称、转台展示、印刷构图第三人称;细节尺寸以该视角下的可读性为准
预算低模三角面数、贴图尺寸、高模上限报告数量并询问;绝不擅自编造预算
功能说明表如何开启、通风、供电、制造方式、紧固件系列在白模阶段前先写一份(Klimer)
比例绑定模型:白模阶段使用真实比例;概念设计:使用相对比例Unify(约 2 个单位),Z 轴朝前,关闭透视(Chervenka);以毫米为单位的需求通过 to_tool_units 处理
活动部件铰接式面罩应作为独立部件和 Start 组独立
交付给 PainterSubstance Bridge,或 OBJ 加外部烘焙询问;两种方式如下所述

工作流

  1. 设置。 将代理或概念模型作为 SubTool;统一缩放,沿 Z 轴前向,X 轴对称;每次布尔运算、DynaMesh、ZRemesher 和 Apply 之前都保存带版本号的 ZTL(Python 无法撤销)。GATE:包围盒最长边约为 2;ZTL 已保存到磁盘。
  2. 搭建基础形体。 使用 new_part 和 place,或从 DCC 基础模型中使用 import_part;先做主体,切割体放在下方。GATE:将形体检查表(zb_review.review)与概念设计对照;绑定过的资产在细化前,先在引擎中检查其基础 OBJ 和绑定。
  3. 外壳。 对基本体使用变形滑块,用相减盒体制作开口,执行 Make Boolean Mesh,再运行 zremesh_recipe("after_boolean")。雕刻路线(DynaMesh 128 到 176、hPolish、TrimDynamic)仅用于概念设计。GATE:hygiene(obj) 通过(它代替 Check Mesh;Check Mesh 会通过注释报告结果);PolyFrame 显示均匀四边形。
  4. 规划折痕。 使用 crease_by_groups(45)、dynamic_subdiv(intent="working");使用 crease_by_angle 添加弧线,并按跨度调整。使用 ZModeler 创建的环线和内嵌面在创建时设置折痕(zmodeler_plan:Insert EdgeLoop 选择 "Crease";Inset 选择 "Crease New Edges" 可形成清晰边缘,选择 "Crease Inner Poly" 可形成圆角;默认值为 Do Not Crease)。GATE:check_crease 通过;金属板(review_sheets)呈现柔和、能捕捉光线的边缘,没有波浪起伏,多边形组对称。
  5. 切口和通风孔。 使用 new_part(..., op="sub") 创建切割体,使其穿过表面,切勿与表面齐平;Smooth 3 / CreaseLvl 2,再按角度添加折痕;在切割体上使用 array_mesh。之前的 GATE:stack_report()["problems"] 为空,coplanar_report 无异常,Show Coplanar 快照中没有红色,array_plan 的壁面正常。然后运行 make_boolean_mesh(超时应设短)。之后的 GATE:UMesh SubTool 与 Start 组相同;Show Issues 快照无异常;重新添加折痕(使用 Crease PG,除非有意软化边界);ZRemesher 之前运行 hygiene。任何单侧编辑:运行 mirror_report、mirror_weld(keep=...),然后在导出前后对导出内容运行 mirror_check。
  6. 面板和贴合部件。 先将面板规划为多边形组。真正分离面板:使用 Plouffe 的配方执行 Panel Loops(panel_loops)。贴合开口的面罩或舱口:同一切割体使用两次(fitted_split_groups:在一个 Start 组中执行 Intersect,在另一个组中执行 Subtract),或在组轮廓上使用 DynaMesh Groups。接缝:使用来自 border_polylines 的薄相减切割体,再用 curve_mesh [verify]。蒙版:使用 mask_fillet(Klimer 的模糊、反转、重复流程)。GATE:split_copy("groups") 的面板计数正确;板上的间隙保持一致。
  7. 五金件。 统一采用一套系列。使用 ArrayMesh 创建行列;径向排列使用 ArrayMesh Rotate 360,再通过 ZRVar 变化运行 array_commit("nano")(Chervenka);无需拖拽即可从 IMM 创建部件:使用 fastener_from_brush;螺栓位置没有面:使用辅助平面。跨越接缝的接口:使用 seam_port_groups(Pavlovich)。精确排列:使用 spaced_points。GATE:板上所有五金件的数量、朝向和型号均一致。
  8. 提交高模。 使用 bake_split():在副本上以 4/2 执行 Apply,在原始模型上关闭 Dynamic。精确控制倒角宽度:使用 Crease Bevel 宽度或布尔倒角,因为 Polish 只能给出最小值(Polycount)。GATE:等级 = 1 + Flat + Smooth;edge_language 没有含糊的线条;plane_flatness 中没有起伏不平的组;pinch_report 未标记任何问题。
  9. 微细节(签核后)。按区域创建图层(Tool:Layers:New;流程 P15)。GATE:每次处理前后都运行 layer_safe(recorded, zb_ops.stats())。
  10. 低模和交付。 关闭 Dynamic 的笼形网格;逐个部件运行 ZRemesher(zremesh_recipe("part"));快速制作静态道具:运行 dynamesh_visible(res),然后运行一次 decimate_percent;或使用 Maya 或 Blender。Klimer 的 ZRemesher 加自动减面曾生成“我交付过的最糟糕的网格”。Painter 流程(scenario-zbrush-retopology-export 会运行这些流程):Substance Bridge Low & High,加上 Auto-Bake 和 Send PolyPaint(bridge_preflight);或使用带折痕接缝的原生 Unwrap(unwrap_creases),然后导出 OBJ。GATE:zb_audit.verdict(..., "game") 通过;动画部件需分开。

数值

数值用途来源
按法线分组 45(较柔和时为 33,漏选时为 60)折痕规划Pavlovich;Plouffe
平滑/折痕 3/2 工作、4/2 烘焙、4/3 紧密、4/1 柔和边宽Pavlovich;Plouffe
折痕容差 45(单个拱形上为 22)按角度设置折痕Pavlovich
每个 QGrid 面数 x4,平面或平滑步进;应用级别 1 + 平面 + 平滑面数预算DSUB doc
切割器圆柱体采用 8、12、16、24 或 32 个侧面;DynaMesh 烘焙前为 36 到 140 个侧面切割器Pavlovich;Polycount
ArrayMesh 重复次数 4 到 5通风口Pavlovich
Panel Loops:Loops 1、Polish 0、Bevel 0、Elevation -100、Double、Ignore Groups板件Plouffe
ZRemesher Half + Detect Edges + Adaptive 0可切割基底Pavlovich
Keep Groups、Smooth Groups 0、AdaptiveSize 25零件重新拓扑Chervenka
面板基底约 3 颗星捏合预算Plouffe
LazyStep 2(他的估计)适用于接触处,铆钉为 2.5;Curve Step 1 适用于接触处IMM 运行Pavlovich;IMM doc
DynaMesh 探索阶段为 176;游戏外壳为 1000分辨率Pavlovich
25k / 1.671M = 1.4 到 1.5 个百分点单次抽取减面Pavlovich
每个 SubTool 1000 万个多边形高模上限Plouffe
区块为 500 到 40k 个多边形;审核高模时低于 1M 个点引擎检查Klimer
2048 烘焙,4 px 填充贴图Pavlovich

质量关卡

  • 代码:stack_report 和 coplanar_report 无问题;make_boolean_mesh()["ok"];hygiene; check_crease;mirror_check;edge_language(没有 ambiguous);plane_flatness(obj)["wobbly"] 为空;pinch_report;layer_safe;bridge_preflight;zb_audit.verdict。
  • 视觉:review_sheets:用五个视角的 MatCap Gray 检查形体;用金属材质、正视和 30 度掠射角 检查平面与边宽;用 PolyFrame 检查分组和点状折痕线。每次布尔运算后都显示 Coplanar 和 Show Issues。 检查捏合处时,使用低级别模型、深色 polypaint 和低金属度 MatCap。参考 references/critique.md 进行评判。

常见错误

错误表现修正
CreaseLvl >= SmoothSubdivCG 边缘像刀口一样锐利dynamic_subdiv(intent="bake")
在弯曲壳体上使用 QGrid弧线呈现刻面效果将 QGrid 设为 0,使用 Smooth 和 crease_by_angle
切割器与主体齐平出现共面细节块;孔洞完全切穿;使用 coplanar_report
没有 Start 组或 DSDiv 关闭零件与主体缝合;UMesh 呈现刻面效果set_roles(... start=True);dsdiv=True
Mirror And Weld,优质半边位于 +X编辑内容被抹除mirror_weld(keep="pos")、mirror_check
边缘软化后再 Crease PG软化的边缘再次变得锐利按角度 Crease,或先合并组
切割后留下碎屑ZRemesher 失败使用 hygiene,隐藏碎屑,再执行 Del Hidden
对包含细分级别的 SubTool 使用 IMM插入被拒绝使用 imm_ready;使用无细分级别的占位 SubTool
拓扑更改前创建了 LayerLayer 不再生效在最后一次布尔运算之后创建 Layer,或执行 Apply
强制开启 UV Auto-Unwrap每个 SubTool 的 UV 都丢失使用 bridge_preflight;关闭该选项

交接

  • 接收: 用户提供的概念和简报;来自 scenario-3d 的 AI 网格;来自 scenario-maya-modeling 或 scenario-blender-hard-surface 的 DCC 块(OBJ、四边形和三角形);来自 scenario-zbrush-sculpting 的形体处理成果。
  • 交付: 带版本号的 ZTL(高模 SubTool、关闭 Dynamic 的笼子)、每个零件各一份且高低模名称匹配的 OBJ、 stack_report 和最新的图纸;交给 scenario-zbrush-retopology-export 处理 UV (使用 crease seams 展开、UV Master)、Substance Bridge 或 Multi Map Exporter 烘焙(polypaint ID 通过 Send PolyPaint 或 MME 的 Texture From Polypaint map 传递;尚未确定 OBJ 顶点颜色能否传递) 以及游戏低模;其中 2026.1 Retopo 笔刷需在 GUI 中操作;交给 scenario-maya-modeling、scenario-maya-retopology-uv、scenario-blender-retopology 或 scenario-blender-uv-baking 制作手工低模;通过 scenario-zbrush-paint-render 处理 polypaint ID; 将打印零件交给 scenario-zbrush-pose-print。

ZBrush 2026 注意事项

  • Knife(2021.7 至 2022)搭配 Split To Parts(2024)可替代大多数 Slice 和 Trim 流程;Knife 无法切割孔洞。
  • ZModeler 2026.0 可在创建时添加 crease(Insert EdgeLoop、Inset);2026.2.1 新增 Bevel All、Outer 或 Inner Edges,并修复默认执行 Extrude 而非 QMesh 的问题。
  • Substance Bridge(2026.2.0):Low & High、Auto-Bake、Send PolyPaint;Force UV Auto-Unwrap 为全局设置;每次发送都会创建一个新的 Painter 项目。
  • 2026.2.1 修复了 Live Boolean 渲染和 Apply 崩溃问题。ZRepeat It 未随软件提供:使用 Python 循环处理 SubTool。
  • 阻塞问题(2026.2.1 界面字符串):共面 Make Boolean Mesh;Mirror And Weld 上的 floor Elv; 导入时的 n-gon;带细分级别的 DynaMesh;Check Mesh Integrity 结果 [verify];当当前笔刷已是插入笔刷时, Create InsertMesh 的 Append-or-New 提示;随软件提供的 Create Instance Subtool 宏会以注释结束。
  • 带前缀的标签:s.SmoothSubdiv、P.Panel Loops、a.Repeat、m.Width;Tool > Geometry 下的分区不增加路径层级。在 macOS 上按 Cmd+W 会退出 ZBrush;Control+W 会创建组。

参考资料

评论

支持 Markdown