mcpField
S
scenario-maya-retopology-uv

scenario-maya-retopology-uv

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

关于 scenario-maya-retopology-uv

面向 Agent 的 Maya 拓扑重建与 UV 技能,适用于角色、道具及其他资产。它依据镜头和变形需求规划线环与 UV,并检查拓扑、弯曲、纹素密度及烘焙准备。

主要功能

  1. 01基于地标规划拓扑
  2. 02模板拟合与分部件构建
  3. 03变形和眼睑检查
  4. 04按镜头计算纹素密度并排布 UV
  5. 05烘焙笼与重叠审阅

适用场景

  1. 01为角色变形重建拓扑
  2. 02为游戏资产准备 UV 和烘焙笼
  3. 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.md
expert-notes.md
gui-paths.md
procedures.md
sources.md
scripts/
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])。

工作流

  1. 接收,仅供读取。 mx_audit.audit(source);源文件保持为烘焙源。 RU.prep_source 创建工作副本(焊接、平滑、报告非流形);损坏的源文件会被重建,或仅用作投射目标(P2)。按变换设置方向(cm,Y 朝上,正面朝 +Z,脚部位于 0)。关卡:已写入数值;已查看泥模表。

  2. 绘制映射。 标记点、每个开口的环数、关节站位、走向(嘴角位于颊部下方;颈部沿胸锁乳突肌、锁骨延伸至颅骨后部,antCGi RlNnp4qQIrU [00:09:32] [00:37:43]),每个部件各选一种方法。关卡:在创建任何几何体之前,映射已保存为 JSON。

  3. 逐个部件构建。

    部件方法调用
    带底座的面部、头部、双手、身体标记点拟合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 对每个部件的判定均为干净。

  4. 松弛、居中、镜像。 RU.relax_project、RU.snap_center、RU.mirror_half(焊接阈值 0.001, antCGi QW8w15J00Ok [00:02:56]);合并对称部件(e74KphYwMww [00:24:32])。关卡:中心无偏移, 对称度 100%。

  5. 检查拓扑。 RU.retopo_report,并在源文件视图中查看线框表和泥模表。

  6. 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)。

  7. 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 壳符合规划、无折叠、畸变处于范围内。

  8. 密度与排布。 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 检查表。

  9. 烘焙准备。 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,吸附至 0antCGi 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.1antCGi 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_check JSON 文件、线框图和姿势表。
  • **交付给 scenario-maya-lookdev:**UV 集、px/cm、UDIM 表、烘焙包(高模、 三角化烘焙副本、笼子、偏移量、切线基准:Unreal 和 Unity 使用 MikkTSpace;Arnold normal_map 从 MtoA 5.6.1.1、Maya 2027.1 开始提供 MikkTSpace 模式),以及 uv_report JSON 文件。

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 和 时间戳。

评论

支持 Markdown