Add soft min and max constraints for frame resolution and cutout edge length properties

This commit is contained in:
2026-09-13 11:22:20 +08:00
parent 18799e8828
commit 2a00ed0ee6
21 changed files with 3834 additions and 1293 deletions

View File

@@ -0,0 +1,71 @@
## 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 设置及同一有效世界边长与网格校验规则