☰
Blender 重拓扑自审评分表:用 scenario-blender-retopology 的 critique rubric 量化拓扑质量
2026/11/6 3:33:18 网站建设 项目流程

【免费下载链接】skills

Get production-ready images, video, audio, and 3D from any AI agent: skills that pick the right model, price before spending, and keep characters and brands consistent through the Scenario MCP, plus expert teams that drive Blender, Maya, ZBrush, Unreal, and Unity.

项目地址:https://gitcode.com/GitHub_Trending/skills63/skills
点击查看免费下载

在 Blender 中把高模雕刻、扫描件或 AI 网格重拓扑成可用于动画、细分或游戏低模的干净布线,难点往往在于判断“到底行不行”,而不在“怎么建”。critique.md 把专家的目视评审拆成 0~2 分的可执行检查表,并通过 bx_retopo.py 中的topology_report、fidelity、loop_stats、loops_around等函数取得量化结果。读完之后,读者可以按“先跑代码检查,再看两张评审图,最后按七节逐条打分”的顺序,独立完成一次可信的重拓扑自审,并给出带原因的问题清单。

评分表的设计逻辑:把专家口述变成可执行检查

评分表的出发点是 Kaspar 对“什么才算好重拓扑”的一句总结:干净、全四边面、细分后表现好、形体与细节都被捕捉到、容易绑定,而顶点数量本身与这些标准关系不大。这句话直接决定了评分表的七个维度排序:用途匹配、走向、极点、形体、卫生、游戏特化、报告诚实性。

评审的执行顺序在文档开头就明确规定,不能颠倒:

  1. 先跑代码检查,拿到面数、极点、环路、细分误差等客观数字;
  2. 再渲染两张评审图:cage(线框)与临时 2 级细分后的 matcap;
  3. 最后按可视清单逐项打分,每节按 0(失败)、1(能用但有可见问题)、2(干净)计分,每个 0 或 1 都必须写明原因。

这个顺序很重要:数字可以快速排除明显不合格的方案,但不能单独判定合格。文档用羊模型实验反复证明这一点——一个激进拟合的 cage 平均误差只有 0.043%,比 Kaspar 手工重拓扑的 0.24% 低一个数量级,但细分后明显更鼓包。因此评分表规定“数字只用于定位问题,matcap 和线框图才是决定项”。

第 0 节:评审前的四项准备

评分表的第 0 节给出评审会话的最小准备代码。所有函数来自bx_retopo,坐标全部位于雕刻体的局部空间:

t = R.topology_report(retopo, crease_attr="retopo_crease", hidden_group="hidden_ok") f = R.fidelity(retopo, sculpt, levels=2, target_mask=<你打算覆盖的区域>) ls = R.loop_stats(retopo) eye = R.loops_around(retopo, eye_center, eye_normal, max_radius=2.6 * eye_radius, corners=(inner, outer))

四个返回值分别解决四类问题:

  • topology_report返回bx_audit的基础审计数字,再加上专家目视检查项。源码里明确列出了它新增的字段:rim_poles(边界上度数 ≥4 的顶点,即壳边缘上的极点)、center_poles(x=0 上度数 ≠4 的顶点)、crease_poles(折痕边上的非 4 度顶点)、adjacent_e5(两个内部 5+ 极点之间的边)、valence2、non_quads_visible(hidden_ok组之外的三角面/多边面)、sym_local_pct(局部空间 X 镜像配对顶点占比)、pole_density_pct,以及cage_dihedral_mean/p95(cage 相邻面夹角,用来量化“关闭细分后 cage 是否还读得出来”)。实现见 bx_retopo.py#L2705-L2771。
  • fidelity衡量细分之后的表面与雕刻体的距离,默认levels=2。它返回mean_pct / p95_pct / max_pct / inside_pct / cov_p95_pct以及细分面的二面角统计。关键实现细节:它会临时挂一个 Subsurf、保留 Mirror,以及位于 Subsurf 之前的 Shrinkwrap,评估后再恢复原修改器栈(L2483-L2564)。
  • loop_stats给边环做普查:闭合环数量、闭合边占比、最长开环、螺旋嫌疑数。螺旋判定是启发式的——开环顶点绕回自身前方超过 3 个索引即记为嫌疑,文档明确要求“嫌疑必须在渲染图线框上确认”(L2669-L2702)。
  • loops_around是“眼睛和嘴周围有几圈环”的可测量版本:在垂直于normal的平面上累加绕角,只有完全落在max_radius内的闭合环才计数,返回按半径从内到外排序的列表(L2617-L2666)。

