游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5928|回复: 9

【原创】【讨论】游戏资源管理办法

[复制链接]

9

主题

50

帖子

60

积分

注册会员

Rank: 2

积分
60
QQ
发表于 2003-12-19 10:48:00 | 显示全部楼层 |阅读模式
下面是我琢磨了一段时间写的东东,没有写完,也写不下去了,脑子里头已经有框架和概念了,但是比较抽象,都是逻辑层面的东西
贴这里抛砖引玉吧,这方面的东西听少,欢迎讨论和指教
越多越好,如果没有人回复,那就太凄惨了 [em4]

谁能和我一起来完成它?[em24]

-----------------------------

游戏资源管理

内容是程序设计方法,并非具体实现。
面向游戏程序优化,非其它软件优化。
主要示例、考虑出发点基于3D MMORPG,方法同样适用其它游戏。

冯。诺伊曼体系计算机中有两种基本资源:1,存储 2,计算。

优化目的:轻量/高效/快速
优化原则:资源占用越少越好
终极目标:不需要Loading画面、流畅运行的游戏软件

一,存储资源优化
---------------------------------------
|
|
|
|
|
|
|
|
|
|
---------------------------------------

概念:
‘可能有用资源’、‘不可用资源’、‘可用资源’、‘垃圾资源’

基本资源:
使用策略:  

游戏资源管理器:

资源划分粒度:
对于资源管理器来说,被提交的装载资源请求可以是一张贴图或者一套皮肤或者是一整套人物数据,里面包括了他的所有动作的骨骼动画,所有表情的Mesh动画

文件,所有可能使用的贴图等。

资源优先级:

替代品的诞生:

二,计算资源优化

性能评测:作用是标尺,衡量出瓶颈处,找到优化的关键。

预处理:对于实时程序来说,预处理减少了资源消耗而且一劳永逸,事实上根本没有理由不去采用这种方法。原则就是:能够在我们的编辑器中处理的东西,就不要在玩家机器上处理。


调度器:计算资源的分配管理

例如我们的MMORPG游戏世界里头有一种叫做‘好心人’的NPC,他们散布于游戏世界的各处,帮助玩家进行游戏,充当和平使者。当然,如果让他们更像玩家在进行游戏时‘偶尔碰到的好心人’的话,我们的游戏设计者可能考虑让这些‘好心人’在游戏世界中自由散步,或许还不时说几句话,做点儿‘帮助老大妈过马路’这样的好事儿。
一直到这里,这个想法都很完美,可是如果老板认为游戏世界里这样的‘好心人’应该多一些,以达到玩家‘容易上手’的目的。例如他说要1000个,那会怎么样?我想可能诞生这样的代码:
CGame::Update()
{
  ...
  for( int i(0);i<1000;i++ )
    m_KindMan.Update();
  ...
}
我们假设 CKindMan::Update() 函数作为好心人的状态更新函数,里头可能包含简单的FSM和AI处理,但是有1000个的话,对游戏来说也未免是个负担。因为‘仁慈的好心人’对于Server的CPU,只是个负担,他们不会提供任何好的建议给CPU以减轻负担。
但是我们知道这样的好心人在游戏的中的作用似乎并不如‘拥有人性化AI的妖艳的女招待’吸引人,没必要在他们身上花费太多资源。而且,他们在游戏中偶尔发呆的话,也不会引起玩家太多怀疑,至少不会让玩家觉得server当机了。那么我们可以考虑把代码写成这样:

