[Bug] Trellis2UpsampleStage hardcodes lr_resolution = 512; breaks when VaeDecodeStructureTrellis2 resolution is 64 (coordinates overflow by

该问题出现在 ComfyUI 的 Trellis2 工作流中,当 VaeDecodeStructureTrellis2.resolution = 64 且经过 Trellis2UpsampleStage 时,会产生条纹/窗帘状网格伪影。优先排查 comfy_extras/nodes_trellis2

快速结论:该问题出现在 ComfyUI 的 Trellis2 工作流中,当 VaeDecodeStructureTrellis2.resolution = 64 且经过 Trellis2UpsampleStage 时,会产生条纹/窗帘状网格伪影。优先排查 comfy_extras/nodes_trellis2.py 中是否仍硬编码 lr_resolution = 512,并检查是否已应用修复补丁。

适用环境:ComfyUI(官方核心模板 “Pixal3D & TRELLIS.2: Image to Model”),内置 VaeDecodeStructureTrellis2Trellis2UpsampleStage 节点。报告者确认使用任何输入图像均可复现(人像更明显),不依赖自定义节点。GPU 验证由报告者 Jir0-hub 完成(patch 已在本地验证),提交者无 GPU,仅做了 CPU 推理验证。

最快修复方案:暂无确认的一步修复方案。目前主要修复 PR(#16114)经维护者测试未生效,且主分支仍保留硬编码代码。可优先尝试:等待官方合并修复(提交者分支上有已验证补丁),或暂时将 resolution 设回 32 以绕过问题。

注意事项:该修复 PR 已因验证不充分被搁置,未通过端到端视觉验证。github 讨论中提交者(非 GPU 拥有者)提供了 CPU 数值验证,但用户需自行承担在 GPU 上测试的验证责任。若遇到 OOM,可能是 1024px DINO 编码器导致,可尝试 --lowvramtarget_resolution 1024

问题场景

在 ComfyUI 中使用官方内置模板 “Pixal3D & TRELLIS.2: Image to Model”,仅将 VaeDecodeStructureTrellis2.resolution 从默认的 32 改为 64 后,经 Trellis2UpsampleStage(目标分辨率 1024 或 1536)输出网格被破坏:出现细长垂直薄片/“窗帘”状几何体,网格非流形边较多(原始解码约 35% 开放边界,对比 32 路径约 15%),且无任何错误或警告日志。独立于采样步数、目标分辨率、光照/视角、VRAM 余量等参数,仅 32↔64 切换或绕过上采样节点会改变结果。

报错原文

[Bug] Trellis2UpsampleStage hardcodes lr_resolution = 512; breaks when VaeDecodeStructureTrellis2 resolution is 64 (coordinates overflow by 2x → striped/curtain geometry)

原因分析

这并非运行时异常,而是代码逻辑问题导致的静默失真。可能原因:comfy_extras/nodes_trellis2.pyTrellis2UpsampleStage.execute 硬编码了 lr_resolution = 512(第 358 行)。内部的 shape_vae.upsample_shape(..., upsample_times=4) 执行 4 级 ×16 上采样:当结构分辨率为 32 时,密集坐标范围为 0–511(适配 512 ✓);当结构分辨率为 64 时,密集坐标范围为 0–1023,仍被当作 512 处理(✗ 扩大了 2 倍)。随后 _quantize_unique 在 Pixal3D 分支计算 (c + 0.5) * (grid_res - 1) / lr_resolution 时,映射的索引几乎一半(约 49.6%)超出目标网格范围,导致几何坐标溢出和条纹伪影。

环境排查

  • 工具版本:ComfyUI 主分支(报告时 main 仍硬编码 lr_resolution = 512);comfyui-workflow-templates 0.11.54(内置模板)。
  • 节点VaeDecodeStructureTrellis2.resolution(64)、Trellis2UpsampleStage(target 1024/1536)、VaeDecodeShapeTrellis(旁路对照)——均为核心实现,无自定义节点。
  • Python / CUDA / 显卡:Issue 未给出具体版本;报告者(Jir0-hub)有 GPU 可复现,提交者无 GPU(仅 CPU 数值验证)。若 64 路径遇 OOM,可能为 1024px DINO 编码器资源问题。

解决步骤

  1. 复现确认:加载模板 “Pixal3D & TRELLIS.2” → 载入任何正脸人像 → 仅将 VaeDecodeStructureTrellis2.resolution 由 32 改为 64 → 执行队列 → 从 VaeDecodeShapeTrellis 的 “Create 3D File (from Mesh)” → “Preview 3D” 查看网格。
  2. 对比基线:相同流程将 resolution 保持 32,确认网格正常;再测试绕过 Trellis2UpsampleStage(直接解码 #18 KSampler 输出),确认 64 解码本身无问题——以此锁定错误发生在 upsample 阶段而非 decode。
  3. 检查代码路径:打开 comfy_extras/nodes_trellis2.py,检查 358 行附近是否仍为 lr_resolution = 512,以及 369/383 行的调用上下文,确认是否已有人提交本地补丁(将 lr_resolution 基于实际结构分辨率推导)。
  4. 优先应用已验证补丁(可尝试):Jir0-hub 报告已在本地 GPU 上验证过修复补丁(PR #16114 分支),虽然后续维护者测试后认为 PR 未生效,但仍可优先尝试从该分支重制补丁并在本地完整工作流中进行肉眼和网格质量双重验证。
  5. 规避方案(确认有效):若无法立即修复,可将 VaeDecodeStructureTrellis2.resolution 恢复为 32(或绕过 upsample 节点),以消除伪影;或留意官方主分支是否已合并修复(当前 issue 关闭时 main 仍硬编码)。
  6. 若遇 OOM(64 路径额外加载 1024px DINO):可尝试在启动参数中加 --lowvram,并将 target_resolution 降低到 1024。

验证方法

修复后,以 resolution=64 运行完整图形,在 “Preview 3D” 中检查:

  1. 网格表面无竖条/窗帘状薄片;
  2. 对比 resolution=32 的网格边界占比(原始 64 路径约 35% 开放边界 → 修复后应接近 32 路径的 ~15%);
  3. 显式确认“不可见”问题消失:全程无报错日志但输出已干净,配合数值验证(如检查坐标最大值是否落在目标网格范围内,无溢出)。

参考来源

Comfy-Org/ComfyUI #16100

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22287

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注