关于 scenario-maya-retopology-uv
面向 Agent 的 Maya 拓扑重建与 UV 技能,适用于角色、道具及其他资产。它依据镜头和变形需求规划线环与 UV,并检查拓扑、弯曲、纹素密度及烘焙准备。
主要功能
- 01基于地标规划拓扑
- 02模板拟合与分部件构建
- 03变形和眼睑检查
- 04按镜头计算纹素密度并排布 UV
- 05烘焙笼与重叠审阅
适用场景
- 01为角色变形重建拓扑
- 02为游戏资产准备 UV 和烘焙笼
- 03检查目标镜头的 UV 密度与留白
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-maya-retopology-uv安装后在 Claude Code 中输入/scenario-maya-retopology-uv确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/critique.mdexpert-notes.mdgui-paths.mdprocedures.mdsources.mdscripts/mx_retopology_uv.py详细介绍
Maya 重拓扑与 UV
专家级重拓扑需要规划出在保持变形能力的同时面数最少的拓扑:先确定关键标志点,再围绕眼睛和嘴部布线,每个关节布置三圈线,在不会发生形变的位置设置极点,并进行弯曲测试,判断折痕不良应归咎于哪一环节。专家级 UV 会将纹素分配到镜头关注的位置,依据最近景别确定纹素密度,并设置能经受 mip 处理的边距。没有鼠标时,Agent 会复用已批准的拓扑,根据数据构建,并对每个阶段进行测量和渲染。如果此处提到的某个同级技能不在你的可用技能中,请用户安装它
(npx skills add scenario-labs/skills --skill <name>);若无人值守,则根据工具架构继续操作,并标明这一缺口。
必备背景: scenario-maya-expert(执行通道、审查循环、2027 版本陷阱)。
工具包:scripts/mx_retopology_uv.py
(import mx_retopology_uv as RU),基于 mx_audit、mx_review 和 mx_run 构建。
状态(2026-09-24): 尚未在 Maya 中运行任何 Maya 调用(未安装);离线通过了 99 项纯逻辑检查和 40 项模拟 Maya 检查。请先运行 tests/code/maya-retopology-uv/run_all.sh,然后修复 job_probe_commands 报告的问题。
立场(专家差异)
- 先确定关键点,再布置大块面,最后像拼图一样填充。 FlippedNormals:从小处着手是「糟糕的工作方式」;宽松的拓扑可以补救,过紧则不行(9N4rG5qHWgk [00:01:05] [00:02:07])。在添加任何顶点之前,先确定环线布局。模板拟合必须先在基础密度下通过,再添加跨度。
- 复用已获批准的拓扑。 FlippedNormals 会把一只完美的手、耳朵或基础网格用于每个模型([00:10:11]);Jessica Dru Johnson 的标准基础网格将面部蒙皮的耗时从三天缩短到 30 分钟(ZiYEO49B768 [00:58:51])。Quad Draw 的替代方案:
RU.fit_template。 - 不要对会变形的部位使用自动拓扑。 在脸上,它「看起来正常,但其实不正常」(FlippedNormals [00:23:15]);自动拓扑适用于不会动画的部位([00:22:13])。Retopologize 适用于道具、护甲板、静态布料;用于躯干或宽松外套时,只能作为一个起点,并且必须通过变形检查。
- 隔离并限制变形。 在眼睛和嘴巴周围布置同心环线,每个关节设置一条控制线和两条支撑线;从嘴角到下颌角布置一条平直环线,防止剪切(Jessica [01:15:51] [01:30:10]);上下眼睑的环线数量相同(FlippedNormals [00:21:41])。将极点放在静止区域或皮肤褶皱处([00:12:45]);三角形只用于凹陷处;绝不使用 n 边形:ZBrush 会将其三角化,导致混合形状失效([00:05:31])。
- 交接前测试弯曲,并找对责任人。 antCGi:沿着关节(手腕、脚踝、髋部褶皱)延伸的环线应由建模师修正;若环线正确的铰链处体积流失,则应由绑定师负责,并制作修正形变;通过在相同权重下替换拓扑来证明(x07USYlvu2o [00:10:27] [00:16:24])。根据真实眼球拟合眼睑,并确保环线足够多,使眼睑眨眼时能沿角膜弯曲([00:15:18];RlNnp4qQIrU [00:08:24])。用剪切测试面部铰链(Jessica [01:13:06]);在四肢上,即使环线完美,线性混合也会产生剪切[新增,已测量]。
- Retopologize 的陷阱(Maya 2027 帮助文档)。
polyRetopo会在编辑和打开文件时重新运行:删除历史记录;更改多个属性时暂停节点。预处理网格(默认开启)会平滑细节:仅用于含 10 万个以上三角形的噪声输入。硬表面设置为 1 / 1 / 0。绝不要只处理半个网格。边组件标签可引导流向。 - 根据最近的镜头确定纹素密度。 Paulino:将参考部件放进最近景别的画面中,按其屏幕像素数的两倍计算,取整到 2 的幂,并对每个 UV 壳执行 Get/Set(iL2iXizf9xM [00:02:33])。影视:统一密度,使用 UDIM。游戏:统一密度,放大头部,并堆叠镜像 UV 壳(MLC s_KLbTUdKms [00:10:57])。
- 填充是 mip 问题;烘焙准备属于几何处理。 UV 壳之间留 4 px,距边框留 2 px;每降低一级 mip,填充距离加倍;Room 空间保持 2 px(Maya 2027 帮助文档)。UV 缝处设置硬边,烘焙和导出使用同一套三角化结果,将整个镜像模型连同偏移一个图块的镜像 UV 一起烘焙(Polycount);低模要紧贴高模(On Mars YDu9pYMkkSM [00:17:45])。
首先确定
| 输入 | 它如何改变方案 | 需求说明未明确时的默认值 |
|---|---|---|
| 用途 | 渲染时细分的影视笼,还是实时三角形网格加烘焙贴图 | 实时 |
| 变形、引擎 | 面部绑定、混合变形;额外的一段嘴角边线会迫使使用第五个影响(Jessica [00:59:24]) | 面部和四肢都会变形;使用 4 个影响,并通过 scenario-maya-rigging 确认 |
| 预算 | 负责人给出的三角形数量(Polycount);“恰好达到所需数量”(FlippedNormals [00:13:46]) | 根据屏幕占比提出一个数量,并将其作为假设 |
| 最近镜头 | 纹素密度 | 1920 x 1080,头部使用 85 mm 镜头(Paulino) |
| 纹理 | 贴图尺寸、0-1 或 UDIM、最低 mip 级别、策略(优化型、技术型、连续型) | 游戏:按四分之一尺寸查看时使用 0-1;影视:使用 4K UDIM;角色:连续展开 |
| 模板、眼睛 | 基础网格;用于贴合眼睑的眼球 | 请 scenario-maya-modeling 提供一个由基础几何体组成的基础网格和眼球 |
| 姿势 | 中性面部、放松的 A 字姿势、眼睛向前看(Jessica [01:00:30];antCGi e74KphYwMww [00:07:39]) | 报告使用的姿势源 |
与身体融合的服装(AI 网格)。 紧身服装会成为身体拓扑的一部分,并沿服装线布置边线环;宽松层会使用独立的管状体或模板投射到融合后的源模型上 [已添加];护甲片可以滑动,但躯干保持为一个整体(Jessica [00:44:17]);永不动的皱褶交给 Retopologize 或烘焙贴图处理(FlippedNormals [00:22:13])。
工作流
-
接收,仅供读取。
mx_audit.audit(source);源文件保持为烘焙源。RU.prep_source创建工作副本(焊接、平滑、报告非流形);损坏的源文件会被重建,或仅用作投射目标(P2)。按变换设置方向(cm,Y 朝上,正面朝 +Z,脚部位于 0)。关卡:已写入数值;已查看泥模表。 -
绘制映射。 标记点、每个开口的环数、关节站位、走向(嘴角位于颊部下方;颈部沿胸锁乳突肌、锁骨延伸至颅骨后部,antCGi RlNnp4qQIrU [00:09:32] [00:37:43]),每个部件各选一种方法。关卡:在创建任何几何体之前,映射已保存为 JSON。
-
逐个部件构建。
部件 方法 调用 带底座的面部、头部、双手、身体 标记点拟合 RU.fit_template四肢、手指、袖子、裙子、尾巴 平面截面,每个关节 1 + 2 个环 RU.limb_stations、RU.build_tube道具、盔甲板、静态布料 重拓扑化 RU.retopologize(mesh, faces, hard_surface=...)不带底座的躯干或面部 先用 scenario-maya-modeling 中的基础图元,再拟合 仅将重拓扑化作为 Quad Draw 的标记起点(gui-paths.md) 然后处理空腔:口腔袋、鼻孔、眼袋(FlippedNormals [00:25:16] [00:27:22])。关卡:
mx_audit.verdict对每个部件的判定均为干净。 -
松弛、居中、镜像。
RU.relax_project、RU.snap_center、RU.mirror_half(焊接阈值 0.001, antCGi QW8w15J00Ok [00:02:56]);合并对称部件(e74KphYwMww [00:24:32])。关卡:中心无偏移, 对称度 100%。 -
检查拓扑。
RU.retopo_report,并在源文件视图中查看线框表和泥模表。 -
UV 之前的变形就绪关卡(antCGi 在此之后展开 UV)。 对每个肢体运行
RU.deform_test(mesh, chain, bends, review_dir=...)(肘部和膝部弯曲至 90 和 130 度,手腕、脚踝、髋部;在肢体中段评估扭转,绝不在肩部或手腕处,x07USYlvu2o [00:08:40]),下颌张开时使用kind="hinge",RU.lid_check(head, eyeball)。使用代理权重,不创建 skinCluster:绑定属于 scenario-maya-deformation。关卡:无topology判定,眼睑正常,已查看姿势表;rig判定作为备注保留;用RU.compare_variants验证修复(P19、 P20)。 -
UV。 沿边环设置缝线(
RU.loop_keys、RU.cut_seams):颈部底部、头部切缝、口腔内、袖线、手臂后侧、手腕、腰部、腿内侧、靴筒顶部、鞋底(MLC [00:01:37] 至 [00:08:05]);布料沿实际缝线展开(Paulino [00:05:16])。RU.unfold、RU.optimize;肢体 UV 壳使用RU.orient_shell,然后使用RU.straighten_rows(MLC [00:04:49]);RU.mirror_uvs(mode="mirror")。关卡:UV 壳符合规划、无折叠、畸变处于范围内。 -
密度与排布。
RU.density_from_camera(电影)或RU.density_for_budget(游戏);RU.set_texel_density(游戏中优先提高头部密度);使用RU.layout(scale_mode="off")和RU.mip_padding; 使用 UDIM,或在游戏烘焙时使用RU.mirror_uvs(mode="stack", offset_u=1.0),但 AO 或徽标存在差异时绝不可使用;RU.lightmap_set。关卡:RU.uv_report通过;已查看 UV 和RU.checker_review检查表。 -
烘焙准备。
RU.harden_uv_borders、RU.bake_check、RU.make_cage或RU.project_to_surface、RU.bake_copy、RU.overlap_review(low, high, out)(P21)。关卡:高模位于笼内,仅在缝线上设置硬边,使用单一三角化,轮廓匹配。
AI 角色端到端流程:过程 P18。
数值
| 项目 | 数值 | 相对于,来源 |
|---|---|---|
| 关节环线 | 1 条控制环线 + 2 条支撑环线;每个指节 3 条 | 每个弯曲处(Jessica [01:15:51] [01:17:34]) |
| 眼睑、嘴唇 | 上部数量 = 下部数量 | FlippedNormals [00:21:41];antCGi RlNnp4qQIrU [00:05:22] |
| 镜像、中心 | 自定义焊接阈值 0.001;漂移范围为 1e-4 至 1e-2 cm,吸附至 0 | antCGi QW8w15J00Ok [00:02:24];FlippedNormals [00:19:06] |
| 重拓扑 | 硬表面 1 / 1 / 0;10 万+ 三角面时使用 Preprocess;容差低于 10% 时速度较慢 | Maya 2027 Help |
| 纹素密度 | 最接近的镜头下屏幕像素的 2 倍,取 2 的幂 | Paulino [00:02:33] |
| 贴图、填充 | 4K 图块;8K 下半尺寸的奇数壳;4 / 2 px,每级 mip 加倍(512 下看到 2048:16 / 8) | Paulino [00:05:48];Maya 2027 Help |
| 硬边、镜像 | 每条 UV 缝;弯曲角度超过约 45°;镜像 UV 偏移 1 个单位 | Polycount |
| 变形 [added] | 关节环线与骨骼夹角在 20° 以内;螺旋角不超过 15°;保留理想环线面积的 0.8;铰链平均剪切角低于 10°;面塌陷面积低于 0.3;理想环线低于 0.7 时需记录为绑定注意事项 | organic digest;scenario-maya-deformation |
| 眼睑 [added] | 静止或眨眼时眼球内部不得有任何内容;检查顶点和边中点;间隙小于眼球半径的 0.1 | antCGi x07USYlvu2o [00:15:18] |
| 门槛 [added] | 偏差小于平均边长的 10%;UV 面积比为 0.5 至 2,各向异性小于 2;密度误差在 10% 以内;打包率 0.7;每个开口至少 3 个干净环线;轮廓差异小于 2% | 此技能 |
质量门槛
代码中(MAYA,尚未在 Maya 中运行):
rep = RU.retopo_report("body_geo", "scan_high", openings={"eye_L": {"point": (3.2, 163, 8.5)}},
joints={"elbow_L": {"center": (45, 140, -2), "axis": (1, 0, 0), "radius": 6}})
dt = RU.deform_test("body_geo", [shoulder, elbow, wrist, hand_tip],
[{"name": "elbow_130", "joint": 1, "angle": 130, "axis": (0, 1, 0)}])
lid = RU.lid_check("body_geo", "eyeL_geo")
uv = RU.uv_report("body_geo", 4096, smallest_mip=1024, target_density=20.48, images_dir="/abs/out/uv")
print(rep["fails"], dt["verdict"], lid["fails"], uv["fails"]) # full arguments: procedures.md
拓扑:0 个 n 边形;无 polyRetopo 历史记录;每个开口有 3 个以上干净环线且两侧数量相等;每个关节带有 3 条环线;仅在腔体中使用三角面;眼睛网格密度高于头颅;无中心漂移;无 topology 判定结果。UV:所有面均已映射;无意外重叠;最低 mip 下留有填充;密度达标;硬边仅出现在缝处(游戏项目)。视觉:线框和黏土材质图(环线间距紧密,方格均匀);姿势图(褶皱出现在解剖结构应有褶皱的位置,无捏折);UV 图;三个视图中的棋盘格以及最接近的镜头;重叠差异图(红色:低模外部的高模部分)。根据
references/critique.md 评分。
常见错误
| 错误 | 表现 | 修复 |
|---|---|---|
| 在面上重新拓扑 | 网格看似合理,但没有环线 | 贴合模板;开口处设置关卡 |
保留 polyRetopo 历史 | 编辑或打开时网格重新求解 | RU.retopologize 会将其删除 |
| 扫描模型或 AI 网格上的硬边过多 | Retopologize 失败或速度极慢 | prep_source 会软化所有硬边 |
| 对内部面使用 Cleanup 和 Merge | 非流形循环无休止地持续 | 使用 Cleanup 的选择模式,手动删除,或使用 Boolean Volume(P2) |
| 将手腕或脚踝弯曲处交给绑定师处理 | 关节处的环线需要用修正器修补 | topology 的判定结果:让环线穿过该处,进行 A/B 测试 |
| 为弥补体积损失而重建干净的环线 | 肘部塌陷问题依旧 | rig 的判定结果:为 scenario-maya-deformation 添加修正器说明 |
| 未使用眼球就建模眼睑 | 眨眼时眼睑会穿出 | 执行 lid_check,添加眼睑环线并重新贴合 |
| 中心偏移;UV 展开后再放松 | 镜像缝隙;纹理游移 | 先执行 snap_center;在 UV 展开前放松,或使用 transfer_uvs |
| 拉直整个壳体的 UV | “一团乱” | 定向、对齐行、固定顶点,并优化内部区域(MLC) |
| 审核显示网格为流形,但 Unfold 拒绝处理 | Unfold3D 中止 | 它会展开三角化副本:复制一份并进行三角化,再使用 Cleanup 的选择模式 |
| 调整密度后使用 Layout Uniform;唯一烘焙贴图重叠 | 密度改变;AO 镜像 | 设置 scale_mode="off";按策略堆叠,并偏移 1 个瓦片 |
| 仅烘焙模型的一半,且使用两种三角化结果 | 中心缝隙,着色呈锯齿状 | 烘焙整个镜像模型;使用 bake_copy |
交接
- **接收来自 scenario-maya-modeling 的内容:**基础网格、眼球,以及干净的
mx_validate(profile="model"); 接收来自 scenario-zbrush-expert 的内容:真实比例、中性姿势;摆好姿势的源模型需退回;接收来自 scenario-3d 的内容:FBX 或 OBJ [验证 glTF];其重网格仅用于静态部件;来自 scenario-maya-deformation 的环线问题,需附带姿势和数值。 - **交付给 scenario-maya-rigging 和 scenario-maya-deformation:**新版本
<part>_geo, 冻结且无历史记录,单位为 cm,Y 轴向上,居中,双脚置于网格上,眼睛独立且朝前,嘴部留袋, 对称部件已合并;提供retopo_report、deform_test(绑定说明:需要修正器的铰接部位)和lid_checkJSON 文件、线框图和姿势表。 - **交付给 scenario-maya-lookdev:**UV 集、px/cm、UDIM 表、烘焙包(高模、
三角化烘焙副本、笼子、偏移量、切线基准:Unreal 和 Unity 使用 MikkTSpace;Arnold
normal_map从 MtoA 5.6.1.1、Maya 2027.1 开始提供 MikkTSpace 模式),以及uv_reportJSON 文件。
Maya 2027 备注
- Quad Draw 仅支持交互操作(先执行 Make Live);其 2027 年快捷键表已丢失,因此 gui-paths.md 中的
2018 面板路径需[验证]。
polyRetopo标志不会保存:RU.call只会传入cmds.help列出的标志。Flow Retopology(云端,2027.1)需要登录:不能以无头模式运行。Reduce 用于减面。 - 源模型有问题:使用带有 Voxel size 的 Mesh > Booleans Volume 模式(2026)会重建为水密网格,但需要 第二个输入;Mesh > Remesh 会在 Retopologize 之前均匀分布网格。
- Unfold3D 是默认选项,不接受非流形网格,并会固定未选中的 UV(Legacy:仅固定已选项)。 Relax 位于 Optimize > Legacy。Texel Density 需要先设置 Map Size;Measure 中有 Pixel Distance。
dgaTension(2026.3)会根据参考网格测量拉伸程度并生成热力图(RU.tension_node、 属性[验证])。手动创建的测试绑定会使 Skin Tools 图层保持未初始化状态(默认行为), 因此skinPercent的批量操作有效;对于已蒙皮的网格,请删除 Non-Deformer History,切勿删除 History(antCGi [00:12:41])。
参考资料
references/procedures.md:完整代码 P0 至 P21,附测试路径。编写代码前请加载。references/expert-notes.md:专家原则、不同意见及决策条件。规划面部、身体、衣物、变形测试或映射 策略时加载。references/critique.md:自我审查标准。每次审查时加载。references/gui-paths.md:菜单、快捷键、工具设置(Quad Draw、 Retopologize、测试绑定、UV Toolkit)。references/sources.md:所有来源及其凭据、URL 和 时间戳。