Files
nan 7dec3b7ca4 Add depth surface processing and layout tools
- Implemented `cutout_depth_surface.py` for face separation and connected thickness calculations for depth surface assets.
- Created `cutout_depth_surface_layout.py` to arrange nodes for staggered calculation branches in depth surface processing.
- Authored `geometry_layouts.py` to define layouts for various geometry assets, including image cutouts and depth planes.
- Introduced `node_layout.py` for shared presentation rules, facilitating node arrangement and validation in geometry-node layouts.
2026-09-07 19:21:03 +08:00

132 lines
7.7 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.
## Purpose
规定 Cutout Depth Surface 在深度断层处保留原表面并分离相邻区域的行为,提供默认关闭、随数值增大而增强的控制,并确保厚度生成后每个分离区域的正面、背面和侧壁保持完整连接。
## ADDED Requirements
### Requirement: 分离控制替换拉伸剔除
系统 SHALL 在 Depth Surface 及外层 Cutout 的 Options 中以 `Split` 替代 `Stretch Limit`。Split SHALL 为范围 `0–1` 的比例输入,默认 `0`,增大时不得降低同一输入几何的切边选择强度。
#### Scenario: 默认关闭
- **WHEN** 用户使用默认 Split `0`
- **THEN** 系统不增加切边,并在 Cleanup 保留的区域上使用原 Depth Surface 采样与投影行为
#### Scenario: 中点与最大强度
- **WHEN** Split 分别设为 `0.5` 和 `1`
- **THEN** 内部深度坡度阈值分别为 `5` 和 `2.5`,且控制值不能超过 `1`;正值对应阈值为 `2.5 / Split`
#### Scenario: 接口替换
- **WHEN** 用户检查新 Cutout 的 Options
- **THEN** 可见 Split,且不存在 Stretch Limit 控制及其拉伸删几何行为
### Requirement: 使用相邻面深度与实际跨度选择共享边
系统 SHALL 以场景尺度的相邻面中心 Z 差除以变形前两面中心的实际距离作为坡度得分;场景深度 SHALL 包含图片标定的 Uniform Scale 和当前 Depth Scale 的幅度。系统 SHALL 只对恰有两个邻面的共享边执行此判断,并安全处理零跨度输入。
#### Scenario: 同一阈值两侧
- **WHEN** Split 为 `0.5`,两个有效邻接的坡度得分分别为 `4` 和 `6`
- **THEN** 得分 `4` 的边不被选中,得分 `6` 的边被选中进行分离
#### Scenario: 等比尺度变化
- **WHEN** 图片几何和经标定的深度同时等比缩放且 Split 不变
- **THEN** 相应共享边的坡度得分和选择结果保持一致
#### Scenario: 深度归零与退化邻接
- **WHEN** Depth Scale 为 `0` 或邻面中心距离为零
- **THEN** 该条件不产生新增切边,且求值不产生非有限坐标
### Requirement: 分离保留表面及两侧独立位置
系统 SHALL 通过拓扑分离保留原始表面的覆盖,使用各自所属侧的数据确定拆后位置。仅设置选边而继续使用共享 UV 的同一个深度值 SHALL NOT 被视为实现两侧分离。
#### Scenario: 零厚度深度阶跃
- **WHEN** Cleanup 为零,规则网格跨越深度阶跃且 Split 选中贯通边界
- **THEN** 原始面全部保留,两侧具有独立顶点与不同场景深度,且没有拉伸剔除造成的缺面
#### Scenario: 开启控制但没有切边
- **WHEN** Split 大于零且所有共享边均未达到分离阈值
- **THEN** 顶点投影与 Split 为零时完全一致,轮廓不因面中心平均而收缩
#### Scenario: 切口保持原相机射线
- **WHEN** 某些共享边被分离
- **THEN** 仅关联顶点使用所属侧的深度,并保持原 XYZ 的相机射线方向;其他顶点保留原采样位置
### Requirement: Cleanup 在拆边后生成厚度前执行
Depth Surface SHALL 在 Split Edges 后、投影及厚度生成前执行一次 Cleanup,按拆分后平面区域的面积使用既有清理阈值。其他 Shape SHALL 保持原 Cleanup 顺序。
#### Scenario: 清理拆出的碎片
- **WHEN** 拆边生成低于 Cleanup 面积阈值的独立区域
- **THEN** 该区域在生成厚度前被清理,其余区域随后投影并加厚
#### Scenario: 厚度不改变清理结果
- **WHEN** Split、基础网格和 Cleanup 保持不变,仅调整 Thickness
- **THEN** 被 Cleanup 保留的平面区域不变
#### Scenario: 关闭分离仍可清理
- **WHEN** Split 为零且 Cleanup 为正
- **THEN** Cleanup 对原平面区域执行一次,不因分离关闭而失效
### Requirement: 厚度侧壁与正背面完整连接
系统 SHALL 在加厚时使每个分离区域的侧壁与正面、背面及相邻厚度段共享连续边界。对定向正确的流形片状输入,各加厚区域 SHALL 形成闭合表面,不得跨区域重新焊接切口。
#### Scenario: 阶跃区域加厚
- **WHEN** 对已拆开的深度阶跃区域设置正厚度
- **THEN** 每个区域的侧壁准确连接其正背面,边界无开口、重叠但未连接的接缝或错位边界
#### Scenario: 分段厚度
- **WHEN** 厚度足以生成多个侧壁段
- **THEN** 各段相接且总厚度符合输入值,侧壁端点与对应表面边界一致
#### Scenario: 近距离独立区域
- **WHEN** 两个独立分离区域的间隔小于既有几何焊接容差
- **THEN** 厚度连接仍保持区域独立,不因全局合并恢复原连接
### Requirement: 正式 Cutout 流程共享分离能力
系统 SHALL 让多个物体共享同一套节点资产,并通过各自修改器传入数据。Split SHALL 仅影响 Depth Surface 分支;外层 Cleanup、Smooth 及其他三种 Shape SHALL 保持各自职责。
#### Scenario: 六物体共享节点
- **WHEN** 三张图片分别创建 High 和 Low 的 Depth Surface
- **THEN** 六个物体引用共享节点组,同一图片的标定值一致,各物体控制值可以独立调整
#### Scenario: 完整修改器链
- **WHEN** Depth Surface 同时启用分离、正厚度及外层 Smooth
- **THEN** 同一区域的正背面和侧壁保持连接,分离区域之间保持独立
#### Scenario: 切换其他 Shape
- **WHEN** 用户改变 Split 后选择其他三种基础 Shape
- **THEN** Split 不改变这些 Shape 的基础拓扑与形状结果
### Requirement: 节点布局清晰可读
资产中全部七个几何节点组 SHALL 遵循 AGENTS.md 的节点组规范:主链从左到右连续排列、辅助分支就近汇入、节点无重叠、保留默认节点标题并隐藏未使用输出。必要的向左引用 SHALL 直接连接,不使用 Reroute 绕行,允许回接连线交叉。
跨区域暂存值 SHALL 使用 `o_depth_*` 命名属性并就近读取,在输出前通过一个 Wildcard 模式的 Remove Named Attribute 统一清理。大步骤之间 SHALL 留白,不放置 String 注解。同一目的的计算 SHALL 聚在主轴同一侧,支线内部间距 SHALL 明显小于与其他部分的距离。独立用途可在两侧错落展开,长算式可超出所服务主链步骤的范围;必要的几何引用可回接。
#### Scenario: 暂存属性生命周期
- **WHEN** Split 和 Thickness 分别开启或关闭
- **THEN** 面、面角和顶点暂存值在正确域传递,输出不残留暂存属性,UVMap 与用户属性保持可用,关闭分支不出现移除缺失属性的警告
#### Scenario: 查看所有几何资产
- **WHEN** 用户打开任一几何节点组
- **THEN** 计算分支按用途聚拢并利用附近空位,长算式横排,局部输入靠近消费节点,布局调整保持原计算结果
#### Scenario: 查看同级分支汇合
- **WHEN** 多个独立同级分支输入 Join Geometry、Menu Switch 或 Combine XYZ 等汇合节点
- **THEN** 分支末端排成一列并对齐输出端,XYZ 三轴按同级输入组织,菜单分支按输入顺序上下排列,共享上游留在公共位置
#### Scenario: 查看同一用途的计算
- **WHEN** 用户查看 Depth Plane 的置换计算或 Depth Surface 的 Split 选边判别
- **THEN** 同一用途的计算聚在主轴同一侧,内部节点间距紧凑,与其他部分之间保留更大的空白,主轴可适当宽松
#### Scenario: 查看分离与厚度流程
- **WHEN** 用户在节点编辑器查看新 Depth Surface
- **THEN** 能沿主链依次辨认采样判别、拆边、投影、厚度和输出,辅助连线不横跨无关区域,节点文字不被遮挡
#### Scenario: 查看成对区域
- **WHEN** 用户检查厚度 Repeat 区域
- **THEN** 成对节点位置正确,循环内部节点清晰排列,区域不遮挡其他节点,Frame 仅用于确有包裹语义的部分