版本配置工具Perforce Helix Core 在游戏行业的应用

配置管理工具Perforce Helix Core在游戏行业的应用

        如今的游戏,界面越来越精美,音效越来越好,参与开发一个游戏的人员也越来越多,这对游戏的开发、更新过程的管理提出了更高的要求。

        Perforce Helix Core不仅可以运用在源代码管理上,对3D制作、音频文件,以及多团队之间交叉使用的大型二进制文件都有非常好的支持,任何规模的游戏开发团队都能轻松地将Helix Core导入到他们原本的开发工作中。

        Helix Core提供的Stream可以方便地管理不同团队间的代码和二进制文件,下面我们通过一个简单的示例说明怎么使用Helix Core的Stream功能来做游戏开发管理。 

一、游戏开发的基本流程

开发游戏时,通常会分以下几个阶段:

预备阶段

确定项目的基本方向

原型阶段

实现一个游戏原型,发布Alpha测试版。

迭代阶段

上线后按迭代周期,持续开发和调优游戏。

发布阶段

发布游戏的Beta测试版本,做内部封闭测试。

预备阶段:游戏一开始只是一个创意或想法,需要具体用图片和文字展现出来,形成最初的概念设计,同时确认项目使用什么引擎和框架。这个阶段,要形成大家认可的原型设计。

原型阶段:本阶段主要目的是验证游戏的基本面问题:题材和玩法的融合是否合适,美术风格和技术实现层面是否能达到策划的初始目标,有没有难以解决的基本障碍。

发布阶段:项目经理随时应对不同的策划案,组织大家建立流程标准,在Alpha版的基础上完善游戏。另外需要准备发布工作,包括宣传资料,测试环境,运维工具等,也需要花费时间。 

迭代阶段:游戏一般会有功能的持续更新,根据策划确定每个迭代的内容,按照流程标准不停的做相应的持续开发,调优游戏。

二、各阶段的配置管理需求

需求
预备阶段
原型阶段
发布阶段
迭代阶段
版本管理
权限管理
多个团队素材的构建
协同开发
分支管理
大文件的管理

        预备阶段,参与的人员较少,文档也比较少,配置管理只需要考虑文件的版本管理和权限管理就可以(Perforce Helix Core、SVN、Git等都可以满足需求)。

        原型阶段,策划、美工、开发等多团队同时进行工作,需要考虑不同团队的素材的取得及构建(Perforce Helix Core可以很好的管理多个团队的工作)。

        发布阶段,随着游戏的不断开发(文件数量增加、大的美术资源增加),团队规模也会扩大,有不同地域的团队同时协作,甚至还有外包人员参与开发,这时需要有很好的协同开发管理、分支管理、大批量、大文件的管理需求(Perforce Helix Core可以很好的满足这些需求)。

        迭代阶段,需要考虑bug的及时对应(分支管理需求),新功能的迭代开发,也需要有很好地协同开发管理、分支管理、大批量、大文件的管理需求(Perforce Helix Core可以很好的满足这些需求)。 

1、版本管理

        日常开发过程中,需要对各种文件做版本管理,版本管理工具有很多,常见的Perforce Helix Core,SVN,Git都可以满足小规模开发、小团队的日常版本管理的需求。

2、权限管理

        现在用户对知识产权的保护意识在逐渐增强,Git的权限只能设定到库,而且必须将所有内容都clone到本地,存在一定的泄露风险;SVN的权限也只能设定到目录。Helix Core的权限管理可以很好的满足客户的需求:

  • 可以设定目录的权限

  • 可以为单个文件设定权限

  • 可以将目录的权限管理或者用户组的权限委托给非管理员用户

  • 可以限定访问的客户端的IP地址范围

  • 可以以组为单位设定权限,并支持子组

3、组装模块和分支管理

        现在游戏开发会有多个团队协同工作,在构建时需要组装多个团队的模块做构建。Perforce中有工作区和Stream等概念,易于灵活地将服务器端文件(文件夹)映射到本地,实现模块组装和分支管理功能。

