跳转至

组装

视频教程 —— 即将推出

Assemble 是 OSA 里唯一具有破坏性的动词。在它之前的一切都是计划;这一刻计划变成一个 Harmony 场景。

它做什么

遍历 staging 树,一趟走完:

  1. 创建节点 —— peg、group、composite、backdrop、read、效果、生成器。
  2. 连接端口 —— 绿色变换层级和蓝色合成层级,两者都连。
  3. 写入属性 —— composite 模式、对齐、alpha、混合模式、效果数值、z-depth。
  4. 导入画稿 —— 进入元素和曝光,一层 art layer 一层 art layer、一帧一帧地导。
  5. 布置节点图 —— Wide Bus 栅格,backdrop 由内向外测量。
  6. 压平堆叠 —— 把 staging 树改写成场景实际能存储的形状(见 Original Bitmap)。

按下之前

Assemble 按钮在右下角,紧挨着 Cancel,而且它是受门控的:当反馈栏正显示一条阻断性错误时,按钮是禁用的。OSA 不会让你组装一棵它已知有问题的树。

它上方的反馈栏用颜色标出阻断的原因,所以"按钮为什么是灰的?"的答案总是在屏幕上。

报告

Assemble 报告的是场景拒绝了什么,而不是它做了什么。每次构建都大喊大叫的报告就是背景噪音,所以这个区分是刻意的:

标记 含义
FALHA(失败) 有东西被要求了,但没有发生
nota(注记) 发生了,只是不完全按要求的方式

每一行都点明种类、对象和发生的位置:

FALHA import-failed   sky: source file not found [Top/BG/sky]
nota  degraded        can: vector track skipped in Original Bitmap

这套词汇是封闭的 —— 每次失败都属于以下种类之一:

种类 含义
no-bridge Harmony 在那儿,但脚本桥从未打开
import-failed 画稿从未写到磁盘
no-artwork 没有东西可搬(一条 note)
element-swap 一张 Original Bitmap 的 drawing 仍然是 TVG
unresolved 该节点没有对应的列或元素
drawing-failed Drawing.create 被拒绝
exposure-failed column.setEntry 被拒绝
utransform 一次转换被拒绝,或什么都没产出
node-failed 节点创建被拒绝
plan-error 提交某个计划时抛出异常
phase-error 某个完整阶段中抛出异常
format-mismatch 扩展名与文件内容不符
degraded 做完了,但不是按要求做的(一条 note)
cancelled 你中断了构建
unaddressable 某个节点声称存在,却说不出自己在哪

取消

Cancel 会停止构建。它不会撤销已经写入的东西。

Assemble 不是一个事务

Harmony 的撤销把整次构建累积成一次写入,所以中途取消会留下已经创建的节点。这是宿主的性质,不是一个选择 —— 也正因如此,压平步骤只处理源真正落地了的 drawing:取消之后,你的 staging 树依然描述着所有没能过去的东西。

如果一次构建出了问题,诚实的补救是用 Harmony 自己的撤销,然后修好树再组装一次。

重新组装

你可以再次组装同一棵树。场景里已经存在的节点会就地编辑 —— 改名、改属性,绝不重复创建,也绝不移动 —— 之后该槽位再次被标为 existing,所以下一次按下又是一次更新。

一个声称存在却说不出在哪的节点会被报为 unaddressable,而不是被重建,因为重建它就意味着会有两个。

关于这件事有一整页,包括为什么对一条导入链来说树根不是 Top重新编辑已组装的场景

Generate + Assemble

Staging 工具栏里的 Generate Magnet Tree + Assemble 按钮一次按下完成两步:为每个激活的 magnet 创建一个 super node,并把它们直接组装进 Node View。

它是独立的 —— 不需要画稿,不需要 staging,什么都不用拖进来。在空场景里它会自行搭出目标层级,你就是这样把一个搭好架子的空场景交给开镜头的人。

它搭出什么,来自当前 Preference SetMagnet Generator 配方:存在哪些 magnet、哪些是激活的、它们的顺序、每个 magnet 生来带的组件,以及它的 backdrop 颜色。切换 preference set 会切换整个结果,所以先看一眼顶栏的下拉框。见 Magnets

构建之后

staging 树会被改写以匹配场景:堆叠压平,落地的轨道塌缩进它们所属的层,而每个被压平的行都保留自己的来源 —— 画稿从哪来、它的类型、它的缩略图。

之后这个槽位仍然继续接受新的轨道。压平不是终点,而是基底:下一次合成会在如今场景里已有的东西之上继续合成。