From 4f18c770c1114e0012afee9a860a3382ff4611ed Mon Sep 17 00:00:00 2001 From: ud18010 Date: Tue, 21 Jul 2026 16:17:36 +0800 Subject: [PATCH] =?UTF-8?q?ModelTranslator:=20UVPM=20=E5=BC=83=E7=94=A8?= =?UTF-8?q?=E5=90=AF=E5=8F=91=E5=BC=8F(headless=20=E9=9A=8F=E6=9C=BA?= =?UTF-8?q?=E5=B4=A9=E5=BC=95=E6=93=8E),=E5=8F=AA=E4=BF=9D=E7=95=99?= =?UTF-8?q?=E6=97=8B=E8=BD=AC15=C2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 系统调试结论:UVPM heuristic 搜索在 headless 下随机崩溃引擎进程 (well1500 3/3、gargoyle 1/2),确定性差;旋转步进无辜。改为只用 rotation_step=15 稳定小提升(gargoyle 52.3→55.6%、well1500 +uvpm 稳定)。 移除 _uvpm_pack_once/重试与 UVPM_HEURISTIC_TIME。 Co-Authored-By: Claude Opus 4.8 (1M context) --- Tools/ModelTranslator/bl_decimate.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Tools/ModelTranslator/bl_decimate.py b/Tools/ModelTranslator/bl_decimate.py index c7831b30..592f6666 100644 --- a/Tools/ModelTranslator/bl_decimate.py +++ b/Tools/ModelTranslator/bl_decimate.py @@ -141,8 +141,7 @@ PACK_MARGIN = 0.002 # 岛间距 ≈ 2048 图 4px UVPM_EXT = "bl_ext.user_default.uvpackmaster4" # UVPackmaster 4 扩展模块名 UVPM_PIXEL_MARGIN = 4 # UVPM 岛间距(像素),与 PACK_MARGIN * UVPM_TEX_SIZE 同口径 UVPM_TEX_SIZE = 2048 -UVPM_ROTATION_STEP = 15 # UVPM 旋转步进(度);比默认 90 更细,利于薄斜条对齐 -UVPM_HEURISTIC_TIME = 10 # UVPM 启发式搜索秒数上限(默认 0=无限,必须给正值上限) +UVPM_ROTATION_STEP = 15 # UVPM 旋转步进(度);比默认 90 更细,利于薄斜条对齐(启发式因引擎崩溃已弃用) SEAM_ANGLE_SWEEP = (55.0, 45.0, 35.0) # 首选 SEAM_ANGLE_DEG 不过门时依次下探的 seam 角度 STRETCH_ITERS = 30 # minimize_stretch 松弛迭代次数 REL_WELD = 1e-4 # 焊接距离占局部包围盒对角线比例(避免 cm/m 单位差异导致绝对阈值失准) @@ -299,7 +298,9 @@ def _uvpm_set(p, name, value, warnings): def _uvpm_repack(obj, warnings): """UVPM4 重排当前 UV 布局,成功返回 True;任何失败记警告返回 False, - 保底布局(pack_islands/smart_project)原样保留。""" + 保底布局(pack_islands/smart_project)原样保留。rotation_step 调细以利薄斜条对齐。 + 注:UVPM 启发式搜索(heuristic)在 headless 下会随机崩溃引擎进程(Engine process died), + 确定性/稳定性差,故不启用——只用旋转增强这一稳定杠杆。""" global _uvpm_failed if _uvpm_failed: return False @@ -312,8 +313,6 @@ def _uvpm_repack(obj, warnings): p.pixel_margin_tex_size = UVPM_TEX_SIZE _uvpm_set(p, "rotation_enable", True, warnings) _uvpm_set(p, "rotation_step", UVPM_ROTATION_STEP, warnings) - _uvpm_set(p, "heuristic_enable", True, warnings) - _uvpm_set(p, "heuristic_search_time", UVPM_HEURISTIC_TIME, warnings) bpy.context.scene.tool_settings.use_uv_select_sync = True bpy.context.view_layer.objects.active = obj bpy.ops.object.mode_set(mode='EDIT')