关于 blender-retopology-uv
面向 Blender 美术与技术美术人员的重拓扑和 UV 工作指南,涵盖自动与手动网格处理、展开、密度控制及检查。
主要功能
- 01自动重拓扑方法选择
- 02变形网格边缘流规则
- 03UV 接缝与展开方法
- 04UV 岛打包和密度控制
- 05特殊 UV 场景处理
适用场景
- 01为游戏道具生成低模
- 02制作适合变形角色的拓扑
- 03为网格展开并整理 UV
- 04排查 UV 与纹理密度问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-retopology-uv安装后在 Claude Code 中输入/blender-retopology-uv确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
scripts/_bpyx.pyauto_retopo.pytexel_density.pyuv_pack.py详细介绍
重拓扑与 UV
执行模型位于 blender-core。
重拓扑
自动(scripts/auto_retopo.py -- --objects Sculpt --tris 8000 --method ...)会生成 <name>_low,并将源对象隐藏:
| 方法 | 适用对象 | 说明 |
|---|---|---|
quadriflow | 有机道具、静态角色、扫描模型 | 生成干净的四边面。会先进行体素重网格处理,使输入成为流形;UV 会丢失(需重新展开) |
decimate | 背景道具、LOD、AI 生成的网格 | 保留 UV 和形状,但会生成三角面。速度快 |
planar | 硬表面 CAD/布尔运算结果 | 溶解平坦区域;保留缝线/锐边/材质/UV 边界 |
手动(主角角色及任何会发生变形的对象)。新建网格对象并添加 Shrinkwrap 修改器(PROJECT,目标 = 雕刻模型),设置吸附为 FACE_PROJECT + use_snap_project,并将源对象设为不同的视口颜色/X 射线模式。自动重拓扑不适用于需要变形的主角网格,因为下方所述的边流至关重要。
变形网格的边流规则
- 在眼睛和嘴巴周围设置同心环线(≥3 圈)。鼻唇沟环线从鼻翼延伸至嘴角。
- 每个弯曲关节(肘部、膝盖、手指关节)设置 3 圈环线,并在两侧各加一圈以保持体积。肩部需要额外环线,以便抬臂。
- 将极点(3/5 条边的顶点)避开弯曲区域。把它们放在平坦、坚硬的区域(胸部、后脑勺)。
- 均匀分布四边面,并在变形和轮廓需要的位置增加密度。仅在隐藏且不变形的位置使用三角面。
- 2026 年角色三角面预算:移动端 5–15k,Roblox 身体总计 ≤ 10.7k,主机/PC 第三人称 30–80k,主角/电影级 100k+。在
blender-game-optimization中检查目标平台。
UV
- 缝线:将其隐藏(腋下、大腿内侧、后脑勺、部件下方),沿硬边设置,圆柱体在背面切开。游戏网格规则:每条硬边(>~60°,
sharp_edge)都必须是 UV 缝线,否则法线贴图会出现瑕疵。scripts/uv_pack.py --seams-from-sharp 60可完成此操作。 - 展开:
--method seams(基于角度,使用标记的缝线)、--method min_stretch(SLIM,4.3+,有机模型的失真最小)、--method smart(硬表面/自动,--angle 66)。 - 拉直矩形岛(仅限实时使用 Follow Active Quads),使饰条和像素网格对齐。
- 平均岛屿比例 + 打包,边距以像素计:2k → 8 px,4k → 16 px,移动端 1k → 4 px。
--shape CONCAVE可实现最紧凑的打包(无头模式下较慢)。默认的AABB可即时完成。 - 纹素密度(
scripts/texel_density.py --res 2048):同一资产内的spread保持 ≤ 1.3。使用--set <px/m>设置;如果fits_0_1为 false,请更改分辨率或密度。 - 质量检查:
blender-asset-qa会报告 UV 面积为零的面,以及重叠百分比。
纹素密度目标(px/m;工作室基准,并非硬性规定)
| 场景 | px/m |
|---|---|
| 第一人称主角/武器 | 1024–2048 |
| 第一人称环境 | 512–1024 |
| 第三人称游戏 | 512(主机/PC),256(移动端) |
| 俯视/策略游戏 | 128–256 |
| Roblox | 每张纹理约 256–512:5×5 studs → 256²,10×10 → 512²,20×20 → 1024² |
| 同一场景中的所有内容都应使用统一的密度。主角资产是例外,可保持在 2 倍范围内。 |
特殊情况
- 镜像/堆叠 UV可以节省空间,但会导致烘焙结果无法保持唯一性。烘焙时,将重复的岛恰好沿 U 轴移动 +1(移到 0–1 范围之外),然后再移回。它们的法线贴图必须支持镜像(在使用 MikkTSpace 的引擎中,切线空间会处理这一点)。
- 光照贴图 UV2(
--lightmap,生成UVMap_Lightmap):不能重叠,每个岛都必须位于 0–1 范围内,并留出充足的边距。Unreal/Unity 可以自行生成;只有在引擎管线需要时才附带。保持 UV0 为当前活动 UV,用于纹理绘制。 - UDIM(影视/主角资产):岛位于 1001 及以上的图块中(每个图块的 U 偏移为 1)。纹理节点图像的
source="TILED"。大多数游戏引擎不支持 UDIM。 - Trim sheet:先展开条带,再缩放/移动各岛,使其对齐 trim 的行(V 坐标取决于 trim 布局)。岛在 U 方向可以超出 0–1 范围,以支持平铺。
- Roblox:只能有一个 UV 集,且所有内容都必须位于 0–1 范围内。允许重叠。
注意事项
- 5.0+:UV 选择状态在不同 UV 映射之间共享(
.uv_select_*属性)。旧的BMLoopUV.select代码会失效。 uv.*运算符在编辑模式下运行,并作用于选中的面。请先全选(脚本会处理)。- 即使网格很小,无头模式下使用
CONCAVE/CONVEX和旋转执行uv.pack_islands也可能耗时 2–25 s。迭代时请使用AABB。 - 展开警告“failed to solve island”:该岛没有缝线(形状是封闭的)。请添加缝线。
- 测量纹素密度前请应用缩放,否则密度读数会不正确(脚本使用世界空间,并且已经考虑缩放)。
评论
支持 Markdown