【用途】 该技能面向 Blender 5.2 中的重拓扑与 UV 制作,用于把高模或扫描/生成网格处理成可用于游戏或动画的低模,并为其准备 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 可完成该操作。
【UV:展开】
- --method seams:基于角度的展开(Angle Based),配合已标记的接缝。
- --method min_stretch:SLIM,4.3+,在有机体上扭曲最小。
- --method smart:硬表面/自动方式,--angle 66。 矩形 UV 岛可以用 Follow Active Quads 拉直(仅实时操作),以便贴花和像素网格对齐。
【UV:打包与纹素密度】 平均 UV 岛缩放后按像素留边距打包:2k → 8 px,4k → 16 px,移动端 1k → 4 px。--shape CONCAVE 打包最紧但无界面时较慢,默认 AABB 是即时的。 纹素密度(scripts/texel_density.py --res 2048):同一资产内密度差异应 ≤ 1.3。可用 --set <px/m> 设置;若 fits_0_1 为 false,需要改分辨率或密度。质检由 blender-asset-qa 报告零面积 UV 面和重叠百分比。
【纹素密度目标(px/m,工作室基线而非硬性规定)】
- 第一人称英雄/武器:1024–2048
- 第一人称环境:512–1024
- 第三人称游戏:主机/PC 512,移动端 256
- 俯视/策略:128–256
- Roblox:每种纹理约 256–512;5×5 studs → 256²,10×10 → 512²,20×20 → 1024² 同一场景内所有对象应共享同一密度。例外是英雄资产,可保持在 2 倍以内。
【特殊情况】
- 镜像/堆叠 UV 可节省空间但会破坏唯一烘焙。烘焙时把重复岛精确移动 +1 U(移到 0–1 之外),之后再移回。其法线贴图必须是镜像安全的(支持 MikkTSpace 的引擎由切线空间处理)。
- 光照贴图 UV2(--lightmap,生成 UVMap_Lightmap):不能重叠,每个岛都在 0–1 内,留足边距。Unreal/Unity 可自行生成;只在引擎管线需要时提供。UV0 保持激活用于贴图。
- UDIM(影视/英雄):岛放在 1001+ 的平铺中(每格 U 偏移 1)。纹理节点 image source="TILED"。游戏引擎大多不支持 UDIM。
- Trim sheet:先展开长条,再把岛缩放/移动到 trim 行上(V 位置来自 trim 布局)。U 方向可以为平铺超出 0–1。
- Roblox:恰好一套 UV,全部在 0–1 内。允许重叠。
【注意事项】
- 5.0+:UV 选择在多个 UV 贴图间共享(.uv_select_* 属性),旧的 BMLoopUV.select 代码会失效。
- uv.* 操作符在编辑模式下运行,作用于选中的面。需要先全选(脚本已处理)。
- 无界面运行时 uv.pack_islands 配合 CONCAVE/CONVEX + 旋转即使在很小的网格上也可能耗时 2–25 秒。迭代时用 AABB。
- 展开时报 “failed to solve island”:该岛没有接缝(封闭形状),需要添加接缝。
- 测量纹素密度前要先应用缩放,否则密度读数不正确(脚本使用世界空间并已考虑缩放)。