除代码外,第 0 节还要求三套同视角渲染图:cage 线框(front、right、threequarter、low 四个视角)、同样视角下临时 2 级 Subsurf 的 matcap、以及雕刻体本身的 matcap 作对照。完整可运行版本在 procedures.md 的 P10,示例用bx_review.review(...)分别输出线框与 matcap 图,并在渲染后移除临时 Subsurf,避免污染交付物。

第 1 节:用途匹配——预算与简报

第一节点评的不是“好看”,而是“是否适合用途”。四项检查:

检查通过标准依据
面数/三角数对预算在预算内;影视向是“必要的最少环数”Kaspar、SpeedChar
密度跟随细节与形变,而非面积脸部比身体密(游戏约 3 倍),平坦或隐藏区域稀疏;均匀密度对角色即不合格SpeedChar
不能过密“过度密集的重拓扑”是最常见的 RetopoFlow 问题Lampel
表面细节交给贴图动画身体上不应有追着小凸起、毛孔、肌肉纹理走的环Jamie Dunbar、Dikko

其中最容易出错的是第二条。文档为它配了一个“提示性指标”:边长变异系数(edge length CV)。参考值是——未编辑的均匀 remesh 约 0.17~0.27;工作室网格从 0.33(手部基模)到 0.8。expert-notes.md 的校准表进一步给出了具体网格:Rex 头 3,890 面 / CV 0.805,Snow 身体 9,402 面 / 0.765,Rain 身体 16,526 面 / 0.619,Rain 面部 1,653 面 / 0.600,Franck 羊身体 2,596 面 / 0.491。

但评分表明确规定:CV 永远只作提示,不作通过/失败判据。原因是艺术性的疏密变化(如硬化边缘附近的加密)也会抬高 CV,而某些合法网格的 CV 也可以很低。这条“不作 gate”的裁定同样写在 SKILL.md 的质量门禁一节里。

第 2 节:走向(Flow)——用线框图判定

第二节点评的是布线走向,全部依据cage wire图与loop_stats:

检查通过标准
每只眼睛与嘴周围的环各至少 3 个闭合环(loops_around),同心、无螺旋
眼睑/唇上下对等上环边数 = 下环边数(corners=拆分)
表情区(影视面部绑定)眼睑、唇、眉:各 3 条主环 + 2 条把手环,眼角 2 条角环
面部框架、鼻唇沟、颊部网格有一条绕下颌与额头的环;一条从鼻上绕到下巴的环;颊部是干净网格
关节每个弯曲部位(肘、膝、腕、指关节)上 3 圈
身体主干(完整角色)肩帽上的胸环与髋环存在;四肢环与躯干环分离
环闭合或终止于静止区loop_stats的螺旋嫌疑在修改后不上升;没有环绕肢体一圈后外逃
肢体中线笔直各环起始顶点沿肢体排成一线,无扭转
离开面部的环有预算出脸的环必须终止于框架环、下巴框、鼻孔或洞口,而不是漂到脖子和耳朵

这些条目之所以能写成代码,是因为loops_around的corners=(a, b)参数:它把每个环在离两角点最近的顶点处切开,报告两侧边数,从而把“上眼睑 10 条 = 下眼睑 10 条”变成可断言的sides字段。源码还处理了一个现实问题——角点恰好落在两顶点中间时拆分有歧义,此时置corner_ambiguous(L2649-L2663)。

