遨奇思特软件产品专注于解决 视效制作 领域中的 项目管理 问题,所使用的术语也与这两个概念息息相关。我们会看到 场次、序列 这样的视效制作领域的术语,也会看到 项目、任务、版本 这样的项目管理方面的术语。清楚地说明这一系列术语能够消除歧义,帮助用户更好地理解、使用我们的产品。

实体类型(Entity Type)

实体类型通过一组属性来定义一种数据结构,这组属性包括名称、说明、是否启用、包含哪些字段等,我们可以根据这组属性来区分实体类型。比如镜头与场次的字段不同,镜头有 head_in、head_out 这样的字段而场次没有,所以是两种不同的实体类型。可以把实体类型视作数据库中的表,创建一个实体类型等同创建一张数据表。

实体类型是遨奇思特软件产品中最基本的概念,镜头(Shot)是实体类型,工序(Step)是实体类型,任务(Task)是实体类型,页面(Page)也是实体类型,甚至实体类型(Entity Type)本身也是一种实体类型。

字段(Field)

可以把字段视作数据库中的 column。字段有一个名为数据类型(data_type)的属性,该属性决定数据的类型、格式、处理方式、显示方式等。 比如布尔型(boolean)字段接受 true 或 false,时长型(duration)字段只接受数字,默认单位是小时(hour)。

实体(Entity)

实体即实例,是遵循某数据结构的一个具体的数据对象(Object)。创建一个实体等同在数据表中添加一行数据。可以称镜头页面中的 s001 为一个实体,也可以称资产页面中的 Tree 为一个实体。遨奇思特采用元编程的理念,所以镜头(Shot)其实也是实体类型(Entity Type)的一个实体。

实体的属性对应实体类型的字段。以镜头为例,我们一般称镜头有一个 code 字段,或者有一个 code 属性为 s001 的镜头实体。

项目(Project)

视效工作室描述业务的最大单位。工作室可以内部启动一个项目,也可以承接外部项目。项目有名称,比如项目名为 Big Buck Bunny;项目有开始时间和结束时间,比如本月开始次月结束;项目有类型,比如该项目类型为动画电影。

场次(Sequence)

一个场次即一段连续的剧情,一个视效项目一般包含多个场次。场次与场(Scene)不同,场是前期拍摄的术语,指一个场景或者环境,剧组会根据故事涉及的场景合并拍摄任务,逐场集中拍摄以降低制作成本。比如片头片尾的戏很可能是在同一家酒吧的同一个傍晚拍摄的,而片头片尾的戏显然在不同的场次里。当项目的工作量大到一家工作室无法消化时,可以按场次拆分给多个工作室,这又是后期环节降低成本的好办法。

镜头(Shot)

在前期环节,镜头指单次拍摄的一段素材,场记板上记录镜头编号,打板合板决定镜头时长。在后期环节,镜头指一个场次里的最小片段,镜头编号可以自行编排,镜头时长由剪辑师决定。镜头与剪辑片段(CutItem)不同,对视效工作室而言,镜头需要制作特效,而剪辑片段不是,两个编号相邻的镜头很可能并不连贯。

任务(Task)
制作一个特效镜头首先要分解任务(WBS),明确该镜头涉及到哪些工序(Step),需要哪些部门参与。为方便管理,一般一道工序对应一项任务,比如一个镜头需要做场景重建,那么至少涉及到模型、材质、灯光、合成工序,这时就可以为该镜头创建一项制作模型的任务、一项制作材质的任务、一项灯光任务、一项合成任务。

工序与任务的区别在于,任务是具体的、需要执行的事务,而工序是流程中的一环,同流程一样是抽象的概念。工序在具体工作中体现为任务,我们可以说某项任务属于某道工序。任务可以分配给具体的艺术家,可以追踪开始时间、结束时间,可以用甘特图修改排期,也可以用看板修改状态。

在工作中,我们可以说一个场次是一个实体,可以说一个镜头是一个实体,但很少称一项任务为一个实体。这只是一个特殊习惯。

版本(Version)

视效制作普遍采用敏捷工作流,每个阶段交付一次最新版本,逐阶段达成任务目标。版本记录序列路径、已发布文件等数据,我们可以用版本保存工作进度,把版本视作任务的快照,规定版本的相关文件不可更改。

我们提供了审阅页面用来查看和批注版本,用户可以在创建版本时上传一个 mp4 文件,这样即使导演或相关负责人不在现场,也可以联网审片。

已发布文件(Published File)

艺术家开始任务后,可以每天发布一个工程文件或视频文件,这个文件是阶段性的,仅表示当天的工作进度。用户可以为该文件创建附件(Attachment)实体,并添加到已发布文件的 attachments 属性,在这里创建附件相当于对当天工作进行备份。当然用户也可以跳过创建附件的步骤,在已发布文件的 路径(path) 属性中填写文件路径,这完全以团队的内部规范为准。

已发布文件还有 upstream_published_files 和 downstream_published_files 字段,指向上游文件和下游文件,我们一般用这两个字段构建依赖关系,想想看打包的问题,你就能心领神会。

已发布文件也可以通过 version 字段关联版本,是否关联版本一般与该文件的重要程度以及工期安排相关。

附件(Attachment)

版本、已发布文件都有整理、归档、分类的意味,附件则仅用于保存文件的相关信息。

流程(Pipeline)

流程指制作一个特效镜头所涉及的工序以及工序之间的先后顺序。我们提供了流程编辑器以有向非循环图(DAG)的方式表示流程,图中一个节点就是一道工序,用连线表示节点之间的关系。在创建镜头时,系统会读取表单中的流程,按照流程中的工序逐个创建任务。

遨奇思特主程序预设了 Character Asset Pipeline、Prop Asset Pipeline、Animation Shot Pipeline、Live Action Shot Without Asset Pipeline 等流程。

工序(Step)

视效行业为应对大体量的特效项目,引入了分工的概念,比如某部门负责模型,某部门负责特效,某部门负责灯光,这些分工就是工序。

流程配置(Pipeline Config)

工作室需要遵守全流程通行的规范,才能确保上下游交接顺畅;工作室又需要自定义制作软件、加载内部工具,才能提升效率和质量。

我们用流程配置定义桌面客户端的行为,用桌面客户端作为以上需求的终极解决方案。流程配置能够明文地管理视效制作的方方面面,又能在多个工作室之间架起各自规范的桥梁。

系统预设的流程配置就已经覆盖了大部分的规则条目。通过编辑流程配置,我们可以让制作软件在启动时读取某路径下的内部工具包,也可以让桌面客户端在发布版本时拷贝文件到指定文件夹。

页面(Page)

页面分为两类,镜头页面、任务页面是一类,审阅页面、我的任务页面是另一类,两者布局不同,检索的机制也不同。页面是一种实体类型,而无论是镜头页面还是审阅页面,其实都是页面实体,它们的数据也是可编辑的。我们鼓励用户自定义页面。

事件日志(Event Log Entry)

系统会把内部行为以及大部分用户行为视为事件,并以日志的形式保存下来。用户可以使用 Python API 轮询事件日志,设定条件触发回调函数。

上下文(Context)

上下文由用户(Human User)、项目(Project)、实体(entity)构成,主程序中有上下文菜单,桌面客户端有上下文对象。