int CGame::m_nLastPos;  //初始值为0整数
int f=10;               //更新跨距,以游戏循环记。决定了更新频度。(f>= 2)
CGame::Update()
{
  ...
  for( int i=0;i<1000/f;i++ )
      m_KindMan[m_nLastPos+i*f].Update();
  ( m_nLastPos == f ) ? m_nLastPos = 0 : m_nLastPos += 1;
  ...
}
就这么简单,我们没必要每个游戏循环更新所有的‘好心人’这样就只用1/f的计算资源消耗。反之对于吸引人的‘拥有人性化AI的妖艳的女招待’NPC,我们知道我们不能这样做,或者只能让f值不大得离谱,因为她不能看起来就像块木头或者贴在墙上的画。
此方法扩展开来就是没有必要在每个游戏循环中更新所有对象。尤其是当你的游戏中有上万个东西需要在游戏循环里头更新状态的话(别告诉我你们用有几十块CPU,几十G内存的IBM服务器运行游戏

那调度器用来做什么呢?她可以是个根据游戏世界状态进行统一调度分配计算资源的管理者,例如在游戏负载小的时候提高那些NPC的更新频度,让他们‘活跃’起来,在Server负载很大的时候,调整频度,避免玩家看新式幻灯片。

算法优化:游戏是仿真世界,无需真实科学计算。
关于这方面的资料很多了,不再罗嗦。

三,程序设计者永远不是万能的。
结论:结合游戏的设计进行优化才是最恰当的。

如果一个优化策略是:人物处于游戏的(非战斗)城市场景内时,程序不装载游戏中人物的各种攻击动作、各种被攻击效果,出于让游戏跑得快点儿得念头,想必没有程序员会表示异议。
但是如果游戏设计者认为每个黑色星期五和每个21号的周日(他们有奇怪的想法的话也并不奇怪)都可以在城市内进行自由PK的话(或者设计者想在游戏世界中的终极魔头来到这个城市的时候,城市内的人必须能够自保),那么我们也不必立刻否决此项优化策略——这只是个特例,或许你只需在代码内增加几行,就可以做到两全其美。

以上例子同时说明了,特殊和一般的道理。我们只需去集中经历优化80%频繁使用的代码。
而且要记住:放之四海皆准的完美优化方案是永远不存在的。

[end]

0

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2003-12-19 16:36:00 | 显示全部楼层

Re:【原创】【讨论】游戏资源管理办法

不错的思考,拉一把 ^_^

90

主题

797

帖子

833

积分

高级会员

论坛版主

Rank: 4

积分
833
QQ
发表于 2003-12-19 19:50:00 | 显示全部楼层

Re:【原创】【讨论】游戏资源管理办法

其实不用那么麻烦,资源的存放本着方便好用为原则,从最通用的方法来说,是按模块区分资源,模块内部按功能分。

9

主题

50

帖子

60

积分

注册会员

Rank: 2

积分
60
QQ
 楼主| 发表于 2003-12-21 23:05:00 | 显示全部楼层

Re:【原创】【讨论】游戏资源管理办法

楼上的似乎没有完全理解我的意思,当然我写的也确实简单些了,遗憾

9

主题

50

帖子

60

积分

注册会员

Rank: 2

积分
60
QQ
 楼主| 发表于 2003-12-26 16:02:00 | 显示全部楼层

Re:【原创】【讨论】游戏资源管理办法

都7天了,彻底失望

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2003-12-30 09:15:00 | 显示全部楼层

Re:【原创】【讨论】游戏资源管理办法

我的想法是让一部分人走走停停。搞个random函数,或者被3除余1的人移动,其他的根本不动。过个10秒后被3除余2的人动,其他人不动,依次顺移。

不动的人在原地用个动画来显示,这样客户端看起来NPC不像是在发呆。

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2003-12-30 10:24:00 | 显示全部楼层

这个,我觉得

人物的骨骼和MESH 的 LOD,.....应该可以解决问题的吧.

3

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
发表于 2004-2-5 16:02:00 | 显示全部楼层

Re:【原创】【讨论】游戏资源管理办法

如果NPC要根据PLAYER的要求立刻作出反应的话(比如改变动作),
这样的优化方法是不是存在一点问题?
请指教 ^_^

0

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2004-2-6 08:14:00 | 显示全部楼层

Re:【原创】【讨论】游戏资源管理办法

郁闷拉   QQ 164657265

2

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2004-2-28 12:29:00 | 显示全部楼层

Re: 【原创】【讨论】游戏资源管理办法

不错,有一定的思考
但是,在任何情况下请记住,simple is enough,像资源,分为可用不可用即可,否则给自己增加难度。
像npc的Cpu调度正确的是使用Command模式,而不是简单轮循,因为有的npc需要频繁的思考(例如战斗中)
gameupdate(int ms)
{
for each npc is game
if (npc.timetoupdate(ms))
npc.run(ms)
}
第三,统一而不是分散,看你的抽象能力了,如果你的游戏资源少,例如3D,那么可以考虑一次加载完,如果是现在的2d,是绝对做不到的,所以用什么加载什么,不求折中的路,你愿意预测游戏的情况,当然很好,就怕得不偿失
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-14 19:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表