“带极点的环不算环”这一条来自环行走算法的硬性约束:_walk_loop在内部顶点度数不等于 4 时直接终止返回未闭合(L2567-L2594)。因此一条穿过 5 极点的“环”在数据上就是开环,评分表据此把“地图线必须真实成环”列为独立检查。

第 3 节:极点(Poles)

第三节是评分表里表格最长的一节,也是专家经验密度最高的地方:

检查通过标准
度数只允许 3 与 5;valence_6plus == 0;最终网格valence2 == 0
位置在低运动区(手背、锁骨之间、颊部),远离嘴角行程
禁止位置折痕环、壳边缘、面部中线:crease_poles == 0、rim_poles == 0、center_poles == 0
不允许聚簇adjacent_e5低;两个菱形不得相接(会形成 6+ 极点);每个 6 极点都要报告并说明理由
极点预算与布局极点密度接近工作室的 5%;眼睑/唇环与折痕环上为零;归约单元(每单元 4 个极点)与阶梯状切边是 agent 的主要极点来源
地图线必须真实成环每条计划线都能用R.find_loop_near(obj, curve, tol)找到真实闭合边环
走向环不能读成折痕带状环间距约等于一条边长;三条紧贴的环细分后会形成脊
密度极点数 / 面数落在工作室区间(头约 1.8%,身体约 5%)

其中“归约单元 4 个极点”的结论来自羊模型上的实测:把眼睛强行压到 Kaspar 的 18 边、嘴压到 24 边,极点密度从 5.7% 升到 9.5%,代价是多出约 40 个极点。这也是carve_rings支持count=(lo, hi)区间的原因——边界自身的边数若落在区间内就保留,避免为了凑一个数字而额外引入归约环。函数文档明确写出:默认取边界自身边数,而稠密 QuadriFlow 边界会把它设得过高(E1 基座上羊眼为 46~48,Kaspar 用 18);带count时,会在干净环外侧加一到两圈过渡环,让归约产生的极点落在过渡环上(L1747-L1793)。

“地图线成环”的验证函数find_loop_near做的是双向匹配:曲线上的稠密采样点到环的最大偏差、环上顶点到曲线的最大偏差都必须小于容差,容差还允许半个局部边长(L2320-L2351)。这避免了“看起来像有一条线”的错觉。

第 4 节:形体——细分面与雕刻体比对

第四节的前提是一个反直觉事实:把 cage 顶点吸到雕刻体表面,细分后反而会整体缩进去。羊模型上,QuadriFlow 的 cage 细分后 87% 的表面落在雕刻体内部。因此评审的对象必须是细分面,而非 cage 顶点。

通过标准与阈值:

检查通过标准
细分面贴合雕刻体mean_pct <= 0.3%,inside_pct在 40~60%(Kaspar 的羊:0.24%、47%)
覆盖度在打算构建的区域内cov_p95_pct <= 1%(漏建肢体、架空腔体会在此暴露)
折痕保持眼、唇、鼻唇沟、下巴、眉、耳轮、指节细分后仍锐利;折痕环居中于折痕
无鼓包与夹点曲面上的极点周围无波纹;蹄、手指、嘴无鼓包。数字抓不住这条:激进拟合的 cage 得分 0.043%,观感却比 Kaspar 的 0.24% 更差
体积肢体无收缩(inside_pct > 55即收缩),无外溢(< 40)
关闭细分仍可读只看 cage 也能看出角色,这是绑定师与动画师实际看到的东西
剪影(游戏)低模剪影在游戏机位下匹配高模;圆润部位不应出现棱面

