Files
hfut-bishe/doc/editor-workflow.md
2026-04-07 20:55:30 +08:00

348 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 编辑界面功能流程说明
本文档用于定义编辑界面的核心模块、用户操作流程和各模块之间的数据流,作为实现与联调依据。
## 1. 功能模块
系统包含以下功能模块:
1. 编辑界面
2. 深度估计
3. 分层与遮罩
4. 补全与纹理延展
5. 漫游渲染与预览
6. 热点与叙事运行
其中,`热点与叙事运行` 用于内部部分场景生成多帧动态化效果,作为静态场景的局部增强能力。
## 2. 总体流程(用户视角)
用户在编辑界面的标准操作流程如下:
1. 打开程序后选择图片。
2. 对图片进行裁剪,确定编辑画布范围。
3. 对裁剪后的全部图像执行深度估计。
4. 执行深度估计。
5. 估计完成后展示深度叠加图,并支持开关切换(显示/隐藏叠加)。
6. 进入圈选与点选阶段,系统先基于深度图自动选出深度变化较明显的候选区域,再由人工圈画/点选补充与修正,确定前景目标与背景区域。
7. 将结果输入分层程序,按深度关系分离目标物体,未分离区域作为底层背景。
8. 对被分层出的区域,支持右键触发补全,输入提示词进行内容补全与纹理延展。
9. 对被分层出的区域,支持右键输入提示词进行叙事帧生成。
10. 在漫游渲染与预览中检查效果并迭代调整。
## 3. 模块详细要求
## 3.1 编辑界面
- 支持图片加载与初始化展示。
- 提供裁剪工具,输出裁剪后的工作区域。
- 深度估计默认作用于裁剪后的全部图像。
- 深度估计完成后支持深度叠加图开关。
- 支持圈选与点选两类交互,用于前景目标确认与细化。
- 右键菜单需至少包含:`补全``叙事帧生成`
### 3.1.1 GUI 总体信息架构(窗口与面板)
建议采用“单主窗口 + 多 Dock + 少量模态对话框”的结构,保证复杂流程可见且可回退。
1. 主窗口(`MainWindow`
- 顶部:菜单栏、主工具栏、阶段切换按钮。
- 中央:主画布(编辑/预览共用)。
- 左侧:工程树 + 图层树(可 tab
- 右侧:流程控制、参数设置、属性面板(可 tab
- 底部:任务状态栏与日志条。
2. 模态/半模态对话框
- 裁剪对话框:用于确认裁剪框、比例锁定。
- 提示词对话框:用于补全/叙事输入 Prompt。
- 任务详情对话框:查看失败原因与重试入口。
- 偏好设置对话框:模型端点、默认参数、快捷键。
3. 关键 Dock建议
- `流程控制 Dock`:按步骤触发(裁剪 -> 深度 -> 候选区域 -> 分层 -> 补全/叙事)。
- `图层 Dock`:背景层/对象层/补全层/叙事层管理。
- `属性 Dock`:当前选中区域或图层的参数。
- `工程树 Dock`:场景、热点、叙事节点。
- `预览 Dock`:漫游参数、播放控制、帧速率信息。
### 3.1.2 主窗口布局与阶段条(详细)
主窗口建议增加明确的“阶段条Step Bar放在工具栏下方
1. `S1 导入与裁剪`
2. `S2 深度估计(整图)`
3. `S3 候选区域与遮罩修正`
4. `S4 分层`
5. `S5 补全/纹理延展`
6. `S6 热点与叙事帧`
7. `S7 漫游预览`
每个阶段显示 4 种状态:`未开始``进行中``完成``失败`
仅允许“当前阶段 + 已完成阶段”可编辑,避免跨阶段误操作。
### 3.1.3 画布交互设计(核心)
画布(建议继续以 `CanvasWidget` 为核心)需支持以下显示层与交互模式:
1. 显示层(可开关)
- 原图层
- 深度叠加层(支持透明度 0~100
- 自动候选区域层(描边 + 半透明填充)
- 人工遮罩层(新增/擦除轨迹)
- 分层结果层(前景、中景、背景)
- 叙事帧预览层(时间轴预览时启用)
2. 交互模式
- 浏览模式:平移、缩放、查看。
- 裁剪模式:拖拽裁剪框、锁定比例、确认/取消。
- 圈选模式:套索或画笔新增区域。
- 点选模式:点击候选区域进行“收录/排除”。
- 擦除模式:从最终遮罩中删除误选区域。
- 热点编辑模式:绘制热点框并绑定叙事节点。
3. 右键菜单(在画布选区上触发)
- `补全...`(打开 Prompt 对话框)
- `叙事帧生成...`(打开 Prompt 对话框 + 帧数参数)
- `加入前景层` / `加入背景层`
- `从遮罩中移除`
- `复制遮罩到新图层`
### 3.1.4 流程控制 Dock按钮与状态
流程控制 Dock 建议替代“单个开始处理”按钮,拆为分步触发:
1. `开始裁剪` / `应用裁剪`
2. `执行深度估计(整图)`
3. `生成自动候选区域`
4. `确认遮罩并分层`
5. `对选中区域补全`
6. `对选中区域生成叙事帧`
7. `进入漫游预览`
每个按钮旁应有状态灯(灰/蓝/绿/红)与耗时。
失败时在同一行提供 `重试``查看详情`
### 3.1.5 图层 Dock建议新增
图层 Dock 至少包含以下节点:
- `Base`(裁剪后的底图)
- `DepthOverlay`(仅可视化)
- `AutoCandidates`(自动候选区域)
- `MaskFinal`(自动 + 人工修正结果)
- `Foreground_i`(可多个)
- `Background`
- `Inpaint_i`
- `NarrativeFrames_i`(关联某一热点/区域)
每个图层支持:可见性、锁定、重命名、透明度、删除(受阶段约束)。
### 3.1.5A 工程树对象模型(本次需求)
工程树中的所有节点统一称为“对象Object按层级表达空间远近关系与遮挡关系。
1. 对象类型定义
- 背景对象Background Object导入图像默认生成的对象作为底层背景。
- 实体Entity由分层直接得到的对象或由补全后得到的对象。
- 活动实体Active Entity由实体派生已生成叙事动画帧的对象。
2. 继承/派生关系
- `背景对象` 不派生自其他对象。
- `实体` 可由背景对象或其他实体拆分得到。
- `活动实体` 必须派生自实体(实体 -> 活动实体)。
3. 层级与遮挡规则
- 工程树越往下,层级越低,表示距离越远。
- 距离近的对象会遮挡距离远的对象。
- 渲染建议采用“先远后近”的顺序(深层节点先绘制,浅层节点后绘制)。
4. 动画语义
- 实体默认是静态对象。
- 活动实体支持循环播放叙事帧(自然动画)。
- 活动实体同时支持触发动画(例如点击热点、时间线事件触发)。
5. 工程树最低能力
- 支持新增多个对象(背景对象、实体、活动实体)。
- 支持父子关系(实体下继续派生实体或活动实体)。
- 支持对象删除(删除父对象时一并删除子对象)。
- 支持在属性区查看对象类型与动画能力状态。
### 3.1.6 属性 Dock按对象动态切换
1. 选中“自动候选区域”时
- 显示候选评分、面积、平均深度、边界平滑系数。
2. 选中“遮罩”时
- 显示画笔大小、羽化、腐蚀/膨胀。
3. 选中“补全任务”时
- 显示 Prompt、负向提示词、步数、强度、随机种子。
4. 选中“叙事帧任务”时
- 显示 Prompt、目标帧数、帧率、运动幅度、循环方式。
5. 选中“热点”时
- 显示标题、描述、绑定叙事序列、触发方式。
### 3.1.7 任务栏与日志区(建议新增)
底部状态区建议包含:
- 当前阶段与子任务状态(例如“分层计算 67%”)。
- 最近一次接口调用耗时(深度/分层/补全/叙事)。
- 错误摘要(可点击展开完整日志)。
- 后台任务队列(允许补全与叙事并行排队)。
### 3.1.8 结合现有代码的改造清单(`client/gui`
以下为现有 GUI 与目标流程不匹配点,以及建议修改方向:
1. `MainWindow` 当前以“单次开始处理”为主,缺少分阶段流程控制
- 现状:`onProcessingStartRequested()` 串行触发,且 `onDepthEstimationFinished()` 中直接进入分层。
- 建议:拆为 `onCropConfirmed``onDepthRequested``onCandidatesRequested``onLayeringRequested` 等独立槽函数,并引入阶段状态机。
2. 缺少裁剪窗口/裁剪模式
- 现状:`onOpenImage()` 直接载入整图到画布。
- 建议:新增裁剪对话框(如 `CropDialog`)或在 `CanvasWidget` 增加 `Crop` 交互模式,确认后生成工作图并替换当前输入。
3. `CanvasWidget` 交互模式不足
- 现状:仅 `View``EditHotspot`
- 建议:扩展为 `Crop``MaskBrushAdd``MaskBrushErase``CandidatePick``PromptRegionSelect` 等模式,并增加对应信号(例如 `maskEdited``candidateToggled`)。
4. 缺少画布右键菜单(补全/叙事生成)
- 现状:右键菜单仅在工程树中提供“删除热点”。
- 建议:在画布选中区域上提供右键菜单,接入补全和叙事任务创建。
5. 缺少图层管理 Dock
- 现状:有工程树与属性面板,但没有分层图层树。
- 建议:新增 `LayerPanel`(可作为新 Dock统一管理前景/背景/补全/叙事层可见性与顺序。
6. 预处理 Dock 语义不完整
- 现状:`ProcessingPanel` 偏模型选择与“一键开始”。
- 建议:重构为“流程控制 + 模型参数”双区结构;模型参数保留,执行入口拆成分步按钮。
7. 深度叠加控制不足
- 现状:`MainWindow` 中仅有分层预览开关(`m_layerPreviewCheck`)。
- 建议:增加“深度叠加开关 + 透明度滑条 + 深度色图选择”,并在 `CanvasWidget` 绘制层中实现。
8. 任务完成后自动隐藏面板不利于调试
- 现状:`onInpaintFinished()` 使用定时器自动隐藏 `m_processingDock`
- 建议:改为默认不自动隐藏,仅在用户手动收起时隐藏。
9. 热点叙事仅文本节点,未覆盖多帧动态任务
- 现状:热点主要绑定 `NarrativeNode` 文本说明。
- 建议:为热点增加“叙事帧任务列表”与预览入口,支持每个热点关联多组动态帧。
10. 缺少撤销/重做与历史快照
- 现状:遮罩、分层、补全、叙事结果缺少统一历史机制。
- 建议引入编辑命令栈Command Pattern并在工具栏提供撤销/重做。
### 3.1.9 推荐新增/调整的 GUI 类
建议在 `client/gui` 增加或调整以下类(命名可按现有风格微调):
- `CropDialog`:裁剪确认窗口。
- `LayerPanel`:图层树与图层操作。
- `TaskPanel`:任务队列与执行状态。
- `PromptDialog`:补全/叙事 Prompt 与高级参数输入。
- `WorkflowController`(可先放 `MainWindow` 内部):统一阶段状态机与按钮可用性。
- `CanvasWidget`:扩展多交互模式与右键上下文菜单能力。
### 3.1.10 GUI 验收标准(编辑界面维度)
1. 用户在不离开主窗口的情况下可完整完成“裁剪 -> 深度 -> 候选修正 -> 分层 -> 补全/叙事 -> 预览”。
2. 每一阶段均有明确可视状态与失败重试入口。
3. 画布右键可直接触发补全与叙事,且默认绑定当前选区。
4. 图层可见性与锁定状态可稳定控制渲染结果。
5. 热点不仅可编辑文本,还可绑定并预览多帧叙事结果。
## 3.2 深度估计
- 输入:用户裁剪后的图像(整图)。
- 输出:深度图(与编辑画布对齐)以及可视化叠加图。
- 要求:结果可回传编辑界面用于后续圈选、点选和分层计算。
## 3.3 分层与遮罩
- 输入:深度图、系统自动候选区域、用户圈选/点选结果、人工修正遮罩。
- 输出:前景层(一个或多个对象层)与背景底层。
- 要求:
- 按深度关系优先分离目标物体。
- 保留可编辑遮罩,支持后续补全和叙事生成直接复用。
### 3.3.1 自动候选区域筛选规则(建议)
为保证“先自动、再人工补充”的效率,建议在深度图上执行以下候选区域提取流程:
1. 深度预处理
- 对深度图进行归一化到 `[0, 1]`
- 使用轻量平滑(如 3x3 中值滤波或双边滤波)抑制噪声,避免过碎片区域。
2. 深度变化检测
- 计算深度梯度幅值(可使用 Sobel
- 以阈值 `T_grad`(默认 0.12)筛选“深度变化较明显”像素,形成初始候选掩码。
3. 连通域与面积过滤
- 对候选掩码进行连通域分析。
- 过滤面积过小区域(默认最小面积为裁剪图总像素的 `0.2%`),减少噪声候选。
4. 形态学修正
- 执行一次闭运算填补小孔洞。
- 执行一次开运算移除细小毛刺,提升候选边界可用性。
5. 候选排序与展示
- 按“区域面积 + 平均梯度强度”综合评分排序。
- 默认展示 Top-K建议 K=5作为可点选候选区域。
6. 人工补充与修正
- 用户可通过圈选新增候选外区域。
- 用户可通过点选/擦除剔除误检区域。
- 最终输出为“自动候选 + 人工修正”的统一遮罩,进入分层流程。
参数建议支持在设置面板中可配:`T_grad`、最小面积比例、Top-K、平滑强度。
## 3.4 补全与纹理延展
- 触发方式:用户对分层区域右键选择 `补全`
- 输入:目标层或遮罩区域 + 文本提示词Prompt
- 输出:补全结果图层,用于修复空洞、扩展纹理或增强局部细节。
- 要求:
- 补全结果与原图层对齐。
- 支持重复执行与结果覆盖/回退。
## 3.5 漫游渲染与预览
- 将分层结果组织为可漫游场景进行实时预览。
- 支持查看层间深度关系导致的视差效果。
- 支持回到编辑阶段继续修改并再次预览(闭环迭代)。
## 3.6 热点与叙事运行(内部能力)
- 面向内部选定场景,不作为默认对外能力。
- 触发方式:用户右键选择目标区域并输入提示词。
- 输出:多帧叙事动态结果(局部区域动态化)。
- 目标:在静态场景中对关键区域生成连续帧,强化叙事表达。
- 说明:该模块与补全共享部分输入(区域与提示词),但输出为时间序列帧。
## 4. 关键数据流
1. 原图 -> 裁剪图
2. 裁剪图(整图) -> 深度图 + 深度叠加图
3. 深度图 + 圈选/点选 + 人工遮罩 -> 分层结果(前景层、背景层)
4. 分层区域 + Prompt -> 补全结果图层
5. 分层区域 + Prompt -> 叙事多帧结果
6. 分层与生成结果 -> 漫游渲染预览
## 5. 交互与状态建议
- 建议提供统一的图层面板,显示前景层、背景层、补全层、叙事层。
- 深度叠加图开关应为全局可见状态,便于在不同阶段快速核对。
- 右键操作应绑定当前选中区域,避免误触发到非目标层。
- 对补全和叙事生成增加任务状态:`待执行``执行中``完成``失败`
- 建议保留操作历史,支持撤销/重做,便于快速迭代。
## 6. 验收要点(首版)
- 可以完整跑通“加载 -> 裁剪 -> 深度估计 -> 分层 -> 补全/叙事 -> 预览”的链路。
- 深度叠加图可正常显示和关闭。
- 圈选与点选结果可正确作用于分层。
- 自动候选区域应可稳定生成,并支持人工补充与修正后进入分层。
- 右键补全和右键叙事生成均可输入提示词并产出结果。
- 热点与叙事运行可在至少一个内部场景产出多帧动态化效果。