资产管理,数据库或版本控制系统?


29

在开发游戏资产时,(网格,纹理,声音,视频)如何管理它们?

  1. 将它们与源代码保持在版本控制系统中?(perforce,git等)
  2. 还是拥有专门用于资产的中央备份数据库,让编辑者总是喜欢它?(PostgreSQL,MySQL等…)
  3. 其他?

每种方案的优缺点是什么,为什么一个人应该选择另一个?


好问题。我很想听听其他人如何做到这一点。
David McGraw

1
有关版本控制的信息:gamedev.stackexchange.com/questions/480/…gamedev.stackexchange.com/questions/245/…我不认为这是重复的,因为它专门针对资产
肖恩·詹姆斯

Answers:


22

对于我们中的许多人(尤其是从事较小型游戏的人),您绝对应该将资源与源存储在同一资源库中

资产属于单独存储库的建议仅对非常大的资产集或在明确定义了引擎/数据边界的情况下对较大的资产集才有意义。除非有特定的技术原因,否则这是个坏建议!

您希望版本控制的行为类似于版本控制。您希望能够快退,快进以及分支和合并修订,并且仍能使游戏正常运行。而且您的代码和资产相互依赖。

例如:您的代码可能希望能够在着色器上设置参数,并且该着色器可能取决于那里的纹理。或者您关卡的数据格式可能取决于游戏代码的特定版本。

几乎肯定会变得凌乱。而且,与尝试保持整洁相比,您还有更好的事情要做。


现在,正如Mike Wagner评论(关于此答案)的那样-您不需要或不需要受版本控制的资产的所有“进行中”版本!代码所使用的只是最终版本/工作版本-通常是从工具中导出的版本。

(尽管您确实想对资产的当前版本进行版本控制-很好。并且非常适合于单独的存储库。我个人认为,良好的文件夹组织和适当的备份系统就足够了。)

话虽如此-有时可以选择仅将“进行中”的资产保留在版本控制下,这有时会很好。通常,这涉及到一个内容管道,该管道可以为您处理任何“导出”步骤,例如:将多层图像展平为单个纹理。


10

版本控制系统。

使用自行开发的方法,您最终可以有效地滚动版本控制系统,因此最好使用已经具有多年设计/代码/测试周期的现成版本。

将资产与源分开存放在一个单独的存储库中,以便更轻松地将签出/同步时间最小化,并就保留多少历史记录做出不同的决定(尽管磁盘空间很便宜,请在可行的情况下全部保留。单个纹理不会在项目的整个生命周期中变化不大)。

将XML文件标记为二进制文件,合并工具在合并嵌套标记方面往往非常糟糕,如果工具认为没有冲突,则美工不太可能发现损坏的标记。

如果可以的话,在每次提交时安排一次语法检查甚至是资产构建,并在失败时通过电子邮件将其拒绝发送给提交人;这将节省大量的团队时间。


2
同意将艺术品资产和代码资产保存在单独的存储库中。您可能还会发现,艺术家比编码员更不愿意签入某些东西,这不一定是因为他们发现系统令人生畏。他们可能对一个概念有30个粗略的轮廓,并且直到将其缩小到他们喜欢的东西之前才愿意提交。将此因素纳入生产流程。如果有技术主管喘口气检查所有内容,他们将在回购中花费更多的时间,而不是花很多时间来解决问题。
Casey Wagner

1
关于将XML文件标记为二进制文件:如果您的VCS允许使用单独的差异工具,请要求它使用专门用于XML文件的XML差异的工具。这可以帮助避免奇怪的标记破坏。
杰夫2010年

+1。:)资产属于它们自己的存储库-如果完全在存储库中。也许使用专用的资产存储库软件?为此目的而专门创建的,而不是试图使其适合主要用于文本内容的版本控制系统。
jacmoe 2010年

8

如果您可以负担得起的话,所有内容都放在一个存储库中。我听说过Subversion存储库在1 TB附近。我们目前略低于400 GB。

此外,艺术家要检查所有事物,包括概念的30个粗略轮廓。我们将单独的文件夹树用于“源资产”和“导出”-进入资产构建脚本的文件夹树。如果您的艺术家明天要乘公共汽车去,那么您需要能够让某人第二天继续工作,只浏览存储库(他的个人计算机上没有考古)。曾几何时,游戏是2D的,而精灵是从复杂的Max动画场景中渲染出来的,我们不得不在RTS游戏中运送一堆游戏单位,但有些cr脚,外观也非常不一致(相对于其余游戏单位),甚至尽管这是使用稍有不同的照明和抗锯齿设置进行重新渲染的问题-因为原始艺术家已退出,而且我们没有他的原始Max场景。不要


1
提及“总线因素”
表示支持
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.