关于 scenario-blender-retopology
面向 Agent 的 Blender 重拓扑技能,指导从雕刻数据规划边流、构建网格并检查细分后的贴合度。它区分可变形角色与静态资产的处理方式,也说明哪些部分仍需人工审核。
主要功能
- 01先规划边流与地标
- 02构建特征环线和肢体拓扑
- 03拟合笼体以匹配细分表面
- 04执行拓扑与保真度检查
- 05审核渲染并交接未完成项
适用场景
- 01重拓扑可变形角色雕刻模型
- 02处理静态扫描或道具网格
- 03检查面部和关节环线布局
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-blender-retopology安装后在 Claude Code 中输入/scenario-blender-retopology确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/critique.mdexpert-notes.mdprocedures.mdsources.mdscripts/bx_retopo.py详细介绍
Blender 重拓扑
专业级重拓扑是一项精心规划的工作:用尽可能少的环线捕捉形体并让网格能够变形。环线环绕眼睛、嘴部和关节闭合,极点放在不会移动的位置,而最终匹配雕刻模型的是细分后的表面,而不是控制笼。没有鼠标的 Agent 可以通过数据构建所有这些内容,但只有对明确规划的部分,才能达到专业水准。自动重网格适用于静态资产的收尾,对其他资产则只是起点。如果这里提到的某项相关技能不在你可用的技能中,请让用户安装它
(npx skills add scenario-labs/skills --skill <name>);如果需要无人值守地继续,请根据工具 schema 操作,并标明这一缺失。
必备背景: scenario-blender-expert(执行渠道、审查循环、5.2 API 变更)。
工具包:scripts/bx_retopo.py
(import sys; sys.path.append("<skills>/scenario-blender-retopology/scripts"); import bx_retopo as R),
所有坐标均使用雕刻模型的局部空间。
方法(专业水准的关键差异)
- 先绘制数据图。 在创建任何顶点之前,Kaspar 会在雕刻模型上绘制六层信息:边流、主要褶皱、次要(仅表情)褶皱、关节活动范围、表情范围、标记点(BCON22 [00:07:55],见 00:07:53 至 00:14:38 的画面)。Agent 用坐标和环线数量记录相同的信息(标记点来自渲染图加上
R.surface_point),然后再开始构建。 - 环线才是预算,顶点不是。 关节活动区域的最低配置(Kaspar 引用 Brian Tindall):眼睑、嘴唇和眉毛各用 3 个控制点构成曲线,每侧各有 2 条控制环线,眼角另加 2 条环线;上侧数量 = 下侧数量(Dikko、Kaspar、Kenny);每个关节 3 条环线;每道褶皱本身 1 条环线,周围再加 2 条贴合褶皱的环线。其他区域则“按实际需要设置”(Kaspar Live #3 [01:56:33])。
- 极点:价数为 3 或 5,放在不会移动的位置,绝不能放在褶皱环线上、壳体边缘或面部中线上(Kaspar Live #7 [00:11:41]、Live #3 [00:36:54];Dikko [00:04:49])。Lampel 解释说,细分结果中的密度突变会导致捏痕,但在平坦且静止的区域不会有影响(BCON24 [00:21:18])。[补充] Agent 的极点来自环线数量递减(每个单位减少 4 个)以及横跨自动基础网格呈阶梯状分布的切割边界(约占其顶点的一半);两者都要纳入预算。
- 环线必须闭合。 眼睛或嘴唇周围出现螺旋就意味着需要重做(Dikko);在静止区域结束的螺旋则可以接受(Dikko 的身体 [00:09:34]、Kaspar 的鼻子)。
- 评估细分后的表面。 贴合雕刻模型的控制笼在细分后会向内收缩;Shrinkwrap 偏移能修正凸起区域,却会让凹陷处更糟。应调整控制笼,使细分后的表面与雕刻模型匹配(Duha BCON23 [00:08:58]):
R.fit_subdiv。Kaspar 的 Multires Apply Base 也能实现同样效果,但会调整过度(下文有测量结果)。 - 游戏低模 = 轮廓加动画环线(SpeedChar):面部密度约为身体的 3 倍;不会弯曲的区域可使用三角形;手动切割扭曲的四边形,让烘焙器和引擎保持一致;低模表面略微高于高模;每条硬边都是 UV 缝(On Mars 3D)。
- 自动重网格适用于静态、扫描、背景或仅用于烘焙的资产(Lampel [00:09:05]、Grant Abbitt、Duha、Jamie Dunbar)。对于会变形的角色,它无法替你做出关键判断:对绵羊使用专家级密度的 QuadriFlow 重网格,结果眼睛和嘴部周围都没有环线,薄耳朵也被撕裂。
首先确定
| 输入项 | 为什么会影响方案 | 未说明时的默认值 |
|---|---|---|
| 用途 | 电影模型笼在细分级别 2 下渲染(Kaspar);游戏发布三角形网格并进行烘焙 | 变形角色:电影风格的全四边面网格笼 |
| 预算 | 电影:无顶点预算,尽量减少环线(Kaspar);游戏:三角形预算 | 电影风格化头部:1,650 至 4,100 个面,身体:9,400 至 16,500 个面(Blender Studio 网格);游戏角色少于 10,000 个三角形 |
| 变形 | 面部绑定、关节、嘴部移动幅度(表情范围) | 面部和四肢均会变形 |
| 摄像机 | 细节和密度取决于最近的视角(SpeedChar) | 面部特写 |
| 风格 | 风格化:将褶皱融入拓扑;写实:通用基础网格加置换(Kaspar) | 风格化 |
| 对称性 | R.topology_report(sculpt)["sym_local_pct"],局部空间 | 仅在对称度高于 ~98 % 时使用镜像(这只羊为 21 %,且处于摆姿状态) |
| 独立部件 | 眼睛、牙齿、头发束、衣物(从身体副本分离) | 独立对象 |
工作流
-
检查(流程 P1):孔洞、流形性、比例、旋转、对称性。门槛:记录好全部四项。
-
绘制映射:先读取雕刻师的面集(
R.face_set_map、R.face_set_review、P1b:唇线、眼部遮罩、耳朵、蹄);标记带坐标的地标、从 Numbers 表中读取各特征的环线数、折痕列表(检查表情形状键)、各部分的密度。门槛:必须先有映射,再创建任何几何体。 -
为各部分选择方法:
部分 方法 依据 眼睛、嘴巴、眉毛(会变形) carve_rings(corners=, count=(lo, hi)):按构造使上部 = 下部,使用测地线环,在计数范围内时保留边界计数;先配对奇数边界(parity_strip)v2:所有干净环线上,眼睛为 24(12/12),嘴巴为 30(15/15);强行采用 Kaspar 的 18/24 会多出 40 个极点 鼻唇沟、面部轮廓、颈部(映射线) 沿面集的 enclosing_contour(P7)使用carve_band:生成一个干净的环线,将极点推到底面上v2:鼻唇沟增加 18 个极点;面部轮廓为可选项,在绵羊上增加 64 个极点 四肢、耳朵、尾巴、手指、角 使用 limb_profile(测地线轮廓,找到根部和关节)+socket_tube(count=)(P3b、P8);直线部分:从截面生成tubev2:全部 7 个部分,包括 1 m 的卷曲尾巴;每个关节有 3 个环线 头骨、躯干、平滑块体 可接受以 QuadriFlow 为起点,否则使用网格片 变形较少 静态道具、扫描模型、仅用于烘焙的模型 对整个物体使用 QuadriFlow( R.quadriflow)Lampel、Grant Abbitt 写实人头 对干净的通用基础网格进行收缩包裹,然后调整(Kaspar BCON22 [00:20:16]) 此处未编写脚本 -
构建:分别粗略地创建各个岛(Kaspar:“别把精力放在调整所有点上”)。 通过
R.setup_cage设置修改器堆栈(镜像裁剪 > 收缩包裹目标法线投射 > 在编辑模式中隐藏细分曲面)。 门槛:每个岛都通过下方的拓扑门槛。 -
松弛并冻结手工构建的布局:
R.relax、R.freeze。不要用于 QuadriFlow(覆盖率从 0.44 % 恶化到 0.55 %)。 -
连接:按计数处理:先用
R.boundary_loops,再对计数相同的环线使用R.bridge/R.weld_loops; 先缩减较大的一侧(Kaspar:手腕 10 对手部 16,“多了六个”)。门槛:不得创建三角形。 -
体积:影视用途使用
R.fit_subdiv(温和的默认设置);游戏用途使用R.push_outside,然后使用R.triangulate_twisted,并在导出时添加三角化修改器。 -
审核并交接:通过各项门槛,制作两张渲染图表,并做好交接规范(P13)。报告 Agent 未计划的内容。
Agent 能达到的效果(基于羊模型测得;tests/code/blender-retopology/sheep_results.json 和 compare/metrics.json)
| 策略 | 面数 | Subdiv-2 平均误差 | 内部 | 眼部/嘴部环 | 闭合环边 | 外观 |
|---|---|---|---|---|---|---|
| Kaspar 自己的重拓扑 | 2,596 | 0.24 % | 47 % | 5,5 / 2 | 29.9 % | 干净,看起来未经细分 |
| QuadriFlow,匹配面积的预算 | 4,372 | 0.14 % | 87 % | 0 / 0 | 1.6 % | 棱面感强,耳朵破损,密度均匀 |
+ 温和的 fit_subdiv | 4,372 | 0.045 % | 53 % | 0 / 0 | 1.6 % | 整体形态平滑,蹄部凹凸不平 |
| + 改用 Multires Apply Base | 4,372 | 0.11 % | 15 % | 0 / 0 | 1.6 % | 过冲 |
| 混合方案:眼部环 + 耳部管状结构 + 温和拟合 | 4,544 | 0.042 % | 52 % | 3,3 / 0 | 5.9 % | 首个技能版本 |
| 使用该技能的 E1 运行(全新 Agent:面集、扭曲、4 个眼部环、5 个唇部环、肢体管状结构) | 5,778 | 0.040 % | 51 % | 4,4 / 5(46 至 48 个顶点) | 19.4 % | 规划好的面部,眼睑有波纹,腿部连接处有凸块 |
v2 工具,最终版(test_sheep_v2.py:面集、以范围表示的计数、角点拆分、测地环和管状结构、鼻唇沟环) | 4,980 | 0.028 % | 52 % | 4,4 个干净的 24 顶点环,12/12 / 5 × 30,15/15 | 33.9 % | Agent 的最佳结果:极点占 5.7 %(Kaspar 为 5.2 %),干净的环上没有极点,也没有 6 极点;鼻子和上唇区域不规则(需人工处理) |
这些数据对 Agent 过于有利:一次激进拟合的得分为 0.043 %,但看起来比 Kaspar 的笼状网格更凹凸不平。 只有人类水平才能完成的部分:带有辅助环的关节计数、根据表情形状放置折痕环、极点走向,以及面部之外的环预算。请在报告中明确说明。
数值
| 项目 | 数值 | 来源 |
|---|---|---|
| 渲染细分(影片) | 2 级;视口 1 级 | Kaspar Live #6 [00:21:53];BCON22 frame 00:26:38 |
| 关节 | 弯曲部位有 3 圈环线 | Kaspar Live #5 [01:37:48] |
| 肢体起始环 | 8 个顶点(腿部先用 8 个,再用 12 个);Dikko 的手臂至少 8 个,通常为 10 到 12 个,腿部为 18 个 | Kaspar Live #4 [00:06:54];Dikko [00:13:47] |
| 眼睑 | 每道眼睑褶皱有 2 圈环线 + 横向约 4 圈;示例跨度为 10/10 | Kaspar Live #1 [02:11:22];Dikko [00:04:16] |
| 工作室网格 | 99.9% 以上为四边面;0 到 4 个价数为 6+ 的顶点(需逐个报告并说明理由);极点约占头部 1.8%、身体 5%;边长 CV 为 0.33 到 0.8 | 校准(对 Blender Studio 文件运行 bx_audit) |
| 自动重网格提示(非门槛) | 未经编辑的均匀重网格,边长 CV 约为 0.17 到 0.27,闭合环线接近 0% | 校准,sheep |
| 游戏 | 头部 2,000 到 3,000 个三角面;双手约 1,000 个;身体 5,000 到 6,000 个 | SpeedChar ep23 [00:09:58],ep24 [00:50:34] |
| 应用基础级别 | 身体 2 级,头部 3 级;头发、衣服 | Kaspar Live #5 [02:15:03] |
质量门槛
代码(阈值 [已添加],基于 Kaspar 的羊模型校准:均值 0.24%、内部 47%、覆盖率 p95 为 0.82 %):
retopo_gate = R.topology_report(retopo)
fit_gate = R.fidelity(retopo, sculpt, levels=2)
gate = {"six_poles_to_justify": retopo_gate["valence_6plus"], "no_rim_poles": retopo_gate["rim_poles"] == 0,
"quads": retopo_gate["non_quads_visible"] == 0 or retopo_gate["quads_pct"] >= 99.0,
"subd_fit": fit_gate["mean_pct"] <= 0.3 and 40 <= fit_gate["inside_pct"] <= 60,
"coverage": fit_gate["cov_p95_pct"] <= 1.0, "loops": R.loop_stats(retopo)}
print(gate)
边长 CV 永远不作为通过/不通过标准(工作室网格的数值为 0.33 到 0.8);价数为 6 的顶点需要报告并说明理由,而非一概禁止(工作室网格为 0 到 4 个)。此外:crease_poles == 0,镜像面上 center_poles == 0,R.loops_around(retopo, eye, normal, max_radius) 对每只眼睛和嘴部至少返回 3 个闭合环线,合并前的环线数量必须相同,三角面仅允许出现在隐藏区域或刚性区域,且须符合预算(R.tri_count)。视觉检查(bx_review,使用与雕刻相同的视图):线框模式下检查笼网(环线是否紧密、是否有游离环线、极点是否位于静止区域),再用细分后的材质预览检查(凸起、极点处的夹捏、褶皱是否保持),最后单独检查笼网:即使不细分也必须清晰呈现(Kaspar Finale [01:58:41])。使用 references/critique.md 评分。
常见错误
| 错误 | 表现 | 修正 |
|---|---|---|
| 绕着 QuadriFlow 闭合的眼睑切割 | 每个眼圈都不规则(47、45),无法修复为全四边面 | 在切割之前,用 R.parity_strip 连接两条奇数边界 |
| 沿用密集切割的计数,或将计数强行设得远低于它 | 眼圈为 46 到 48;或极点密度为 9.5 % | count=(lo, hi):每减少一个单位会增加 4 个极点;这些范围让羊的密度从 9.5 % 降至 5.7 % |
| 表面相接处使用 3D 最近点查询 | 带状或插槽切割会切到贴在脸颊上的耳朵 | 使用测地线场、curve_verts、定向的 nearest_vertex(带状和管状结构内置) |
| 将环间距设得过紧以创建边缘流线 | 细分后出现凸脊 | 带状结构的 spacing = 边长;仅在折痕处使用紧密间距 |
| 交付已吸附的笼子 | 雕刻模型内部的细分表面(87 %) | R.fit_subdiv |
| 用收缩包裹偏移来保持体积 | 凹陷更严重 | 进行拟合,偏移量设为 0 |
在较小的密集网格上直接使用 quadriflow_remesh | 已取消(CANCELED),“需要流形网格” | 使用 R.quadriflow(缩放技巧、体素回退) |
| 将 QuadriFlow 对称性保留为默认值 True | 姿势网格的半边错误 | 除非模型对称,否则使用 symmetry=False |
| 放松自动重拓扑结果 | 尖端和耳朵收缩 | 仅放松手工构建的布局 |
| 将 Mark Sharp / Seam 用作标记 | 着色出错(4.1+),展开时产生切口 | 使用 retopo_crease 属性(P5) |
| 对奇数边界环使用网格填充 | 已完成(FINISHED),面数为 0 | 先计数;R.grid_fill 会报错 |
| 过早连接各部分 | 每个新环都会遍布整个模型 | 先分离岛屿、计数,最后合并 |
| 轻信平均误差 | 凹凸不平的拟合也能通过 | 使用 matcap 检查,温和拟合 |
| 应用基础网格后再次收缩包裹 | 体积再次丢失 | 永远不要(Kaspar Live #6 [00:20:08]) |
| 游戏用四边面未保持共面 | 法线贴图出现线条 | 使用 R.triangulate_twisted,导出时进行三角化 |
Blender 5.2 说明
- Hidden Wire 是 Retopology 覆盖层(
overlay.show_retopology,自 4.5 起偏移量为 0.01 m); “Project Individual Elements” 是snap_elements_individual = {'FACE_PROJECT'}。仅限 GUI。 - Slide Relax 是 Relax Slide 笔刷资产(笔划需要窗口,
bx_gui);无头模式下使用R.relax。F2、LoopTools、BSurfaces 是扩展;mesh.circularize、space_edge_loops_evenly、flatten是内置功能;mesh.select_by_pole_count已存在(4.4)。 - BCON22 版本的 Shrinkwrap 显示 Smooth Factor 0.05 / Repeat 1(时间戳 00:22:53);5.2.1 的 Shrinkwrap 没有此类选项。
- 自 4.1 起,始终会应用
sharp_edge;Auto Smooth 已移除(改用 Smooth by Angle 修改器)。 - Apply Base =
object.multires_base_apply(apply_heuristic=True);QuadriFlow 已失去其快捷方式,并且有上述陷阱。
参考资料
references/procedures.md:经过测试的代码,P0 至 P14(检查、面集 P1b、堆栈、管状结构、测地线肢体 P3b、冻结/松弛、注释、QuadriFlow、地图线环和环、插座、体积、检查、游戏、 表情测试、交接、AI 网格收尾)。编写任何代码前都要加载。references/expert-notes.md:专家原则及时间戳、面部和身体环线图、服装、 游戏规则,以及完整的绵羊实验。规划面部、身体、服装或游戏网格时加载。references/critique.md:用于评估自己的重拓扑效果的评分标准。每次审查时加载。references/sources.md:全部 24 个源视频及最佳时间戳。