- 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.
2.5 KiB
2.5 KiB
ADDED Requirements
Requirement: Panorama input uses an exact centered 2:1 crop
The system SHALL prepare panorama conversion from the largest centered integer-pixel rectangle whose width is exactly twice its height. The prepared color material and AI analysis input MUST use the same cropped pixels without stretching, padding, or aspect-ratio resampling.
Scenario: Source is wider than 2:1
- WHEN a user converts a usable static image whose width is greater than twice its height
- THEN the system crops columns equally where possible from the left and right and prepares an exact 2:1 input at the source height
Scenario: Source is narrower than 2:1
- WHEN a user converts a usable static image whose width is less than twice its height
- THEN the system crops rows equally where possible from the top and bottom and prepares the largest exact 2:1 input at or below the source width
Scenario: Source width is odd
- WHEN a usable static source has an odd width that cannot be part of an exact integer-pixel 2:1 rectangle
- THEN the system omits the unmatched column as part of its deterministic centered crop
Scenario: Source is already 2:1
- WHEN a user converts a usable static image whose width is exactly twice its height
- THEN the system prepares the full source image without removing pixels
Requirement: Panorama crop is disclosed to the user
The system SHALL issue one warning whenever panorama input preparation removes source pixels, and the warning MUST identify both the original and cropped pixel dimensions.
Scenario: Conversion requires cropping
- WHEN the computed 2:1 bounds differ from the source bounds
- THEN the system reports a warning containing the source width and height and the cropped width and height
Scenario: Conversion does not require cropping
- WHEN the source bounds already form an exact 2:1 image
- THEN the system does not report a crop warning
Requirement: Unsupported panorama sources remain rejected
The system MUST reject animated images and images too small to produce a positive integer-pixel 2:1 crop before submitting panorama generation.
Scenario: Source is animated
- WHEN a user attempts to convert an animated image
- THEN the system reports an error and does not submit panorama generation
Scenario: Source cannot produce a positive crop
- WHEN a source image cannot provide at least a 2-pixel-wide by 1-pixel-high crop
- THEN the system reports an error and does not submit panorama generation