This commit is contained in:
65
openspec/specs/cutout-axis-convention/spec.md
Normal file
65
openspec/specs/cutout-axis-convention/spec.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# cutout-axis-convention Specification
|
||||
|
||||
## Purpose
|
||||
TBD - created by archiving change standardize-cutout-z-axis. Update Purpose after archive.
|
||||
## Requirements
|
||||
### Requirement: Cutout base mesh matches the source image plane
|
||||
系统 SHALL 直接在源 Image Empty 的局部 XY 平面创建 Cutout BaseShape,基础顶点 MUST 使用 `z = 0`,逆时针正面 MUST 朝局部 `+Z`,且对象放置 MUST 保持裁切区域的世界空间位置。
|
||||
|
||||
#### Scenario: Inspect a Cutout before Geometry Nodes evaluation
|
||||
- **WHEN** 系统已从源图片裁切区域创建 Cutout Mesh,但尚未求值或复用 `O Image Cutout` Modifier
|
||||
- **THEN** Mesh 位于对象局部 XY 平面,正面朝向与源 Image Empty 一致,且 X/Y 范围对应原裁切区域
|
||||
|
||||
#### Scenario: Evaluate an undeformed Surface
|
||||
- **WHEN** Surface Cutout 以零厚度和零平滑求值
|
||||
- **THEN** 求值前后的平面内坐标、正面朝向和世界空间位置保持一致,不执行轴交换或补偿旋转
|
||||
|
||||
### Requirement: Cutout Shape nodes use the local Z axis
|
||||
`O Image Surface`、`O Image Balloon`、`O Image Depth Balloon` 与 `O Image Depth Surface` SHALL 接收局部 XY 平面几何,并统一使用局部 `-Z` 表示从图片平面向内的方向。外层 `O Image Cutout` 的默认 `-Z` 分支 MUST 直通该原生结果。平面内 X/Y 坐标 MUST 不因 Shape 求值而互换。
|
||||
|
||||
#### Scenario: Reuse a Shape group with XY geometry
|
||||
- **WHEN** 任一 Cutout Shape 节点组直接接收位于 XY 平面的输入 Mesh
|
||||
- **THEN** 节点组沿 Z 轴生成 Shape,并保持输入几何的 X/Y 方向
|
||||
|
||||
#### Scenario: Build Surface or Balloon thickness
|
||||
- **WHEN** Surface 或 Balloon 使用正 Thickness 求值
|
||||
- **THEN** 厚度和 Balloon 高度沿局部 Z 轴展开,图片内部一侧位于负 Z 方向
|
||||
|
||||
#### Scenario: Apply depth deformation
|
||||
- **WHEN** Depth Balloon 或 Depth Surface 使用非零 Depth Scale 求值
|
||||
- **THEN** 深度位置在统一的 XY / Z 对象空间中计算,不依赖 X 轴中间坐标系或最终轴变换
|
||||
|
||||
### Requirement: Cutout exposes selectable output axes
|
||||
系统 SHALL 保留 **Inward Axis** Scene Property、Operator 参数和 `O Image Cutout` 节点接口。`-Z` MUST 为默认值并直接使用原生 XY / Z Shape 结果;选择 `+X` 时,外层节点组 MUST 将 Z 轴结果转换为 `+X` 内向对象空间,对象矩阵 MUST 执行配对补偿以保持相同世界空间形状。
|
||||
|
||||
#### Scenario: Create a Cutout from the tool
|
||||
- **WHEN** 用户打开 Cutout 工具设置并选择任一 Shape
|
||||
- **THEN** 工具显示并传递 **Inward Axis**,默认 `-Z` 创建结果直接沿用源 Image Empty 的局部轴
|
||||
|
||||
#### Scenario: Select the positive X output
|
||||
- **WHEN** 用户把 **Inward Axis** 设为 `+X`
|
||||
- **THEN** `O Image Cutout` 将原生 Z 轴 Shape 转换为 `+X` 内向的局部几何,对象矩阵同步补偿,世界空间位置和外观与默认结果一致
|
||||
|
||||
#### Scenario: Reuse a Shape subgroup directly
|
||||
- **WHEN** 调用方绕过外层 `O Image Cutout` 并直接复用任一 Shape 子节点组
|
||||
- **THEN** 子节点组始终使用原生 XY / Z 坐标,不公开或模拟旧 X 轴内部约定
|
||||
|
||||
### Requirement: Depth Surface normals match the Z-axis object space
|
||||
Depth Surface 的 Object Space Normal Artifact SHALL 编码原生 Z 轴 Cutout 对象空间;不可见区域 MUST 使用局部 `+Z` 中性法线。默认 `-Z` 输出 MUST 原样使用该图片;选择 `+X` 输出时,Blender MUST 将其转换到配对的 `+X` 对象空间。
|
||||
|
||||
#### Scenario: Encode a known object-space normal
|
||||
- **WHEN** Server 为 Depth Surface 编码已知的相机空间法线
|
||||
- **THEN** 输出通道直接对应最终 XY / Z Cutout 对象空间,且无需 Blender 后处理即可作为 Object Space Normal 使用
|
||||
|
||||
#### Scenario: Load a Depth Surface normal image
|
||||
- **WHEN** Blender 收到 `object-normal.png` 并以默认 `-Z` 创建 Depth Surface 材质
|
||||
- **THEN** 图片像素保持 Artifact 原值并以 Object Space 连接到材质
|
||||
|
||||
#### Scenario: Load a positive X Depth Surface normal image
|
||||
- **WHEN** Blender 收到 `object-normal.png` 并以 `+X` 创建 Depth Surface 材质
|
||||
- **THEN** 图片通道按 Z 到 X 的配对轴变换转换一次,再以 Object Space 连接到材质
|
||||
|
||||
#### Scenario: Fill an invisible normal region
|
||||
- **WHEN** Object Space Normal 的像素不在可见内容区域
|
||||
- **THEN** 该像素编码局部 `+Z`,不会在正面产生虚假的侧向法线
|
||||
|
||||
Reference in New Issue
Block a user