工作区:定义如何将服务器端文件获取到本地,可以将不同仓库的任意个文件夹映射到本地,并可以调整文件夹获取到本地后的目录结构。不需要像Git,SVN那样使用隐藏文件夹来管理文件状态,减少磁盘空间浪费。从服务器端获取文件,可以按需进行,不需要像Git一样要clone整个repo。

Stream:开发过程中可能应对不同需求会有多个开发分支,Stream就是Helix Core中的一种分支。这种分支除了维护最基础的分支映射关系以外,还提供了分支类型,分支合并方向,模块引用(或排除)等支持。为了易于观察分支之间的关系和差别,还提供了一个分支视图(Stream Graph)。通过引入Stream功能,Helix Core的分支管理功能更加强大。下图是一个分支视图的截图,其中每个长方形都代表一个分支,不同颜色代表了分支不同的分支类型,单向或双向箭头指示了预定义分支并方向,绿色线代表可合并。

news 243 1

4、协同开发

        现在游戏开发团队在逐渐增大,甚至有多个团队或外包在不同地域进行开发,如何有效协调不同地域的团队的开发,成为开发管理的需求之一。Helix Core支持多种多服务器架构,可以很好的支持不同团队的跨区域协同开发,通过Proxy缓存服务器,Edge服务器、Replica复制服务器提高异地的工作效率。

多区域服务器架构示例:

news 243diaode

内部访问:

1、为提高数据的安全性,Commit服务器和Edge服务器分别有一台Replica备份服务器用于备份。

2、Commit服务器和Edge服务器间用专线连接。

外部访问:

1、当访问人数不多时,可以根据地点不同直接访问A城的Commit服务器或B城的Edge服务器。

2、如果某地的访问人数较多时,可以考虑在当地搭建Proxy服务器,提高效能。 

5、大批量、大文件的管理

        现在的游戏越来越大,包含的文件越来越多,二进制文件也越来越大,Helix core可以支持大批量文件、图像、音频等格式的文件,而SVN和Git已经不能很好的满足这些需求。

5.1、共享存储方式节约存储空间

        若素材体积较大,超出了经济的客户机存储配置,则可以考虑将只读的大量素材下载(p4 sync)到一个共享文件存储器上(NFS等),Client机器仅在修改文件时才需要将涉及到的部分数据复制到本地,这种复制可以根据文件路径直接从p4服务器上sync,也可以从share storage上复制(复制后通知p4 服务器)。客户机本地修改后直接提交到p4 server上,之后share storage可以从p4 server上增量sync到最新修改。Helix core的workspace特性允许灵活的定义服务器上文件与本地文件的映射关系,这使得这种部署方式易于实现。 

news 243 3

5.2、stream切换方式节约存储空间

        若项目有多个分支,且每个分支较大(如:每个分支有数百G数据),而客户端可能需要在几个分支上工作,若将每个分支都保存在本地,则存储空间可能存在瓶颈。这种场景下,可以在同一工作区上使用切换分支功能来节约存储空间(p4 switch 命令)。 

news 243 4

如上图所示:客户端机器仅使用一个工作区,不同时刻可以对应于不同的stream(分支),则工作区的存储空间仅需占用一个分支的大小。

说明:

1.切换分支时需要从服务器上获取两分支间文件的差异部分,两分支间的差异越大,则切换时消耗的时间可能越多。

2.切换到新分支前,需要对当前分支的修改需要提交,或者放弃,或者暂存。 

5.3、对比测试

以下是Helix Core 和SVN的大数据量测试对比:

news 243 5
news 243 6

三、使用Stream来管理游戏开发

        我们通过开发1个2D的空战小游戏来演示怎么利用Stream来开发1款游戏。

1、游戏开发需要的资源

        下面是1个简单的游戏需求的资源(部分)的列表,主要包括引擎、美术、音频及程序等。

  • 引擎及框架

  • 2D引擎

     代表: Cocos 2D等

  • 3D引擎

     代表: Unity 3D、虚幻引擎、Cry Engine 3、Egret等

  • 美术/音频资源

  • 静态图片

  • 动画

  • 模型

  • 资源包

  • 音频编辑器

  • 程序资源

  • 代码

        另外,游戏开发中,也有策划人员、架构师、设计人员、开发人员、测试人员等各种角色。