修复手段是R.fit_subdiv,其原理在源码 docstring 中写得很清楚:每次迭代取每个顶点的极限曲面位置(临时 1 级 Subsurf +use_limit_surface),找到雕刻体最近点,按邻域平滑后的差量移动顶点;clamp把单顶点总位移限制为clamp × 平均边长,避免 cage 对过小的特征(蹄、嘴)被“揉皱”。函数会自动关闭 live Shrinkwrap(否则会把 cage 重新吸附回去),因为拟合后的 cage 本就该在不带 Shrinkwrap 的情况下交付(L2381-L2443)。

默认参数iterations=6, step=0.6, smooth=0.6, clamp=0.25就是“温和”档,与激进档(12 / 0.8 / 0.3 / 0.5)平均误差相当,但最大误差更低、自交减半、表面明显更平滑。文档也标注了另一条路径——Kaspar 的 Multires + Shrinkwrap + Apply Base,在羊模型上是 0.11% 平均误差、只有 15% 在内部(外溢),属于过度修正;并且两条路径之后都不能再重新 Shrinkwrap。

第 5 节:卫生(Hygiene)

第五节点评交付前必须清理干净的东西:

检查通过标准
面类型non_quads_visible == 0,三角面与多边面只能待在hidden_ok组里;影视向要求全四边面
流形、法线、游离元素除刻意开的洞外非流形为 0;翻转法线 0;游离点/边 0;重复顶点 0
自交不劣于输入自身的接触(Kaspar 的羊 cage 有 177 对面相交,来自耳朵贴住头部)
镜像缝应用 Mirror 后每个中心顶点都在 x = 0,缝上无开放边
交接除 Subdivision 外修改器全部应用,变换干净,GEO-前缀命名,每对象一个材质,删除注释属性,剥离复用部件的残留数据
分离部件衣物从身体拓扑派生而来;即使被身体遮住的地方也不相交;开口处保留内层带

non_quads_visible的实现值得注意:它并不直接统计非四边面数量,而是逐面检查顶点是否全部属于hidden_group且权重 > 0.5,只有“可见”的非四边面才计数(L2744-L2749)。这就是评分表允许“三角面只出现在隐藏区”的实现依据。

交接一节对应 procedures.md 的 P13:函数遍历修改器、只保留SUBSURF、删除sharp_edge/uv_seam/retopo_crease等注释属性残留,并在缺少材质时补一个视口材质。

第 6 节:游戏专用检查

游戏低模有自己的通过标准,因为交付物要进烘焙器与引擎:

检查通过标准
每条边都有职责剪影、阴影、材质分界或 UV 缝,否则应被溶解
三角化受控不留扭曲四边面(triangulate_twisted);导出时应用 Triangulate 修改器
形变区指节、肘、膝、嘴、眼必须是四边面且无三角;三角面只允许在刚体部位
略高于高模低模处处略在高模外侧(push_outside)
硬边每条硬边都是 UV 缝
凹腔深凹(耳窝)要有几何,不能只靠法线贴图

triangulate_twisted的判据是两个三角形法线夹角超过angle(默认 15°),并且有高模时用 BVH 选择“两个三角形更贴近高模”的那条对角线,这样烘焙器与引擎用的是同一条对角线(L2789-L2830)。push_outside则沿高模法线把落在内部或距离小于offset的顶点推到offset处,同时把中心线顶点钉回 x = 0,保证镜像缝不破(L2833-L2856)。

“硬边必须是 UV 缝”在代码里也有对应检查函数hard_edges_without_seams,它直接比较sharp_edge与uv_seam两个布尔边属性,返回既硬又无缝的边数;P11 演示了导出 FBX 时同时开启use_mesh_modifiers与use_triangles。

第 7 节:报告的诚实性

最后一节不打分面数,而是判定“这份评审报告能否被信任”。要求逐部件说明所用的方法(planned、auto、carved、socketed tube 之一)、第 1~5 节的数字、两张评审图,以及哪些部分没有做到专家级(表情把手环、表情折痕、极点路由)。

