游戏开发中美术资源的管理
今天,公司的同事在 popo 群中讨论 svn 管理美术资源的问题。当资源量大了以后,工作起来效率特别低。因为 svn 储存的是压缩过的文件 diff ,对于大文件,计算最终结果的时候比较消耗 cpu 。
我认为 git 会好一些,但是 git 不满足权限管理的需要。不过更换同质工具并没有解决本质问题。就这个,我想了一下。或者应该换个思路,从工具入手,可能会更适合 3d 游戏的开发。当然,前提是,要有足够的引擎开发和改造能力。对现有工具做适量改进。
我希望从模型编辑器入手。这个工具通常是资源处理环节的最底层,直接面向美术人员的生产工具(max maya 等)。资源在这个工具中被转换到 engine 可用的状态,然后在其它开发工具中被加工。
这个工具,或在这个工具之下建立一个层次,制作成 C/S 结构,并直接集成版本管理工具的功能。即,Server 负责收集美术提交的原始资源。最好能直接让美术提交 max 文件,由工具去收集相关的贴图,然后置入数据库。Server 按照 engine 需要,转换制作成 engine 能用的格式。如果要服务于多个 engine 也没有问题。
美术开发人员,通过 tag 去标识他们上传的资源。比如可以自动把作者 id 作为 tag 打上。这些 tag 仅供事后检索使用。Server 同时也负责合并相同共用的贴图等。最终为每个独立资源生成唯一的 uuid 。我想说,这套东西可能很接近 Alien Brain ,但我需要的是和 Engine 其它部分集成的更好的 Alien Brain 。
其它工具在使用资源的时候,一律引用 uuid 。当然,在工具使用过程中,使用者检索资源的时候,是通过 tag 。但底层引用则使用 uuid 。在资源管理的层次的 Client ,除了负责上传资源原始文件外,也负责建立本地 cache ,提交检索请求。甚至提供浏览。一切工具需要加载资源,都通过 IPC 协议去获取数据。也可以退一步,由这个 Client 同步到新版的资源文件,并返回 cache 中的文件名。
当然,最终的游戏也可以通过相同的资源获取协议达到及时网络加载的特性;同样也可以不用这个特性,从由资源管理器最终打包好的资源包中读取。
这个系统设计成和 Engine 以及其它工具尽量功能正交化。适合独立开发维护。本文只是一个思路,设计方案还需要斟酌。
嗯,总结一下需求要点:
美术资源和程序代码不一样。不是每个人都需要一份完整的数据仓库的最新版镜像。需求只在他所维护的一部分素材以及当前项目需要的一部分。而整个美术素材仓库往往很大,没必要同步同步下来。这是和 svn 这样的版本管理工具处理的问题不同的。
美术资源原始素材和最终运行环境用到的数据不同,好比源代码和目标文件。协同开发时,程序员需要其它程序员的源代码帮助编译调错。但美术人员几乎不会用到其它人员的原始文件。因为场景中的一颗树和一张桌子中间没有什么会相互影响的东西。
美术资源大多交叉关联,并非树状结构。一个模型很可能由许多文件构成,但开发人员往往只关心顶层的个体。且在使用这些个体的时候,对它是什么更关心,对它在文件系统的那个位置不太关心。tag 会是对人更友好的检索方法。
开发工具多为自行开发,或有二次开发需求,以适合自己的游戏项目。集成少量资源管理接口难度不大。
Comments
Posted by: 毛熊熊 | (18) November 12, 2011 11:07 PM
Posted by: Silence | (17) August 3, 2011 11:35 AM
Posted by: Silence | (16) August 3, 2011 11:31 AM
Posted by: cheap Jordan sneakers | (15) July 2, 2011 04:26 PM
Posted by: nike shox r4 | (14) June 19, 2011 11:25 AM
Posted by: 防水板 | (13) June 11, 2011 02:54 PM
Posted by: Damon chen | (12) June 10, 2011 02:38 PM
Posted by: 启服 | (11) June 4, 2011 11:36 AM
Posted by: arnan | (10) June 3, 2011 10:40 PM
Posted by: mikecool | (9) June 2, 2011 11:39 AM
Posted by: Sparkle | (8) June 1, 2011 03:06 PM
Posted by: Crhan | (7) June 1, 2011 09:57 AM
Posted by: 鱼雷 | (6) May 31, 2011 08:19 PM
Posted by: 枫之羽 | (5) May 31, 2011 07:44 PM
Posted by: Siney | (4) May 31, 2011 04:25 PM
Posted by: Anonymous | (3) May 31, 2011 04:20 PM
Posted by: 不正直的人 | (2) May 31, 2011 03:17 PM
Posted by: makej2me | (1) May 31, 2011 01:39 PM