feat(cutout): implement boundary padding for cutout textures

- Introduced a new `Boundary Padding` preference in the Cutout Tool with a default of 2 px and a configurable range of 1-4 px.
- Updated the Cutout client to establish inward mapping from the final Mask, sampling in a fixed direction and processing independent material RGBA and Depth.
- Enhanced the handling of RGBA and Depth during cutout operations, ensuring proper mapping and preservation of source data.
- Added tests to validate the new boundary padding functionality and its integration with existing cutout processes.

feat(geometry): remove overall mesh smoothing from geometry nodes

- Removed the `Smooth` input from several geometry node groups to eliminate unnecessary overall mesh smoothing.
- Retained `Smooth Weight` for depth nodes while removing it from Cutout and Relief Plane nodes.
- Ensured that boundary, normal, and fill smoothing behaviors remain intact and consistent.
- Updated tests and documentation to reflect the changes in node interfaces and behaviors.

feat(normals): scale tangent normals with depth

- Reused the existing `o_normal_reduction` attribute to adjust Tangent Normal strength based on the geometry's `Depth Scale`.
- Ensured that Tangent Normal strength is consistent with the geometry depth, preserving full strength for materials that do not provide the attribute.
- Updated tests to verify the correct behavior of normal strength adjustments in both Tangent and Object Space.
This commit is contained in:
2026-09-15 00:40:24 +08:00
parent ab282e4fdf
commit 591e62085a
93 changed files with 1915 additions and 2851 deletions

View File

@@ -0,0 +1,34 @@
## ADDED Requirements
### Requirement: 主节点组不得执行末端整体 mesh smooth
系统 SHALL 让 `O Image Cutout`、`O Image Depth Cutout`、`O Image Depth Plane`、`O Image Depth Panorama` 与 `O Image Relief Plane` 在主体几何构建完成后直接进入着色或输出阶段,不得追加由通用 `Smooth` 控制的整体顶点位置平滑。
#### Scenario: 节点组接口不再提供整体 smooth
- **WHEN** 检查任一受影响节点组的公开输入接口
- **THEN** 该接口不包含 `Smooth`
#### Scenario: 输出路径不经过整体 smooth
- **WHEN** 构建任一受影响节点组并追踪其最终业务几何到输出的连接
- **THEN** 输出路径不包含原先由 `Smooth` 和 `Smooth Weight` 控制的整体 `expand_smooth()` 后处理
### Requirement: Smooth Weight 按独立消费者保留
系统 MUST 在 `Smooth Weight` 仍控制 `Boundary Smooth` 时保留该输入,并在它仅服务已删除的整体 smooth 时删除该输入。
#### Scenario: 深度节点组保留共享权重
- **WHEN** 检查 `O Image Depth Cutout`、`O Image Depth Plane` 或 `O Image Depth Panorama`
- **THEN** 节点组仍提供 `Smooth Weight`,且该值继续参与边界平滑计算
#### Scenario: 无独立消费者的权重被删除
- **WHEN** 检查 `O Image Cutout` 或 `O Image Relief Plane`
- **THEN** 节点组接口不包含 `Smooth Weight`
### Requirement: 专用平滑行为保持可用
系统 SHALL 保留与末端整体 mesh smooth 不同职责的边界平滑、法线平滑、填充墙体平滑和 smooth shading。
#### Scenario: 深度边界和法线控制仍存在
- **WHEN** 检查受影响深度节点组的接口与计算路径
- **THEN** 既有 `Boundary Smooth` 与适用的 `Normal Smooth` 仍按原职责工作
#### Scenario: 填充与着色平滑不受影响
- **WHEN** 构建相关节点组并检查输出
- **THEN** `Fill Smooth` 仍仅用于生成墙体内部,且既有 smooth shading 仍应用于对应表面