在开发游戏资产时,(网格,纹理,声音,视频)如何管理它们?
- 将它们与源代码保持在版本控制系统中?(perforce,git等)
- 还是拥有专门用于资产的中央备份数据库,让编辑者总是喜欢它?(PostgreSQL,MySQL等…)
- 其他?
每种方案的优缺点是什么,为什么一个人应该选择另一个?
在开发游戏资产时,(网格,纹理,声音,视频)如何管理它们?
每种方案的优缺点是什么,为什么一个人应该选择另一个?
Answers:
对于我们中的许多人(尤其是从事较小型游戏的人),您绝对应该将资源与源存储在同一资源库中。
资产属于单独存储库的建议仅对非常大的资产集或在明确定义了引擎/数据边界的情况下对较大的资产集才有意义。除非有特定的技术原因,否则这是个坏建议!
您希望版本控制的行为类似于版本控制。您希望能够快退,快进以及分支和合并修订,并且仍能使游戏正常运行。而且您的代码和资产将相互依赖。
例如:您的代码可能希望能够在着色器上设置参数,并且该着色器可能取决于那里的纹理。或者您关卡的数据格式可能取决于游戏代码的特定版本。
几乎肯定会变得凌乱。而且,与尝试保持整洁相比,您还有更好的事情要做。
现在,正如Mike Wagner评论(关于此答案)的那样-您不需要或不需要受版本控制的资产的所有“进行中”版本!代码所使用的只是最终版本/工作版本-通常是从工具中导出的版本。
(尽管您确实想对资产的当前版本进行版本控制-很好。并且非常适合于单独的存储库。我个人认为,良好的文件夹组织和适当的备份系统就足够了。)
话虽如此-有时可以选择仅将“进行中”的资产保留在版本控制下,这有时会很好。通常,这涉及到一个内容管道,该管道可以为您处理任何“导出”步骤,例如:将多层图像展平为单个纹理。
版本控制系统。
使用自行开发的方法,您最终可以有效地滚动版本控制系统,因此最好使用已经具有多年设计/代码/测试周期的现成版本。
将资产与源分开存放在一个单独的存储库中,以便更轻松地将签出/同步时间最小化,并就保留多少历史记录做出不同的决定(尽管磁盘空间很便宜,请在可行的情况下全部保留。单个纹理不会在项目的整个生命周期中变化不大)。
将XML文件标记为二进制文件,合并工具在合并嵌套标记方面往往非常糟糕,如果工具认为没有冲突,则美工不太可能发现损坏的标记。
如果可以的话,在每次提交时安排一次语法检查甚至是资产构建,并在失败时通过电子邮件将其拒绝发送给提交人;这将节省大量的团队时间。
如果您可以负担得起的话,所有内容都放在一个存储库中。我听说过Subversion存储库在1 TB附近。我们目前略低于400 GB。
此外,艺术家要检查所有事物,包括概念的30个粗略轮廓。我们将单独的文件夹树用于“源资产”和“导出”-进入资产构建脚本的文件夹树。如果您的艺术家明天要乘公共汽车去,那么您需要能够让某人第二天继续工作,只浏览存储库(他的个人计算机上没有考古)。曾几何时,游戏是2D的,而精灵是从复杂的Max动画场景中渲染出来的,我们不得不在RTS游戏中运送一堆游戏单位,但有些cr脚,外观也非常不一致(相对于其余游戏单位),甚至尽管这是使用稍有不同的照明和抗锯齿设置进行重新渲染的问题-因为原始艺术家已退出,而且我们没有他的原始Max场景。不要