Files
AnyImage/openspec/specs/cutout-quality-meshing/spec.md
nan 198fcbf55b
Some checks failed
Test / test (push) Has been cancelled
Initial public release
2026-09-19 21:31:36 +08:00

4.6 KiB
Raw Blame History

cutout-quality-meshing Specification

Purpose

TBD - created by archiving change use-tangle-cutout-meshing. Update Purpose after archive.

Requirements

Requirement: Unified quality meshing

系统 SHALL 在 Fine Outline 两种状态下使用 Tangle Python 版构建最终基础三角网格,采用 10°质量目标及与有效世界边长 h 对应的最大面积 √3/4 × h²。系统 SHALL 保持现有世界 Edge Length、相对下限和非均匀缩放语义,允许细结构产生短于 h 的边。

Scenario: Shared density controls

  • WHEN 相同物理主体更换分辨率、透明画布或对象旋转后创建 Cutout
  • THEN 同一有效 h 驱动三角化;两种 Fine Outline 模式均使用 Tangle

Scenario: Acute constrained feature

  • WHEN 必须保留的细结构包含尖角或短约束
  • THEN 系统保留结构,报告实际质量统计,不以删除有效结构强行满足最短边或角度目标

Requirement: Outline mode defines holes

系统 SHALL 在关闭 Fine Outline 时填充所有封闭内部孔洞并概括外轮廓;开启时仅在孔最长世界跨度 ≤ 0.25h 且面积 ≤ 0.04h² 时填孔,保留其他孔洞。系统 SHALL 从处理后区域重建组件,且不修改原图片和材质 Alpha。

Scenario: Fine mode keeps a moderately small hole

  • WHEN 孔最长跨度为 0.9h,或细长孔的最长跨度大于 0.25h
  • THEN 开启 Fine Outline 时孔被保留,即使孔面积很小

Scenario: Fine mode fills a micro hole

  • WHEN 封闭孔满足两个微孔条件
  • THEN 开启 Fine Outline 也填充该孔,后续支撑和三角化使用填孔结果

Scenario: Coarse mode fills a nested hole

  • WHEN 关闭 Fine Outline,内部孔包含独立前景岛
  • THEN 填孔后区域重新合并,不产生重叠面;与外部背景相通的凹口仍属于外轮廓

Requirement: Continuous interior support

系统 SHALL 在两种模式下按实际质量网格补足内部支撑。系统 SHALL 拆分两端位于边界的内部弦,为孤立全边界三角形添加内部点,保持细分支经关节到主体的连续内部连接。

Scenario: Coarse branch requires support

  • WHEN 低密度网格的细腿或根部缺少内部顶点
  • THEN 系统添加局部支撑,Poisson 求解后内部顶点高度为正,不产生全零高度三角形

Scenario: Dense region already has support

  • WHEN 网格区域已经具有连续内部支撑
  • THEN 系统保持该区域,不生成额外全局中线约束,不重新三角化

Requirement: Final constraints and topology are validated

系统 SHALL 验证面积、轮廓约束链、孔洞和组件数量、非退化性,且局部支撑拆分 SHALL 保持已验证的轮廓、拓扑与面朝向。像素角自接触 SHALL 做亚像素分离并重新验证。

Scenario: Pixel-corner hole contact

  • WHEN 孔洞轮廓在像素角形成零宽自接触
  • THEN 系统分离接触点,生成拓扑有效且保留孔洞的网格

Scenario: Mesher loses a boundary constraint

  • WHEN 后端遗漏边界约束或产生错误面积
  • THEN 系统明确失败,不创建残缺对象

Requirement: Height support preserves mesh quality

系统 SHALL 在单次局部拆分中补足支撑,并限制累计顶点数。最终角度允许低于基础三角化的 10°目标,验收 SHALL 同时检查角度、连续正高度与压平面积。

Scenario: Connected depth samples collapse

  • WHEN 深度投影将相邻顶点映射到数值上重合的位置
  • THEN 系统按当前平均边长的百万分之一合并已连接重合点,壳体厚度保持正确方向

Requirement: Blender distribution and bounded execution

系统 SHALL 分发固定版本的 Tangle Python 源码和 MIT 许可,通过内存数值接口调用,仅使用标准库作为 Tangle 自身依赖。系统 SHALL 隔离调用状态,保持 Blender 数据创建在主线程,并对资源超限明确终止。

Scenario: Clean Blender installation

  • WHEN 在项目支持的 Blender 环境加载插件并创建 Cutout
  • THEN Tangle 无需用户 pip 安装或外部编译器即可调用,源码和许可被分发规则收录

Scenario: Repeated and failed calls

  • WHEN 连续构建不同输入,包含一次无效输入或资源超限
  • THEN 后续调用不受先前状态影响,Decimal 上下文保持隔离,失败不创建残缺对象

Scenario: Local and AI return paths

  • WHEN 同步创建或 AI 返回后创建 Cutout
  • THEN 两者采用捕获的 Fine Outline 设置及同一有效世界边长与网格校验规则