文档给了最严厉的一条裁定:把自动 remesh 当成“animation-ready”出售,本节直接判 0,无论数字多漂亮。这与 SKILL.md 的立场一致——自动重拓扑是静态资产的终点、其他一切工作的起点;在羊模型上,专家密度的 QuadriFlow 结果眼周与嘴周 0 圈环,还把薄耳朵撕裂了。

把评分表接进质量门禁

评分表负责“怎么判”,SKILL.md 的质量门禁负责“在哪判”。门禁代码把第 3、4、5 节的关键项压成一次布尔汇总:

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)

注意这里的语义差异,正是评分表反复强调的:

  • 6 极点是“报告并说明”,不是“禁止”——工作室网格也有 0~4 个;
  • 边长 CV 不进 gate;
  • quads允许两条路径:要么可见非四边面为 0,要么全网格四边面率 ≥99.0%;
  • 额外的人工条件:crease_poles == 0、镜像面上的center_poles == 0、每只眼与嘴至少 3 个闭合环、每次合并前环数相等、三角面只在隐藏或刚体区、预算达标(R.tri_count)。

为什么“数字很好看”仍可能判 1 分

羊模型实验的数据是用来校准评分表权重的,不是用来炫耀的。同一雕刻体上:

方案面数细分 2 级平均误差内部占比眼/嘴环数闭合环边占比
Kaspar 手工重拓扑2,5960.24%47%5,5 / 229.9%
QuadriFlow(按面积匹配预算)4,3720.14%87%0 / 01.6%
上者 + 温和fit_subdiv4,3720.045%53%0 / 01.6%
上者 + Multires Apply Base4,3720.11%15%0 / 01.6%
v2 工具链最终结果4,9800.028%52%4,4 干净 24 边环 / 5×30,15/1533.9%

只有最后一行的闭合环边占比(33.9%)追上了 Kaspar 的 29.9%,而它的平均误差(0.028%)远小于 Kaspar 的 0.24%。这恰好说明为什么第 2 节的走向检查与第 4 节的 matcap 检查不能被平均值替代:平均距离会奖励“追着雕刻噪点跑”的 cage。评分表因此把“无鼓包与夹点”单列为一条,并明确写道“数字抓不住这条”。

一次完整自审的执行清单

把评分表落成日常流程,顺序如下(对应 procedures.md 的 P0~P14):

  1. 跑数字:topology_report+fidelity(levels=2)+loop_stats+ 每个地标的loops_around;
  2. 渲两套图:cage 线框四视角;临时 2 级细分 matcap 三视角;雕刻体同视角作对照;
  3. 按第 1~7 节顺序走:先判用途与预算,再看走向,再看极点,再看形体,再看卫生,游戏项目追加第 6 节,最后写第 7 节的诚实性陈述;
  4. 每个 0/1 都写原因与修复动作。常见对应关系是:眼环全为奇数 → 先parity_strip配对奇数边界再切岛;极点密度 9.5% → 把固定计数改成count=(lo, hi)区间;带状环紧贴细分后起脊 → 把spacing改回一条边长,只有真折痕才用rings=3, spacing=0.3 * edge;细分面整体内缩 → 用fit_subdiv而不是 Shrinkwrap 偏移;自动 remesh 小网格报 “needs to be manifold” → 用R.quadriflow的缩放技巧与体素回退。

按这套顺序执行,评审结论会自带证据:既有可复现的数字,也有决定性的可视化依据;每个扣分项都指向一个具体的修复函数,而不是一句“布线不够干净”。

【免费下载链接】skills

Get production-ready images, video, audio, and 3D from any AI agent: skills that pick the right model, price before spending, and keep characters and brands consistent through the Scenario MCP, plus expert teams that drive Blender, Maya, ZBrush, Unreal, and Unity.

项目地址:https://gitcode.com/GitHub_Trending/skills63/skills
点击查看免费下载

相关推荐

上一篇:上线 10 小时冲进 ModelScope 前十:DeepSeek 视觉实验版的开源速度战
下一篇:公众号也开始聊了:'一键去AI味'出圈,5万星叙事正在扩散

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询