Refactor depth-related tests and improve parameter handling in image cutout symmetry

This commit is contained in:
2026-09-17 00:12:57 +08:00
parent 78bbff6351
commit c681d51fd1
20 changed files with 291 additions and 239 deletions

View File

@@ -61,9 +61,9 @@ build_surface_camera(切口点取相邻面深)
删除改用 FACE 域,并去掉随后的残留边清理。理由是节点链按消费域求值:Plane 的判定链没有固定到点域,切到 FACE 后 UV 属性取该面四角平均,等于在面中心采样深度,因此面中心仍有效的面保留下来,切口不再比阈值轮廓多退一圈;点删除遗留的悬空边也随面删除一并消失,不需要第二次 Delete Geometry。
Panorama 的判定链同样改在面心求值:无效采样用面中心经纬(`combine(face_u, face_v)`)取 Closest 纹理,再固定到 FACE 域供删面使用,点域判定只留给「有效区与无效区之间的过渡带」和深度回退。面心经纬由面中心位置反算,不经过点域经度的平均,因此不会在 seam 处折返。判据统一后 Panorama 的切口与 Plane 一样落在面中心轮廓上,不再比阈值轮廓多退一圈。
Panorama 的判定链同样改在面心求值:无效采样用面中心经纬(`combine(face_u, face_v)`)取 Closest 纹理,再固定到 FACE 域供删面使用。面心经纬由面中心位置反算,不经过点域经度的平均,因此不会在 seam 处折返。判据统一后 Panorama 的切口与 Plane 一样落在面中心轮廓上,不再比阈值轮廓多退一圈,无效判定也只剩这一处,不再有过渡带删面或按深度通道判无效的第二套规则。
面心判定让切口点可能落在无效侧:自身采样无效、但所属面中心有效。这些点由切口规则取相邻面深,所以 `Invalid Distance` 只在 Depth Mask 关闭时生效,判据改为「相邻面过半无效」。无效区连同过渡带一起保留时,无效区的点仍落到背景距离,切口点不再被背景距离顶出去。
面心判定让切口点可能落在无效侧:自身采样无效、但所属面中心有效。这些点由切口规则取相邻面深,不会被当成无效区。Depth Mask 关闭时被保留的无效面则整片落到 `Dome Radius`,它同时是 Depth Scale 为 0 时的球半径:`radius = Dome Radius + Depth Scale × (d − Dome Radius)`。两个作用共用同一个值,无效面拿到的就是同一次 `alpha < Mask Threshold` 的结果。
## Risks / Trade-offs

View File

@@ -8,6 +8,7 @@
- `O Image Depth Plane` 的原画幅外框与 mask 切口同规则:所有自由边界点都取相邻面采样,切口规则不带例外,外框也不再保留自身采样。
- `O Image Depth Panorama` 不传排除项:球面闭合,删除后出现的自由边界只有 mask 切口。
- Depth Mask 的删除由点改为面:面中心的采样低于阈值才删除该面,切口因此不再比阈值轮廓多退一圈,残留边也不需要单独清理。
- `O Image Depth Panorama` 去掉 `Invalid Distance`,无效判定只剩 mask 那一处;Depth Mask 关闭时保留的无效面落到 `Dome Radius`,它同时是 Depth Scale 为 0 时的球半径。
- `build_surface_camera` 不再接受排除字段:切口规则覆盖全部自由边界点,取消上一版「外框例外」。
- 平滑顺序保持不变:切口先取面深,切口带的深度模糊与位置平滑照常在其后作用。
- 重建 `O_AnyImage.blend`,补齐切口面深与实位不变的断言。

View File

@@ -52,6 +52,20 @@ Depth Mask 的删除 MUST 按面判定:面中心的采样低于 Mask Threshold
- **WHEN** Depth Mask 删除整片面
- **THEN** 输出的边都至少属于一个保留面,没有只由删除残留形成的边
### Requirement: Panorama 的无效面落到 Dome Radius
`O Image Depth Panorama` 的 `Dome Radius` MUST 同时承担两个作用:Depth Scale 为 0 时的球半径,以及 Depth Mask 关闭时被保留的无效面所落到的距离。无效判定 MUST 复用同一次 Mask Threshold 比较,MUST NOT 另行采样或按深度通道判断。输出半径 MUST 为 `Dome Radius + Depth Scale × (d − Dome Radius)`,`d` 为有效点的距离采样。
#### Scenario: 关闭 Depth Mask 保留无效区
- **WHEN** Depth Mask 关闭,且存在 alpha 低于 Mask Threshold 的面
- **THEN** 这些面整片落在 Dome Radius,其余面保持自身距离
#### Scenario: Depth Scale 为 0
- **WHEN** Depth Scale 为 0
- **THEN** 输出是半径为 Dome Radius 的球面
### Requirement: 原画幅外框的平滑保护独立于切口规则
`O Image Depth Plane` 的原画幅外框(UV 边距为 0 的点)MUST 继续作为 `smooth_boundary_camera` 与 `smooth_cut_boundary` 的保护范围,边界带平滑 MUST NOT 因此改变切口规则的覆盖范围。

View File

@@ -26,4 +26,4 @@
- [x] 4.1 运行 `uv run node-group build`,确认节点资产构建与校验通过、Capture Attribute 为零
- [x] 4.2 检查源码与测试中不再有 `always_vertex` 及旧路径引用,确认最终差异只涉及本次范围
- [x] 4.3 `O Image Depth Panorama` 的无效判定改在面心求值,`Invalid Distance` 只在 Depth Mask 关闭时按相邻面生效,并补面心轮廓与切口点半径断言
- [x] 4.3 `O Image Depth Panorama` 的无效判定改在面心求值并去掉 `Invalid Distance`,Depth Mask 关闭时保留的无效面整片落到 `Dome Radius`(同时是 Depth Scale 0 的球半径),并补面心轮廓、切口点半径与 dome 回退断言