UE资产及版本管理
1.UE影视动画项目资产和传统线性动画流程资产的异同
本质上版本控制就是通过记录项目中各类文件的不同版本和变迁过程,为开发者提供类似同步,提交,比较,回退等项目文件管理功能。
-
相同
-
都是围绕美术资产文件为主进行管理
-
以视觉效果呈现为最终目标
-
差异
-
相对传统影视资产,UE工程资产引用关系相对复杂。零散,手动信息追踪难度较大
-
UE对部分资产会进行自动关联修改
-
通用资产可能会被多个岗位的资产共同引用
-
除了美术二进制资产,还要管理脚本,配置文件等文本,需要支持合并等操作
传统影视流程中依然有不少项目使用共享盘和手动复制文件的方式来管理文件的版本。在UE项目中不适用。
使用版本控制软件来管理项目资产是目前的最佳选择。
2.UE版本管理使用方法建议
- 三大主流版本控制软件介绍(Perforce,Git,SVN)
SVN
特点:软件结构简单,安装方便,学习门槛低。
SVN包含客户端和服务端。
如何下载安装SVN?
打开tortoisesvn.net网站下载后一路安装即可。
安装后不需要单独打开TortoiseSVN的客户端,直接在系统管理器任意目录下右键,就可以找到SVN集成到右键菜单的相关命令。此时我们就可以使用SVN进行版本控制了。我们可以直接在本地创建版本库。但更常见的是在局域网中长期保持运行的服务器上建议版本库,这样才能方便团队中的其他岗位随时访问,并行协作。
为了方便管理,我们还可以下载类似VisualSVN Server这样的SVN服务端管理软件。其中内置了SVN命令行工具,下载后直接安装到服务器电脑上。此时我们就可以用VisualSVN Server创建远程版本库,也就是项目文件在服务器上的权威版本。这样其它客户端都可以围绕这个版本进行更新或者提交等操作。
例如我们创建一个库,并给它命名,然后我们还可以给这个版本库创建用户设置密码。
此时回到客户端电脑,我们就可以在右键菜单中选中版本库浏览器,在弹出的菜单中输入http加服务器ip地址或windows机器名加上/svn,确定后输入在服务器管理软件中创建的用户名和密码。之后就可以看到刚才在服务器端创建的版本库了。
接下来我们可以选择需要进行版本控制的项目目录和文件,用SVN的导入命令,将已有的UE工程导入到服务器中的版本库。也就是将本地的项目文件复制一份到服务器的版本库中。完成后在进行检出命令,将本地已有的文件和服务器的文件进行一次关联。这样就完成了对这个项目的版本库初始化。
对于本地没有项目文件的其他电脑,只需要执行检出命令,输入版本库地址和账号密码,就可以从服务器端获取一份已经被版本管理的完整项目文件。然后就可以进行常见的版本控制操作了。
例如在服务器上版本库有其他岗位提交的新内容时,我们可以用更新命令获取相关文件的最新版本自动覆盖本地的老版本。也可以添加新的文件到服务器版本库,并提交文件到服务器。
在修改相关文件后,可以通过提交命令将新版本文件提交到服务器,并生成相应的版本信息。
在需要回退到之前版本时,可以选择右键菜单中的更新至版本。
这些操作不仅适用于UE项目资产,同样适用于项目文档原画等非资产文件。
SVN通过.svn隐藏目录来记录本地文件和服务器文件之间的关联。随着时间的推移会占用大量的磁盘空间。此时我们需要删除.svn文件夹。重新执行检出命令,建立服务器版本库和本地项目文件的关联即可。
前面虽然实现了大部分功能,但是实际工作中这些功能远远不够。
例如我们无法实时了解哪些文件正在被其它岗位修改,因此可能导致多个岗位同时修改相同的文件,导致文件冲突。对于无法合并的二进制美术资产文件就只能选择以一方的文件为准,再手动处理其它岗位的修改。不仅操作繁琐还容易出错。
另外,对于已经在UE编辑器中打开并加载的文件,通常会被锁定。因此我们往往不能在系统资源管理器中直接进行更新覆盖。这样做经常会导致更新操作中断,需要关闭UE清理SVN后重新更新,同样非常繁琐。
针对这类问题我们完全可以使用UE编辑器中的版本控制功能来解决。
我们只需要点击UE中的连接源码管理菜单,选择SVN,填入信息后点击接受设置按钮就连接上了。此时在内容管理器中右键,我们就可以看到源码管理相关的功能菜单。
Git
Git对于程序员非常友好,非常适合用来管理以代码为主的软件项目。但经过简单调整同样可以用来管理包含大量二进制美术资产文件的UE项目。
首先我们需要下载Git客户端,安装后默认指提供命令行工具。但网络上同时又很多针对Git的UI客户端。这里以TortoiseGit为例。
在官网下载安装后,就可以在系统中发现和SVN相似的右键菜单。此时我们即使不需要服务器也可以对项目进行本地化的版本控制,这就是Git作为分布式版本控制软件的一大特点。允许在单机状态下在本地进行版本管理,联网后在把特定的版本推送到服务器上的远程版本库。
远程版本库的创建很简单,只需要在服务器上同样安装Git客户端软件,然后创建一个Bare版本库,意味着只能通过其它客户端远程推送来提交。目录名称通常以.git结尾。
然后设置名称在局域网中共享这个目录。这时我们在客户端电脑上进行本地的更新,提交等操作后,就可以选择push,也就是推送到远程版本库。输入服务器的版本库目录地址,就可以将本地的最新版本文件上传到远程的版本库,并留下相应记录。可以猜想到Git支持本地版本控制,难么相关信息必然也是记录在本地的,我们显示系统隐藏文件夹。就可以看到有一个.git隐藏目录。里面记录了文件版本迭代的信息和压缩后的各版本的文件。这个目录也会随着项目推进变得越来越大。
此外由于Git本身是面向代码文件版本控制设计,因此默认只允许将50M以下的文件推送到远程仓库。这对于大部分美术资产而言是完全不够用的。我们可以下载LFS,它可以帮我们突破远程推送单文件大小限制,下载后直接安装即可生效。
除了在系统资源管理器中使用Git以外,我们同样可以在UE编辑器中连接Git服务。只要在源码管理登录窗口中使用默认设置。如果项目目录之前没有创建过库,那只需要点击用Git初始化项目,引擎会帮我们创建好本地版本库,并做好相关设置。然后再点击接受设置即可。然后内容管理器的右键源码管理和SVN时是一致的。
Perforce
但对于5人以下的小团队可以免费试用软件。但整体不能够超过20个工作区。如果用户数量超过5个也可以继续使用,但整体提交文件数量不能超过1000个。
Perforce分为客户端软件和服务端软件。
我们在Perforce官网上填写好简单的信息后,就可以根据操作系统直接下载Helix Visual Client客户端软件并安装。然后在服务器上下载安装Helix Core Server服务端软件。然后我们就可在客户端软件上进行版本控制了。不同于SVN和Git Perforce提供了独立的客户端软件(简称P4V),同时附带了P4Admin管理软件。通过这两个客户端软件就可以在客户端电脑上远程管理服务器上的版本库。
我们首先通过P4Admin软件新建首个账户,然后就可以在P4V中输入服务器ip地址和默认端口号1666。填入账号密码,此时我们还需要创建工作空间,本质就是指定客户端电脑的本地目录为P4V版本的管理目录。这一点和SVN和Git有很大区别。Perforce不是通过在本地创建隐藏目录的方式来记录文件迭代信息。而是全部交给服务器统一管理,是标准的中心化模式。因此必须连接服务器才能进行日常的版本控制操作。不能想Git那样。这样的好处是客户端电脑上的项目文件非常干净。不会带来额外的磁盘占用。连接成功后我们就可以在P4V中为远程版本库创建仓库,添加文件并上传,然后就可以进行日常的更新,提交,回退,比较文件等操作。
同样我们可以在UE5编辑器中连接Perforce作为源码管理提供方,只需要输入账号密码,选择已有的工作空间,点击接受设置即可。此时就可以看到内容管理中右键菜单中的源码管理。
三个版本控制软件的比较
- UE编辑器版本管理设置和使用
在顺利连接上版本控制软件之后,源码管理的相关菜单变成可用状态,比如检出,刷新,历史记录,与Depot库进行对比。这些操作会根据在后台连接的不同的版本控制软件执行各自的命令。实际上实现的功能有所不同,但对于编辑器用户而言是透明的。因此对大部分项目开发者而言只要关注这些最基本的操作。
这里就以SVN为例,首先是检出作用是从服务器获取这个文件的最新版本,并通知版本控制软件锁定这个资产文件。此时可以看到资产图标上多了红色对钩的标志。
这对于SVN和Perforce这样中心化的版本控制软件。其它用户在使用UE编辑器浏览这个资产图标时,可以看到上面多了黄色对钩的标志。同时能看到是哪个账号在锁定这个文件。这样就可以有效避免多个岗位同时编辑同一个资产文件导致冲突的问题。当然如果其它岗位只是为了测试目的想要临时修改这个文件,也可以将它转为本地可写状态。测试完成后在SVN外部使用SVN还原命令回退到之前的版本。
在执行检出命令后,我们对资产进行修改再进行检入命令。作用和检出刚好相反,就是将修改后最新版本的文件提交,并通知服务器结束对文件的锁定状态。
然后刷新命令是从服务器中获取当前文件的最新状态。例如在另一个地方文件被检出,编辑器不会马上显示锁定状态,刷新之后就可以手动更新状态信息。
历史记录可以让我们看到这个文件的迭代历程。
与Depot库进行对比功能,可以打开文本编辑器查看例如关卡,材质等文本类文件,也可以查看贴图,模型等二级制文件的属性信息。同时还可以用非常直观的方式,对蓝图类资产进行比较。并且能自动列出两个蓝图之间的差异,包括蓝图变量,默认值,蓝图类设置,组件,构造脚本等属性,甚至能对事件图表进行可视化的比较。我们可以通过锁定和解锁当前版本和历史版本的视图来高效的查找差异。这是在UE编辑器外用版本控制软件无法实现的。
除了内容浏览器右键菜单以外,我们还可以用UE编辑器右下角的版本控制菜单,进行批量提交内容变更操作。获将当前尚未提交的修改用提交列表进行管理,根据工作节奏分批提交。
此外UE还为我们提供了版本控制相关的编辑器蓝图节点和Python脚本 API,开发岗位可以用编辑器蓝图工具或编辑器蓝图控件,定制符合自身项目需求的自动化工具。为其它岗位带来直观高效可控的版本工作流程。
UE编辑器内的版本控制操作主要针对与美术资产,像UE的配置文件,Python脚本文件,工程文件,甚至是项目文档,原画等非美术资产文件。一般我们需要在编辑器外部进行更新和提交操作。如果涉及到更新覆盖UE工程文件的话,操作前最好先关闭UE编辑器。
3.UE影视动画项目对资产管理的现实需求以及方案参考
- 影视动画项目资产体量庞大
这主要来源于影视项目对画面的极致要求,但在实际项目中很多视觉效果有不同的实现路径,我们要尽可能有性价比最高的方式表现画面效果。根据画面对象的重要性,画面占比来分级别使用资产,而不是全部按最高级别堆砌资产。同时还要尽可能提高资产复用率。对于经常切换服装和道具的角色最好采用蓝图拼装方式制作。大部分情况下我们在UE编辑器中只会对这些资产的编辑器属性进行调整。而不会改变贴图的像素,模型的顶点,音频数据等资产数据本身。
如果我们每次修改这些资产的属性后,都需要将动辄几个G甚至更大的包含整个资产数据的uasset资产完整上传到服务器,可以想象会带来多大的存储和传输成本。
针对这个问题UE5引入了Virtual Assets(虚拟资产),可以让团队只上传或下载修改的属性原数据,而只在必要时传输美术资产数据。目前在UE5.1中率先提供了对贴图和音频资产的支持,未来会提供对更多类型资产的支持。
- 需要兼顾UE资产和DDC资产的管理
由于UE使用uasset格式资产来提高数据的完整性和读写效率,造成了团队同时要维护UE项目美术资产和外部DCC美术源文件。
比较直接的思路是把通用DCC资产和项目资产分开管理。这是大部分影视动画团队采用的模式。
更理想的方式是通过必要的开发,比如开发UE编辑器插件,建立通用资产库。
还可以在服务器中通过UE工程的形式将各类资产分类整理成库,通过远程引用的方式加载到本地作为制作参考或者资产效果预览。通过类似Bridge直观的方式为美术岗位提供高性价比的资产预览功能,在确定符合项目需要后,再下载到本地使用。
- 资产复用度高,多个岗位需要频繁访问同一套项目资产
同时对资产目录划分,权限管理提出了更高的要求。
需要我们在项目初始就根据团队岗位配置和项目特点来合理划分项目目录。并且在版本控制软件的服务端进行合理的用户组别和对应的项目目录权限设置。使每个岗位只有权限获取到岗位工作必要的资产,只对职责内的资产具有修改权限。这样既避免了多岗位同时修改资产带来的冲突风险,也大大降低了客户端电脑对项目文件传输和存储的成本。
此外在UE编辑器中对美术资产进行移动重命名等操作时,有时会产生重定向器,这是由于当前文件正在被其它资产引用,无法更新引用。引擎会创建默认隐藏的重定向器资产来保持这个引用,这些重定向器在系统资源管理器中可以看到,同样是uasset格式的文件,我们可以在过滤器中勾选显示重定向器,就可以看到这些资产。会对资产复用率高的项目产生阻碍。
此时强烈建议用目录右键菜单的修复重定向器命令来修复这些引用,确保没有这些资产。这步操作可以避免可能的资产引用混乱。需要形成日常操作习惯。
- 岗位协作量大,尤其是大规模场景和大量镜头
子关卡并行工作。也可以用世界分区多人同时编辑一个关卡。
- 项目周期紧,审查频繁
要求我们尽可能使用快速迭代的工作方式来应对。
每个岗位在修改资产前都应该执行检出命令,通知其它岗位该文件正在编辑。再修改完成后第一时间检入,解除文件锁定。还可以将多个相互关联的文件的修改划分到多个合理划分的变更列表中,修改完成后优先提高这个变更列表。让审查岗位尽快看到最新效果。
此外我们还可以用插件,关卡快照可以让我们对关卡编辑的默认时间创建快照数据。相比手动另存关卡,关卡快照数据更简洁,长期保存也不会带来大量的存储成本,并且会根据时间自动命名文件。同时提供了专门的编辑器来于预览管理快照数据,我们可以清楚的看到每个快照中哪些对象的哪些属性发生了变化。点击恢复关卡快照按钮,就可以将其中保存的数据快速应用到当前关卡,为关卡审查提供了直观便利的选择。
对于角色资产的审查我们首先可以通过蓝图拼装的方式,将多个角色部件拼接成不同版本的角色蓝图资产,降低资产的重复度,同时可以创建专门的角色LookDev关卡。并且启用引擎自带的HDRI BackDrop插件,配合HDRI环境立方体贴图来提供标准的审查环境。而不是每次审查都要打开正在编辑中的关卡。
对于镜头我们还可以通过take镜头试拍功能来创建同一个镜头的多个版本,通过少量的数据来保存多个中间过程,可以在Sequencer中随时切换版本,提高审查效率。
此外TD岗位可以将UE编辑器作为一个项目信息管理平台。借助编辑器蓝图控件,Python脚本等工具将工作任务,周期,审查结果等信息直接显示在编辑器中,并且根据各岗位的提交操作,自动为审查岗位提供通知信息,从工具和工作流程上提高项目沟通效率。
- 需要同时应对内部和外部协作,既要确保协作效率,又要保证信息安全
参考链接
- Perfoece下载页面:Download Software|Perforce
- TortoiseSVN下载页面:TortoiseSVN
- VisualSVNServer下载页面:Subversion Server for Windows|VisualSVN Server
- Git下载页面:Git
- TortoiseGit下载页面:TortoiseGit
- One File Per Actor in Unreal Engine |虚幻引擎5.0文档
- 虚幻引擎中的关卡快照| 虚幻引擎5.3文档
- Overview-of-Virtual-Assets-in-Unreal-Engine|虚幻引擎5.2文档