Files
AnyImage/openspec/changes/use-tangle-cutout-meshing/specs/cutout-quality-meshing/spec.md

72 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## ADDED 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 设置及同一有效世界边长与网格校验规则