Initial public release
Some checks failed
Test / test (push) Has been cancelled

This commit is contained in:
2026-09-19 21:31:36 +08:00
commit 198fcbf55b
837 changed files with 67239 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
# material-view-adaptation Specification
## Purpose
TBD - created by archiving change configure-material-view-adaptation. Update Purpose after archive.
## Requirements
### Requirement: Preferences expose material view adaptation
AnyImage SHALL 在 Preferences 的 Shading 分组提供 `Adapt to Scene View Transform` 布尔选项,默认关闭。扩展设置及读取入口 SHALL 位于 `preferences.py`,并通过 `addon_preferences()` 读取。
#### Scenario: Preferences use the default
- **WHEN** 用户尚未设置该选项或读取不到扩展偏好
- **THEN** 材质颜色贴图 SHALL 使用关闭适配的行为
### Requirement: Material color space determines alpha presentation
开启适配时,AnyImage SHALL 按当前场景 View Transform 选择既有映射中的 inverse 颜色空间,并使用 STRAIGHT。关闭适配时 SHALL 使用 sRGB + PREMUL。实际回退为 sRGB 时 SHALL 使用 PREMUL,并保持 Preferences 中的适配开关原值。
#### Scenario: A supported view is adapted
- **WHEN** 适配开启,当前场景为 AgX,且 `AgX Base sRGB` 可用
- **THEN** 材质 Color Image SHALL 使用 `AgX Base sRGB` + STRAIGHT
#### Scenario: Other mapped views are adapted
- **WHEN** 适配开启,场景使用 ACES 1.3、ACES 2.0、Filmic 或 Khronos PBR Neutral,且对应空间可用
- **THEN** Color Image SHALL 分别使用 `ACES 1.3 sRGB`、`ACES 2.0 sRGB`、`Filmic sRGB` 或 `Khronos PBR Neutral sRGB`
- **AND** Alpha 模式 SHALL 为 STRAIGHT
#### Scenario: Adaptation is disabled
- **WHEN** 适配关闭,创建任意受支持入口的材质
- **THEN** Color Image SHALL 使用 sRGB + PREMUL
#### Scenario: The scene resolves to sRGB
- **WHEN** 适配开启,但场景为 Standard、视图未匹配、场景不可用或 inverse 空间不被支持
- **THEN** Color Image SHALL 使用 sRGB + PREMUL
#### Scenario: The fallback color space is unavailable
- **WHEN** 所需颜色空间及 sRGB 均无法应用
- **THEN** 配置 SHALL 明确报错并保留贴图之前的有效配置
- **AND** Preferences 中的适配开关 SHALL 保持原值
### Requirement: Material entry points apply the same policy
AnyImage SHALL 在 Plane、Depth Plane、Cutout 和剪贴板 Mesh 材质创建时统一配置 Color Image。最终模式 SHALL 在后续绑定及交付步骤中保留。Depth 与 Normal SHALL 保留各自的数据解释约定。
#### Scenario: A material is created from an edited color result
- **WHEN** 一个 PREMUL 编辑结果进入开启适配的 inverse 材质
- **THEN** 最终材质 Color Image SHALL 为 STRAIGHT
- **AND** 材质交付后 SHALL 保留该模式
#### Scenario: Shadeless material is created
- **WHEN** 用户通过支持 Shadeless 的入口创建材质
- **THEN** Color Image SHALL 应用相同颜色空间与 Alpha 配对策略
### Requirement: Configuration preserves business pixels and source ownership
材质 Color 配置 SHALL 保留原有业务 RGB、Alpha 和完全透明区域 RGB,并在 Pack、保存重载和再次编辑后保持可读取。配置 SHALL 作用于材质专用 Color Image 或独立 Color 副本。
#### Scenario: The source image has other users
- **WHEN** 源 Image 同时被其他对象引用
- **THEN** 配置 SHALL 作用于独立 Color 结果
- **AND** 原 Image 的颜色空间、Alpha 模式和业务像素 SHALL 保持原值
#### Scenario: A color result is packed and reopened
- **WHEN** byte、float、generated、dirty 或 packed 来源的 Color 完成配置并保存重载
- **THEN** 业务 RGB/Alpha SHALL 在既有编码精度内保留
- **AND** 结果 SHALL 保持所选颜色空间和 Alpha 模式
### Requirement: Preferences exclusively control material adaptation
Preferences SHALL 是适配开关的唯一控制来源。新建材质 SHALL 读取当前偏好;已创建的材质颜色贴图 SHALL 保留原配置。创建操作和颜色空间解析 SHALL 保持偏好值。
#### Scenario: The preference changes
- **WHEN** 用户在 Preferences 开启或关闭适配
- **THEN** AnyImage 已创建的材质颜色贴图 SHALL 保持原颜色空间、Alpha 模式和像素
- **AND** 后续新建材质 SHALL 使用新的偏好设置
#### Scenario: A new material shares its source with an existing material
- **WHEN** 切换偏好后,使用已被现有材质引用的源 Image 创建新材质
- **THEN** 新材质 SHALL 使用独立 Color Image 并应用当前偏好
- **AND** 已有材质的贴图及其配置 SHALL 保持原值
#### Scenario: A material is created or an inverse space is unavailable
- **WHEN** 创建材质或颜色空间解析发生回退
- **THEN** Preferences 中的适配开关 SHALL 保持操作前的值
### Requirement: Adaptation affects only material color textures
本选项 SHALL 仅配置 AnyImage 材质的 Color 贴图。Empty、普通图片编辑结果、Depth、Normal 和非目标材质 SHALL 保持原有行为与数据。
#### Scenario: A material color image is shared with an Empty
- **WHEN** 新建材质的源 Color Image 同时被 Empty 引用
- **THEN** 系统 SHALL 为材质 Color 创建独立副本并重新绑定目标节点
- **AND** Empty 引用的原 Image 的颜色空间、Alpha 模式与业务像素 SHALL 保持原值
#### Scenario: Ordinary image editing runs with adaptation enabled
- **WHEN** 开启适配后执行 Mask、Frame、Rectify 或图片编辑 Job
- **THEN** 编辑结果 SHALL 沿用各自已有颜色空间与 Alpha 规则