2、游戏开发的Stream构成

        首先策划人员提出需求后,架构师根据需求选定cocos2d作为开发引擎。引擎、资源、程序开发分别用不同Main Stream来管理。程序开发Stream通过import设定引用引擎Stream和资源Stream的内容。 

news loudiao

3、预备阶段

        策划人员前期做游戏的策划,并将策划文档放在Main Stream。

news 243 7
news 243 8

4、原型阶段

4.1、创建引擎的Main Stream

        给架构师创建引擎及框架用Main Stream。

        注:引擎Stream只管理和引擎相关的资源。

news 243 9

导入引擎的相关资源

news 243 10

4.2、发布引擎的1.0版本

news 243 11

4.3、创建资源的Main Stream

        给美工团队(开发人员、测试人员)创建资源的Main Stream,美工团队就在资源的Stream里工作。

        注:资源Stream只管理和美术/音频等相关的资源。

news 243 12

4.4、在游戏开发Stream里引用其它Stream

        在游戏的开发Stream里只要有代码的部分,引擎资源和美术/音频资源可以通过Stream的设定来引用。

news 243 13
news 243 14

        主分支定义好以后,从主分支创建的测试分支、开发分支以及发布分支都可以继承主分支的目录结构,还可以指定需要的版本。如以下的flightfight_dev Stream里指定了资源数据取资源包里的changelist 号90的内容 。

news 243 15

4.5、使用游戏开发Stream的工作区

       开发人员/测试人员在使用flightfight_main Stream的工作区里可以将引擎和资源的内容同步到本地硬盘。 

news 243 16
news 243 17

         通过引用,不同的团队可以并行开发,而且可以指定引用的具体版本。

4.6、发布Alpha版

        原型验证没有问题后,可以发布游戏的Alpha版。

news 243 18

5、发布阶段

5.1、创建引擎的测试Stream和开发Stream

        为测试人员创建引擎的测试Stream:

framework_test

        为开发人员创建引擎的开发Stream:

framework_dev

     开发人员完成开发后将最新代码从开发Stream更新到测试Stream。

news 243 19

5.2、创建资源相关的Stream

        给美工团队(开发人员、测试人员)创建资源的Main Stream及测试Stream、开发Stream,经开发、测试后发布资源的1.0版(resource-1.0)  

news 243 20

5.3、创建程序开发相关的Stream

        同样,我们给程序开发团队创建程序开发用测试Stream及开发Stream。  

news 243 21

        当开发/测试完成后,可以发布游戏开发的Beta版。 

news 243 22

四、总结

        随着游戏开发的团队规模变大,程序也越来越复杂,不同的团队开发不同的模块(引擎、美术资源、音频资源、程序等),推荐使用Helix Core的Stream来做整体的游戏开发管理。

        不同模块创建独立的Main Stream,团队只负责本团队的开发、测试并发布版本,并可根据需要引用其它团队的发布版本,甚至可以是测试中的版本。实现并行开发,提高整体的开发效率。

        开发人员只在开发Stream上工作,测试人员只在测试Stream上工作,项目经理可以在所有Stream上工作,发布Stream只管理稳定的发布版,可以确保不同人员只操作自己相关的内容,确保安全性。

五、参考

1、在Unity中使用Helix Core

1.先把项目拖入到工作空间,在打开项目选择Edit->projectSetting->Editor选择之后看右边属性栏选择Perforce

news 243 23

2.填入user数据,点击连接

news 243 24

3.此处出现红点,证明连接成功(服务器上没有数据,所以出现红点是提示更新)

news 243 25

2、在虚幻4中使用Helix Core

1.可以在编辑器中直接连接 Perforce 服务器,只需点击 工具栏 的 版本控制 按钮:

news 243 26

2.打开后,选择 Perforce 作为软件版本管理软件的提供商,并输入登录验证信息。

news 243 27

注意:对于有些服务器,也包括很多云端的服务,可能会需要手动输入主机和密码信息才能在编辑器中访问 Depot,在 Perforce 的登录对话框中打开高级选项即能看到:

news 243 28