- Removed the `always_vertex` parameter from `build_surface_camera` to streamline depth sampling for cutouts and ensure consistent behavior across depth plane and panorama. - Updated depth sampling logic to ensure that all free boundary points, including the original frame of the depth plane, use neighboring face depth instead of their own texture sampling. - Adjusted the depth mask deletion process to operate on faces rather than points, eliminating the need for additional cleanup of dangling edges. - Ensured that the cutout rules are consistently applied across all relevant nodes, removing exceptions and simplifying the logic. - Updated tests to verify the new behavior, ensuring that cutout points follow the depth of adjacent faces and that the original frame maintains its depth sampling. - Refactored geometry handling in multiple depth-related nodes to improve clarity and maintainability.
4.4 KiB
4.4 KiB
ADDED Requirements
Requirement: 边界平滑固定开启 Pin Sharp 与 Pin Boundary
O Image Cutout Symmetry 的 Seam Smooth,以及 O Image Depth Plane、O Image Depth Cutout、O Image Depth Panorama 的 Boundary Smooth SHALL 固定使用 Pin Sharp = 1 与 Pin Boundary = 1,且 MUST NOT 为这两个 pin 新增或修改 modifier 输入。
Scenario: 边界点按边界条带松弛
- WHEN 平滑命中边界点,包括 Split 形成的切边与对称平面的切缝
- THEN 该点的目标位置取自边界条带自身权重 0.5 的一步 Blur
- AND 该点不被内部 Blur 结果拖拽,轮廓不因平滑收缩
Scenario: 边界顶点仍沿边界移动
- WHEN 边界上存在阶梯状顶点
- THEN 顶点沿边界移动以消除阶梯
- AND 顶点不会被固定在原位
Scenario: 尖锐处少动
- WHEN 平滑范围内存在法线不连续的尖锐处
- THEN 该点的平滑权重乘以
|Blur(Normal, 10)| - AND 尖锐处的位移小于同等权重下平坦区域的位移
Requirement: Fill Smooth 平滑衔接带
O Image Cutout Symmetry 的 Fill Smooth SHALL 平滑 front 表面与它挤出的侧壁之间的衔接带。锚点 SHALL 是 front 的完整边界带,即外侧轮廓与对称面上的切缝,SHALL 按四圈渐变衰减并覆盖对称轴上的点。该衔接处不是网格边界,因此 MUST NOT 套用 Pin Boundary,但 SHALL 保留 Pin Sharp。
Scenario: 衔接带使用邻域平均
- WHEN
Fill Smooth大于 0 - THEN 受力点按邻域平均松弛,不切换到边界条带目标
Scenario: 衔接带保留锐度权重
- WHEN 衔接带范围内存在法线不连续的尖锐处
- THEN 该点的平滑权重乘以
|Blur(Normal, 10)|
Scenario: 衔接带覆盖对称轴上的点
- WHEN
Fill Smooth大于 0 - THEN 对称轴上的点与外侧轮廓同样产生面内位移
Scenario: 衔接带比两圈更宽
- WHEN
Fill Smooth大于 0 - THEN 从轮廓向内第三圈的点仍然受力
- AND 超出配置圈数的点保持原位
Requirement: 作用范围保持渐变语义
Boundary Smooth、Fill Smooth、Seam Smooth SHALL 继续表示平滑生效的渐变区域与迭代次数,落在范围外的顶点 MUST 保持原位。
Scenario: 范围外不动
- WHEN 任一平滑的迭代次数大于 0
- THEN 落在渐变范围外的顶点位置与输入完全一致
- AND 拓扑与 UV 保持不变
Scenario: Cutout 轮廓与切边权重差异
- WHEN Depth Cutout 同时存在原始轮廓与 Split 切边
- THEN Split 切边使用完整权重
- AND 原始轮廓使用 0.1 倍权重
- AND Depth Plane 与 Panorama 的轮廓权重保持 1.0
Scenario: 关闭平滑
- WHEN 迭代次数为 0
- THEN 输出几何与未平滑的基线完全一致
Requirement: 共享平滑实现
common/smoothing.py SHALL 提供单一的平滑构建函数:pin 形态使用边界条带目标与锐度系数,普通形态只使用邻域平均目标。各节点组只提供几何、迭代次数、作用范围、权重、可移动分量与是否 pin;系统 MUST NOT 为单个节点组保留独立的平滑实现或旧偏移路径。
Scenario: 站点调用一致
- WHEN 任一节点组构建顶点位置平滑
- THEN 该组只传入几何、迭代次数、作用范围、权重、允许移动的分量与是否 pin
- AND 边界条带分支、锐度权重与普通邻域平均目标由共享实现生成
Scenario: 对称平面约束
- WHEN
O Image Cutout Symmetry应用 Fill 或 Seam 平滑 - THEN 位移限制在对称平面内的分量
- AND 镜像焊接与闭合性保持不变
Requirement: 属性平滑保持现状
法线平滑、深度模糊、掩码与统计模糊 MUST NOT 纳入 pin,保持既有节点与权重。
Scenario: 属性平滑不受影响
- WHEN 构建 Depth Cutout、Depth Plane 或 Panorama
- THEN 法线平滑与深度模糊的节点结构、迭代次数与权重与变更前一致
Requirement: 资产与测试同步
源码、保存资产与测试 SHALL 保持一致;几何节点及嵌套组 MUST 保持 Capture Attribute 为零。
Scenario: 重建资产
- WHEN 执行节点资产构建并在独立 Blender 进程重新加载
- THEN 资产与源码构建结果通过相同的行为验证
- AND Capture Attribute 检查通过