- Implemented viewport.py for handling 3D view projections, gestures, and overlay drawing. - Created refine_image_selection.py to manage the refinement of gesture masks and output image bounds. - Added selection module with refine_selection.py to process and crop images based on alpha channel visibility. - Introduced __init__.py for selection module to expose refine_selection function.
45 lines
2.2 KiB
Markdown
45 lines
2.2 KiB
Markdown
# Upscale
|
||
|
||
Upscale 从当前 Image Empty 读取单图或多帧媒体,在输入长边允许时生成 4× RGBA 结果并替换原图。
|
||
|
||
## 执行过程
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
Empty["Image Empty"] --> Gate{"长边小于输入上限?"}
|
||
Gate -- "否" --> Disabled["禁用或报告错误"]
|
||
Gate -- "是" --> Prepare["准备媒体输入"]
|
||
Prepare --> Job["upscale-image Job"]
|
||
Job --> RGB["分块执行 4× RGB 推理"]
|
||
Job --> Alpha["独立缩放 Alpha"]
|
||
RGB --> Merge["合并 RGBA"]
|
||
Alpha --> Merge
|
||
Merge --> Replace["导入并替换当前 Image"]
|
||
```
|
||
|
||
模型只处理 RGB,Alpha 单独放大后再合并。Blender 侧在提交前检查 **Maximum AI Input Size**,Server 模型层也应用同一个输入上限。
|
||
|
||
## 节点说明
|
||
|
||
### 检查尺寸并准备输入
|
||
|
||
入口位于 `operators/upscale.py`。`UpscaleImage.poll()` 读取 `preferences.py` 中的 **Maximum AI Input Size**;当前 Image 长边必须严格小于该值。菜单显示的预计尺寸来自同一文件的 `upscale_output_size()`。
|
||
|
||
执行时,`upscale.py` 冻结当前模型和输入上限,并通过 `common/image.py` 准备单图、视频或序列输入。Packed Image 与内存修改结果会导出临时文件,多帧输入保留帧起点和抽帧设置。
|
||
|
||
### 分块放大 RGB
|
||
|
||
`UpscaleImage` 提交 `upscale-image` Job。`server/jobs/upscale.py` 展开媒体帧并逐帧调用模型;`server/models/upscale.py` 负责输入约束、RGB/Alpha 分离和结果合并,`server/models/onnx_upscale.py` 以 256 × 256 分块执行 4× ONNX 推理并带入相邻上下文。
|
||
|
||
`server/media/resolution.py` 统一解释输入长边上限。Blender 侧要求源图长边小于该值,结果长边小于该值的四倍。
|
||
|
||
### 合并 Alpha
|
||
|
||
`server/models/upscale.py` 使用 Lanczos 将 Alpha 放大到目标尺寸,再与 4× RGB 合并为 RGBA。Provider 资源不足时,Server 释放当前 Upscale Session,并返回降低输入上限或改用 CPU 的提示。
|
||
|
||
### 导入并替换结果
|
||
|
||
响应阶段回到 `operators/upscale.py`,通过 `common/image.py` 读取 `upscale.*` 结果序列并替换当前 Empty。
|
||
|
||
后续 Upscale 和 Depth Plane 都以当前结果 Image 为输入。
|