Board logo

标题: [其他] 突然想到了halo3回放模式的一个问题 [打印本页]

作者: 美版游戏饭丝    时间: 2007-9-27 13:00     标题: 突然想到了halo3回放模式的一个问题

众所周知,Halo3 回放的录像文件记录的只是玩家的操作序列,然后引擎根据这个操作系列重新把画面实时计算出来。但是,敌兵的动作是怎么记录的?AI计算出一个动作之后,也把其按照时间点为顺序保存到录像脚本文件中么?
作者: golden    时间: 2007-9-27 13:02

保存的就是一段代码,包括你控制的mc还有其它ai,影院模式只是把代码还原成图像,你可以在任何一个位置任何一个角度看自己的游戏过程。
作者: 江西恐龙    时间: 2007-9-27 13:07

不可以回头,只可以快进……这个可能是技术上无法解决的一个问题。也算是一个大遗憾。
作者: 骷髅上帝    时间: 2007-9-27 13:09

也不可以选择某特定时间,只能从本关开始.不过还是很爽.
作者: hanzo    时间: 2007-9-27 13:13

要记录所有敌兵的实时坐标和动态的话录像文件绝对不可能这么小,其实这是得益于halo3里AI逻辑的稳定,记录主角一人的行为足矣,牵一发而动全身
作者: cowboyblues    时间: 2007-9-27 13:16

引用:
原帖由 hanzo 于 2007-9-27 13:13 发表
要记录所有敌兵的实时坐标和动态的话录像文件绝对不可能这么小,其实这是得益于halo3里AI逻辑的稳定,记录主角一人的行为足矣,牵一发而动全身
神经网络?
作者: hudihutian    时间: 2007-9-27 14:01

只要你有本事手动玩两次,输入的按键顺序和时间是一摸一样的,那么游戏的过程和结果也是一摸一样的,这就是录像的原理。

根本不需要记录其他东西。
作者: shinkamui    时间: 2007-9-27 14:06     标题: 回复 #5 hanzo 的帖子

这是不可能的。敌兵的ai反应绝不是固定不变的,即使输入量(包含干扰等)完全相同,计算的时候也会用随机加权方式选择反应事件。

个人估计应该是类似视频压缩那样的方式,有全信息帧和增量帧组成,然后再压缩。当然,记录应该不是坐标类信息,而是事件的起始点坐标,时间,以及事件本身的id,这样的信息足以描述完整进程了。
作者: 江西恐龙    时间: 2007-9-27 14:08

我不太认同HANZO和hudihutian的说法,AI设计里肯定有随机性。你们的意思是只要保证主角的操作数据完全一致,场景、敌人的反应将会是100%一致?

举个简单的例子——A和B两个玩家,游戏一开始就按住“↑”键不动,不操作任何键。直到冲进敌人堆里被打死,他们的死亡瞬间将会是一致么?

我认为程序设计的时候肯定要大量的随机性,任何敌兵都有不同的百分几率来做出不同的反应。HALO3的回放模式,应该是记录了主角+敌兵的所有行动数据。
作者: hudihutian    时间: 2007-9-27 14:10

随机?计算机有随机?

随机全部都是伪随机……

计算机只是根据公式处理0和1而已……
作者: hudihutian    时间: 2007-9-27 14:11

谁能制造一个能产生真正随机数的方法或者公式?

嗯,这个人起码比爱因斯坦要强……
作者: 大头木    时间: 2007-9-27 14:14

应该是保存所有角色的坐标信息和动作信息。
容量也不会很大。
马里奥赛车A那种混战的都能用这么小的容量进行回放也没什么。
作者: mouseguard    时间: 2007-9-27 14:17

引用:
原帖由 hudihutian 于 2007-9-27 14:10 发表
随机?计算机有随机?

随机全部都是伪随机……

计算机只是根据公式处理0和1而已……
是伪随机, 只不过根据取样的不同会有几十种结果而已, 在我们看来已经是随机出现了, 我相信以恐龙的推断至少会发生10+种不同的死亡方法和时间
作者: hudihutian    时间: 2007-9-27 14:18

所有角色的坐标信息和动作信息?

omg

地图如果是1000000x1000000像素的,每秒60帧,仅仅记录主角的坐标信息每秒要多少字节?
作者: hudihutian    时间: 2007-9-27 14:20

引用:
原帖由 mouseguard 于 2007-9-27 14:17 发表


是伪随机, 只不过根据取样的不同会有几十种结果而已, 在我们看来已经是随机出现了, 我相信以恐龙的推断至少会发生10+种不同的死亡方法和时间
伪随机实际上就是根据公式去计算而已,只不过公式复杂一点,算法复杂一点,比如遗传算法等等,不过说到底公式绝对是一定的(即使“公式变化了”,怎么变化这个公式也是一定的)。

既然公式一定,输入什么,就会得到唯一一个输出,所以根本不存在随机的问题吧。
作者: 大头木    时间: 2007-9-27 14:22

引用:
原帖由 hudihutian 于 2007-9-27 14:11 发表
谁能制造一个能产生真正随机数的方法或者公式?

嗯,这个人起码比爱因斯坦要强……
为什么一定要通过代码来实现随机呢?现在随机都是通过时间的方式再加个随机函数,总也有重复的。

但如果是真的需要一个随机的数据的话可以增加一个硬件,就像彩票那样的一个马达,通过这个硬件产生的
随机的数据流来取得随机数,实现起来也简单,就像wiiremote的里面的动作感应可以取得数据样,加一个里面混有无数钢珠的马达,取得的数据也可以当作是随机数据了。
作者: hudihutian    时间: 2007-9-27 14:24

引用:
原帖由 大头木 于 2007-9-27 14:22 发表


为什么一定要通过代码来实现随机呢?现在随机都是通过时间的方式再加个随机函数,总也有重复的。

但如果是真的需要一个随机的数据的话可以增加一个硬件,就像彩票那样的一个马达,通过这个硬件产生的
随 ...
不通过代码通过什么?

所谓通过硬件的随机数据也是伪随机啊,只是公式超复杂罢了(那么多球球装来撞去,你算给我看看……,不过碰撞公式大家都知道)
作者: 超越神的牛肉人    时间: 2007-9-27 14:26

我只想问问为啥都说回放的时候画面要比打的时候画面来得强……
想了整整30秒想不出结果
我就睡了
作者: 大头木    时间: 2007-9-27 14:28

引用:
原帖由 hudihutian 于 2007-9-27 14:24 发表


不通过代码通过什么?

所谓通过硬件的随机数据也是伪随机啊,只是公式超复杂罢了(那么多球球装来撞去,你算给我看看……,不过碰撞公式大家都知道)
没有啊,这个和彩票的原理类似,难道彩票产生的数据就不是随机的了?如果这样的话就扯到哲学上了,这个世界都是完全规律的,没有随机了。
作者: hudihutian    时间: 2007-9-27 14:29

引用:
原帖由 大头木 于 2007-9-27 14:28 发表


没有啊,这个和彩票的原理类似,难道彩票产生的数据就不是随机的了?
当然不是随机的,所谓随机目前只存在于微观粒子的世界中吧……
作者: 大头木    时间: 2007-9-27 14:30

引用:
原帖由 超越神的牛肉人 于 2007-9-27 14:26 发表
我只想问问为啥都说回放的时候画面要比打的时候画面来得强……
想了整整30秒想不出结果
我就睡了
大概是因为已经可以提前得到下一帧的情况下可以提前对下一帧进行渲染的原因吧。

动画播放还有个双缓冲呢。
作者: hudihutian    时间: 2007-9-27 14:31

引用:
原帖由 大头木 于 2007-9-27 14:28 发表


没有啊,这个和彩票的原理类似,难道彩票产生的数据就不是随机的了?如果这样的话就扯到哲学上了,这个世界都是完全规律的,没有随机了。
恭喜您,爱因斯坦也是这么想的……

不过貌似杨振宁同学通过实验否定了这种想法…………
作者: 大头木    时间: 2007-9-27 14:33

引用:
原帖由 hudihutian 于 2007-9-27 14:29 发表


当然不是随机的,所谓随机目前只存在于微观粒子的世界中吧……
从宇宙大爆炸开始的那一瞬间,世界就没有随机了.........因为都遵循物理学,都存在算法。

那么随机这个词造出来还有啥意义。
作者: hudihutian    时间: 2007-9-27 14:34

引用:
原帖由 大头木 于 2007-9-27 14:33 发表


从宇宙大爆炸开始的那一瞬间,世界就没有随机了.........因为都遵循物理学,都存在算法。

那么随机这个词造出来还有啥意义。
爱因斯坦就是这么想的呀…………

随机这个词在他看来就是一个“迷信”的词汇吧……
作者: 大头木    时间: 2007-9-27 14:37

引用:
原帖由 hudihutian 于 2007-9-27 14:34 发表


爱因斯坦就是这么想的呀…………

随机这个词在他看来就是一个“迷信”的词汇吧……
爱因斯坦能不能通过物理算法算出我下一贴会回几个字,会不会回帖:D
作者: hudihutian    时间: 2007-9-27 14:39

引用:
原帖由 大头木 于 2007-9-27 14:37 发表


爱因斯坦能不能通过物理算法算出我下一贴会回几个字,会不会回帖:D
有什么计算不了,只不过超级复杂罢了,算了也不合算,没价值。

你不就一团分子么……
作者: xphi    时间: 2007-9-27 14:40

目前计算机的随机序列都是伪随机,只要保证随机种子是一样的,就能保证产生完全相同的随机序列,所以Halo3的战役模式下只要记录一个初始随机种子,游戏初始状态,玩家的输入序列就可以了。但是这样的保存问题就在在于要计算出某个特定时间的状况必须由初始状态一步步推算出来,这就是Halo3的战役模式录像不能随意的跳至某一时刻的原因。相对的还可以观察到Halo3多人对战的记录是可以分节后退的,这就是因为多人对战里不需要计算AI,一个分节点只需要记录某一时刻全局状态就可以了,这个数据量相对战役来说小很多。

对伪随机有兴趣的可以去看看 Knuth 的The Art of Computer Programming 的第二卷。
作者: xphi    时间: 2007-9-27 14:42

爱因斯坦是决定论的坚定拥护者,不过从现在混沌力学,量子力学的成果来看,决定论基本上已经本证明是错误的了,也就是说,绝对的随机是完全可能存在的。
作者: Ashley    时间: 2007-9-27 14:45

引用:
原帖由 xphi 于 2007-9-27 14:40 发表
目前计算机的随机序列都是伪随机,只要保证随机种子是一样的,就能保证产生完全相同的随机序列,所以Halo3的战役模式下只要记录一个初始随机种子,游戏初始状态,玩家的输入序列就可以了。但是这样的保存问题就 ...
正解!


我说你们不去操黑佬,怎么跑来讨论爱因斯坦啊...
作者: xphi    时间: 2007-9-27 14:48

上班的时间怎么操,晚上回家才能继续。
作者: hudihutian    时间: 2007-9-27 14:50

引用:
原帖由 xphi 于 2007-9-27 14:42 发表
爱因斯坦是决定论的坚定拥护者,不过从现在混沌力学,量子力学的成果来看,决定论基本上已经本证明是错误的了,也就是说,绝对的随机是完全可能存在的。
爱因斯坦错了,并不代表其他人对了,可能在更深的层次上,还是爱因斯坦对了…………

从某个角度上说,你永远无法证明爱因斯坦错了…………
作者: yangzhicai    时间: 2007-9-27 14:51

回放模式的过场除快进能跳过不看吗
作者: xphi    时间: 2007-9-27 14:53

至少现阶段的结论是爱因斯坦错了,科学论题都是等着去被证伪的,以后的事以后再谈。
作者: 江西恐龙    时间: 2007-9-27 14:56

hudihutian你还没回答下面的问题呢——
——A和B两个玩家,游戏一开始就按住“↑”键不动,不操作任何键。直到冲进敌人堆里被打死,他们的死亡瞬间将会是一致么?

其实就连2D游戏都有很丰富的随机性,格斗之王或者街霸,你进入游戏后不进行任何操作,你的死法绝对是不一样的。
作者: xphi    时间: 2007-9-27 14:58

引用:
原帖由 江西恐龙 于 2007-9-27 14:56 发表
hudihutian你还没回答下面的问题呢——
——A和B两个玩家,游戏一开始就按住“↑”键不动,不操作任何键。直到冲进敌人堆里被打死,他们的死亡瞬间将会是一致么?

其实就连2D游戏都有很丰富的随机性,格斗之 ...
计算机目前还没有使用真随机数的,你还是相信hudihutian的好。
作者: existzero    时间: 2007-9-27 14:58

live对战也可以重放啊,难道大家其实是生活在虚拟世界?世界上其他人都是ai?
作者: hudihutian    时间: 2007-9-27 14:59

引用:
原帖由 江西恐龙 于 2007-9-27 14:56 发表
hudihutian你还没回答下面的问题呢——
——A和B两个玩家,游戏一开始就按住“↑”键不动,不操作任何键。直到冲进敌人堆里被打死,他们的死亡瞬间将会是一致么?

其实就连2D游戏都有很丰富的随机性,格斗之 ...
随机种子……

如果随机种子一样,那就是一样的……

比如某游戏选定开始游戏的日期加时间为随机种子,那么如果随机种子一样,过程输入一样,结果肯定一样……
作者: 索尼来也    时间: 2007-9-27 14:59

引用:
原帖由 xphi 于 2007-9-27 14:58 发表



计算机目前还没有使用真随机数的,你还是相信hudihutian的好。
那么按着前不动这玩几次这游戏会怎么样?
作者: hudihutian    时间: 2007-9-27 15:01

简单的说,好像走在路口,只要你选定的路是确定的一条(某一随机种子,其实这个种子也是公式产生的,伪随机),那么到达的地方就是绝对一样的……
作者: 索尼来也    时间: 2007-9-27 15:02

还是好奇按前不动会怎么样,试试把:D
作者: hudihutian    时间: 2007-9-27 15:05

其实想验证,可以这样,开始模拟器玩,暂停,即时存档,按住上,继续……

反复load几次看看……

当然你的键盘要能稳定60帧输入吧…………
作者: xphi    时间: 2007-9-27 15:06

一般来说,程序员都回想些办法来使每次产生的随机序列不一样,也就是每次的随机种子不一样,这个种子最常用的就是当前的系统时间。因为每次程序开始的时间都不同,从人使用的统计学角度来讲,这个值几乎就是一个真随机数,所以看起来计算机似乎也有了真的随机型。
作者: 江西恐龙    时间: 2007-9-27 15:07

任何动作有百分比的发动几率就是随机了。何必纠缠在随机是真随机还是假随机呢?

以格斗之王为例子,敌人在我方100个象素点位置时,我方角色会有20%几率做出轻拳攻击,有30%的几率做出重拳攻击,有50%的几率会跳跃……这难道不是随机性?

——A和B两个玩家,游戏一开始就按住“↑”键不动,不操作任何键。直到冲进敌人堆里被打死,他们的死亡瞬间将会是一致么?
你敢回答说“士官长的死法100%每次都一样”?
作者: xphi    时间: 2007-9-27 15:07

所以即使每次都完全相同的输入,除非刻意去做到种子一样,比如回放录像,基本都会都到不同的AI反映结果。
作者: hudihutian    时间: 2007-9-27 15:10

引用:
原帖由 江西恐龙 于 2007-9-27 15:07 发表
任何动作有百分比的发动几率就是随机了。何必纠缠在随机是真随机还是假随机呢?

以格斗之王为例子,敌人在我方100个象素点位置时,我方角色会有20%几率做出轻拳攻击,有30%的几率做出重拳攻击,有50%的几率会 ...
那个百分之几是可以由算法算出来的,当然不叫真随机……

一个无理数你知道n位,那么第n+1位是多少?这个才能叫随机……

如果有xo模拟器,你只要开始游戏之后,能够save state,然后反复load,一直按住某键,排除一些外部干扰(比如手柄的机械性能),结果当然是一样的……

当然这是纯理论,跟真正玩起来tm有什么关系
作者: 江西恐龙    时间: 2007-9-27 15:15

你看看你,又开始谈随机的真假了……我们能不能不讨论真还是假呀。

你在本帖子里第一个回复是——
只要你有本事手动玩两次,输入的按键顺序和时间是一摸一样的,那么游戏的过程和结果也是一摸一样的,这就是录像的原理。根本不需要记录其他东西。

我对你这句话的回复是——
我不太认同HANZO和hudihutian的说法,AI设计里肯定有随机性。你们的意思是只要保证主角的操作数据完全一致,场景、敌人的反应将会是100%一致?
举个简单的例子——A和B两个玩家,游戏一开始就按住“↑”键不动,不操作任何键。直到冲进敌人堆里被打死,他们的死亡瞬间将会是一致么?

你到现在还没有回答我的问题哦……
作者: hudihutian    时间: 2007-9-27 15:17

引用:
原帖由 江西恐龙 于 2007-9-27 15:15 发表
你看看你,又开始谈随机的真假了……我们能不能不讨论真还是假呀。

你在本帖子里第一个回复是——
只要你有本事手动玩两次,输入的按键顺序和时间是一摸一样的,那么游戏的过程和结果也是一摸一样的,这就是 ...
种子,随机种子,我默认随机种子一样了

实际上百分之九十九以上的情况,随机种子就是时间
作者: 宋江    时间: 2007-9-27 15:20

引用:
原帖由 hudihutian 于 2007-9-27 15:10 发表


如果有xo模拟器,你只要开始游戏之后,能够save state,然后反复load,一直按住某键,排除一些外部干扰(比如手柄的机械性能),结果当然是一样的……

当然这是纯理论,跟真正玩起来tm有什么关系
不要想当然,XO当然没有模拟器,但是有CHECKPOINT.
在每一个CHECKPOINT后你死亡,然后在当时的情景下重新开始,和SAVE/LOAD是一样的.
你觉得每次周围的环境互动,是会完全一样的么?
你可以去试,我告诉你,一定是不一样的.

不要说什么真随机假随机,这里讨论的随机,无非就是一个随机函数取出来的值,对于玩家来说,这就是真正的随机,因为人脑无法应对这种不确定性.
再扯远,那就是纯粹的瞎扯了.
作者: hudihutian    时间: 2007-9-27 15:22

引用:
原帖由 宋江 于 2007-9-27 15:20 发表


在每一个CHECKPOINT后你死亡,然后在当时的情景下重新开始,和SAVE/LOAD是一样的.
随机种子变了你根本看不到……

变没变也不知道……
作者: 大头木    时间: 2007-9-27 15:23

不用多说了,实践是检验真理的唯一标准。

恐龙回去,将两台X○对完全相同的时间,同时开始游戏,然后按着前,

录像试试看。

或者,让两个X○同时开始,然后什么按键也不懂,然后看敌兵的反应。
作者: hudihutian    时间: 2007-9-27 15:25

引用:
原帖由 大头木 于 2007-9-27 15:23 发表
不用多说了,实践是检验真理的唯一标准。

恐龙回去,将两台X○对完全相同的时间,同时开始游戏,然后按着前,

录像试试看。

或者,让两个X○同时开始,然后什么按键也不懂,然后看敌兵的反应。
随机种子如果精确到毫秒呢?

如果除时间外还有别的种子呢?

最简单的方法就是分析重放的文件……

大家见过修改模拟器录像文件的高人没?

没见过的话,见过分析war3录像的软件没?

你每个操作都在录像里面记录的好好的……
作者: 江西恐龙    时间: 2007-9-27 15:28

——A和B两个玩家,游戏一开始就按住“↑”键不动,不操作任何键。直到冲进敌人堆里被打死,他们的死亡瞬间将会是一致么?

你到现在还没有回答我的问题……
作者: 大头木    时间: 2007-9-27 15:28

引用:
原帖由 hudihutian 于 2007-9-27 15:25 发表


随机种子如果精确到毫秒呢?

如果除时间外还有别的种子呢?

最简单的方法就是分析重放的文件……

大家见过修改模拟器录像文件的高人没?

没见过的话,见过分析war3录像的软件没?

你每个操作 ...
真心请教,除了时间以外还能通过什么数据获得随机数种子?
精确到毫秒也好解决,100台X○伺候,重复多次试验。

[ 本帖最后由 大头木 于 2007-9-27 15:29 编辑 ]
作者: hudihutian    时间: 2007-9-27 15:33

引用:
原帖由 大头木 于 2007-9-27 15:28 发表


真心请教,除了时间以外还能通过什么数据获得随机数种子?
精确到毫秒也好解决,100台X○伺候,重复多次试验。
太多了,主机id和游戏开始时间的乘积作为随机数种子,你1亿台来也不一定能伺候得了……
作者: hudihutian    时间: 2007-9-27 15:34

引用:
原帖由 江西恐龙 于 2007-9-27 15:28 发表
——A和B两个玩家,游戏一开始就按住“↑”键不动,不操作任何键。直到冲进敌人堆里被打死,他们的死亡瞬间将会是一致么?

你到现在还没有回答我的问题……
嗯,你能保证绝对同时开始的话……
作者: hanzo    时间: 2007-9-27 15:38

恐龙玩过2D游戏录像就知道了,用gens模拟器,我录制个同屏10人的BK2全程录像也就几百K
作者: legendkang    时间: 2007-9-27 15:39

你们谈的都是伪科学!接着忽悠吧!什么真随机假随机!扯谈!
作者: 宋江    时间: 2007-9-27 15:41

引用:
原帖由 hudihutian 于 2007-9-27 15:34 发表


嗯,你能保证绝对同时开始的话……
你这个就是扯蛋了,世界几乎上不可能存在这种绝对同时的情况.
就算是只精确到毫秒,这种可能性也微乎其微.

我说了,人脑不能应对的这种情况,当然就可以算是随机的了.你要用绝对的理论来否定相对的事实,那是没有底线的.
作者: legendkang    时间: 2007-9-27 15:42

引用:
原帖由 hudihutian 于 2007-9-27 15:34 发表


嗯,你能保证绝对同时开始的话……
狠狠揍你的屁话!
作者: hudihutian    时间: 2007-9-27 15:44

引用:
原帖由 宋江 于 2007-9-27 15:41 发表


你这个就是扯蛋了,世界几乎上不可能存在这种绝对同时的情况.
就算是只精确到毫秒,这种可能性也微乎其微.

我说了,人脑不能应对的这种情况,当然就可以算是随机的了.你要用绝对的理论来否定相对的事实,那是 ...
对于人来说,没有可能,对于机器来说,就有可能,于是有了游戏录像。

前面hanzo提的gens录像,拿ue打开看看就知道了……

当年极品飞车玩一局还有重放呢,ps才多少内存,存“xxx的坐标,xxx的ai”?实际么?
作者: legendkang    时间: 2007-9-27 15:46

不就一个录像嘛!操来操去谈什么随机!
作者: 宋江    时间: 2007-9-27 15:48

引用:
原帖由 hudihutian 于 2007-9-27 15:44 发表


对于人来说,没有可能,对于机器来说,就有可能,于是有了游戏录像。

前面hanzo提的gens录像,拿ue打开看看就知道了……

当年极品飞车玩一局还有重放呢,ps才多少内存,存“xxx的坐标,xxx的ai”?实 ...
那我问你,是人玩游戏,还是机器玩游戏.
我们说的这个随机情况,是针对人产生的,还是针对机器产生的?

所以说你说的那些话,都毫无意义,对于我们来说,的确是存在随机的.
作者: xphi    时间: 2007-9-27 15:49

有空在这里扯,随便找本书看看不就知道了,这个随机数是计算机的最基本知识啊,写过程序的话就不会有这么多问题了吧。
作者: 枉凝眉    时间: 2007-9-27 15:52

唉,我在主区的帖子老是被封加扣分,为嘛,为嘛,为嘛?

在这个帖子里溜达溜达

星际录像2000年的时候就解决录像问题了,一个小时的比赛,录像下来不到200k
关于随机的问题,星际里面也有很多随机的东西,比如从低地打高地,有成功率,不过这个成功率肯定是跟固定数值联系在一起的,比如时间坐标(具体是啥我不清楚),要不这录像肯定放不了,就像用高不同版本星际放不同版本录得录像一样,过一段时间之后录像就不正常了

星际一样不能回放录像,除非所有的效果和动作有反方向的设计,而且一开始就得先把录像快进到底,然后再回放
作者: hudihutian    时间: 2007-9-27 15:52

就是,我上初中计算机课讲到dos下的随机数命令,就知道计算机只能产生伪随机……

伪随机什么意思?伪随机就是确定!

这贴本来就是说游戏录像,说tm脑残说伪随机或者随机对于游戏玩家而言有什么意义了……

伪随机只是说明整个游戏过程在输入状态一致的情况下是可重复的,这就是游戏录像的原理……

什么都不懂的,可以参考别的游戏录像的数据结构嘛
作者: zo    时间: 2007-9-27 16:02

引用:
原帖由 hudihutian 于 2007-9-27 14:18 发表
所有角色的坐标信息和动作信息?

omg

地图如果是1000000x1000000像素的,每秒60帧,仅仅记录主角的坐标信息每秒要多少字节?
这个能有多少字节?
就按你来说坐标的单位达到1000000,
1000000换算成十六进制是F4240.

两个坐标F4240F4240一共是10字节。
10*60*60=一分钟游戏内容不过花掉35kb保存数据。

何况这还是最愚蠢最笨拙的办法。

Halo应该只是保存玩家操作信息和AI取值,数据量要小很多。
作者: legendkang    时间: 2007-9-27 16:04

引用:
原帖由 zo 于 2007-9-27 16:02 发表

这个能有多少字节?
就按你来说坐标的单位达到1000000,
1000000换算成十六进制是F4240.

两个坐标F4240F4240一共是10字节。
10*60*60=一分钟游戏内容不过花掉35kb保存数据。

何况这还是最愚蠢最笨拙 ...
实在!放录像谈什么随机!
作者: hudihutian    时间: 2007-9-27 16:06

引用:
原帖由 zo 于 2007-9-27 16:02 发表

这个能有多少字节?
就按你来说坐标的单位达到1000000,
1000000换算成十六进制是F4240.

两个坐标F4240F4240一共是10字节。
10*60*60=一分钟游戏内容不过花掉35kb保存数据。

何况这还是最愚蠢最笨拙 ...
问题是地图到底多大?
只有一个人物?
只有坐标这一个值?
所以说记录这些是不现实的,其实也是不安全的,太多的要素反而会让录像出错的概率提高……

最简单的办法就是分析录像文件,这tm不是很简单么?除非微软蛋疼,给录像文件加密…………
作者: xphi    时间: 2007-9-27 16:19

引用:
原帖由 zo 于 2007-9-27 16:02 发表

这个能有多少字节?
就按你来说坐标的单位达到1000000,
1000000换算成十六进制是F4240.

两个坐标F4240F4240一共是10字节。
10*60*60=一分钟游戏内容不过花掉35kb保存数据。

何况这还是最愚蠢最笨拙 ...
这个计算太奇怪了,一般来讲,记录一个物件的位置,方向,需要六个座标值,这个值就是你这里计算的35K的3倍,算是100K吧,如果场景中有1000个物件的话,就需要100M,每分钟100M,还仅仅只是位置信息……。
作者: zo    时间: 2007-9-27 16:23

引用:
原帖由 xphi 于 2007-9-27 16:19 发表


这个计算太奇怪了,一般来讲,记录一个物件的位置,方向,需要六个座标值,这个值就是你这里计算的35K的3倍,算是100K吧,如果场景中有1000个物件的话,就需要100M,每分钟100M,还仅仅只是位置信息……。
怎么可能三倍。

实际4个字节就足以表现一个角色的方向,角度,当前的状态操作。 6个坐标值是怎么来的= =.
作者: xphi    时间: 2007-9-27 16:25

引用:
原帖由 zo 于 2007-9-27 16:23 发表

怎么可能三倍。

实际4个字节就足以表现一个角色的方向,角度,当前的状态操作。 6个坐标值是怎么来的= =.
3维空间中位置坐标需要x,y,z 3个值,方向向量也需要x,y,z三个值。还仅仅是位置方向。
作者: 大头木    时间: 2007-9-27 16:25

而且在多人联机的情况下还有什么随机可谈,再怎么简化数据,所有角色的坐标,或者是动作始终要记录下来的,这数据能有多大?
作者: 大头木    时间: 2007-9-27 16:27

引用:
原帖由 xphi 于 2007-9-27 16:25 发表


3维空间中位置坐标需要x,y,z 3个值,方向向量也需要x,y,z三个值。还仅仅是位置方向。
只记录动作就行了啊,要是真的把所有信息,坐标等都记录下来,那想慢放,想回放不就可以实现了。
作者: 大头木    时间: 2007-9-27 16:27

引用:
原帖由 xphi 于 2007-9-27 16:25 发表


3维空间中位置坐标需要x,y,z 3个值,方向向量也需要x,y,z三个值。还仅仅是位置方向。
只记录动作就行了啊,要是真的把所有信息,坐标等都记录下来,那想慢放,想回放不就可以实现了。
作者: 枉凝眉    时间: 2007-9-27 16:32

晕,记住物体实时的坐标干什么
只要记住所有物体的指令坐标,在哪个时间点发出什么样的指令,剩下的让机器自己运算出来了
好比让主角从a点到b点跑了一条直线,录像只要记住指定的起始时间、指令的具体内容就行了,让机器在同样地图上调用同样主角执行这个指令,就是让机器代替人重新输入这个指令而已,效果肯定一样哈
难道还要记下来第一秒坐标、第二秒坐标……第一千秒坐标么?
作者: 二流大神    时间: 2007-9-27 16:35

看完这贴,恍然大悟鸟。
作者: xphi    时间: 2007-9-27 16:43

引用:
原帖由 大头木 于 2007-9-27 16:27 发表


只记录动作就行了啊,要是真的把所有信息,坐标等都记录下来,那想慢放,想回放不就可以实现了。
记录动作的话信息量不会少,要记录方向,速度,质量等等问题。
作者: xphi    时间: 2007-9-27 16:46

引用:
原帖由 枉凝眉 于 2007-9-27 16:32 发表
晕,记住物体实时的坐标干什么
只要记住所有物体的指令坐标,在哪个时间点发出什么样的指令,剩下的让机器自己运算出来了
好比让主角从a点到b点跑了一条直线,录像只要记住指定的起始时间、指令的具体内容就行 ...
游戏里的物件不是一个孤立的存在,不像做Flash,制定轨迹就可以了,如果记录轨迹的话,还要记录物件之间的交互,记录量会更加的大。

目前大部分的游戏录像,包括SC,Halo3,几乎所有的模拟器,都是记录玩家的输入序列和机器初始状态,然后重新“玩”了一次游戏,就这么简单而已。
作者: 枉凝眉    时间: 2007-9-27 16:51

引用:
原帖由 xphi 于 2007-9-27 16:46 发表


游戏里的物件不是一个孤立的存在,不像做Flash,制定轨迹就可以了,如果记录轨迹的话,还要记录物件之间的交互,记录量会更加的大。

目前大部分的游戏录像,包括SC,Halo3,几乎所有的模拟器,都是记录玩 ...
记录物件之间的交互做什么?交互的规则是游戏中早就有了,重新调用这个规则不就行了?

现在的sc、cs录像,无非都是记录指令与时间的关系,交互的规则已经包含在游戏程序里了,根据指令的结果重新运行出交互的规则就可以了
作者: karsus    时间: 2007-9-27 16:52

我晕,都扯哪里去了,回放个录像都能扯飞了,还搞到随机去了

从图形学上看,你只是回放录像的话,只需要把渲染的命令存贮下来,回放的时候直接让引擎再渲染一遍就好了,哪那么麻烦,还要计算AI。。。那些都是已经决定了的东西

不能后退的原因是。。。那是现渲染,不是播视频文件,哪个听说过代码可以倒过来执行的
(没玩HALO3,推测,如有误差见谅)
作者: xphi    时间: 2007-9-27 16:58

SC,模拟器的录像文件都是可以拿来看的,不相信的人自己去分析一下录像文件就完了么,我没兴趣再去和考猜来思考问题的人讨论了。
作者: 马甲007号    时间: 2007-9-27 17:14

引用:
原帖由 枉凝眉 于 2007-9-27 16:32 发表
晕,记住物体实时的坐标干什么
只要记住所有物体的指令坐标,在哪个时间点发出什么样的指令,剩下的让机器自己运算出来了
好比让主角从a点到b点跑了一条直线,录像只要记住指定的起始时间、指令的具体内容就行 ...
这样做法会产生物体运动不同步的误差,一个例子就是录像以正常游戏视角和用户观赏视角来观看会导致帧数不一致,帧数不一致会导致物体运动加快或变慢而产生时间误差。这种误差不能通过跳帧来修正,因为跳帧本身也产生误差。动作游戏中这类误差会累积的非常快,这样后果就是录像播到中后期会出现很滑稽的画面。所以基于时间轴记录物体的状态永远要比记录指令要精确的多,数据耗费也多得多。
所以现在流行的做法是状态采样,在一个短的时间间隔里对状态采一次样,采样点之间的状态由机器实时运算,这样做数据量较少而误差也可控
作者: msforza    时间: 2007-9-27 17:14

看完都晕了,我总结一下吧,通俗的,比如在游戏的过程中我按手柄1秒向前走3然后射,这时电脑根据算法算出怪物当时难度的最佳反应,比如怪后退3然后回射,录像文件仅记录了我的初始地点—>向前3—>射,怪的初始地点—>后退3—>回射,并不会记录任何ai或任何控制器输入,也不会在后期渲染的时候再计算什么,只记录了得到的结果,所以这个过程是连续的,不可以从中间某步骤开始,以上是我的理解
作者: hudihutian    时间: 2007-9-27 17:26

错了,电脑只会记忆你的初始地点,向前3,射,怪的反应是计算出来的
作者: legendkang    时间: 2007-9-27 17:31

其实不就一录像嘛!其实不就是一即时预渲染的cg片头嘛!什么事都没有!你们继续忽悠吧!
作者: Ashley    时间: 2007-9-27 17:32

有这么复杂嘛?

只要完全记录随机数生成程序的入力,这个随机数就是个定数,无论输入多少遍出来的都是唯一值

和电脑交互的就只是玩家的入力,AI这些都是算出来的阿...

[ 本帖最后由 Ashley 于 2007-9-27 17:33 编辑 ]
作者: msforza    时间: 2007-9-27 18:18

引用:
原帖由 hudihutian 于 2007-9-27 17:26 发表
错了,电脑只会记忆你的初始地点,向前3,射,怪的反应是计算出来的
也有可能,但是如果回放速度是2倍呢,那岂不马上三红?或者是隔帧渲染?我觉得只记录结果会更省资源,回放可以做的更漂亮
我举个只记录输入,回放的时候即时计算物理和ai失败的典型例子吧,xb时代的rsc2,如果游戏的时候发生坠落峡谷的情况,看回放的时候就会会出现车辆乱走,我认为那就是因为回放文件只记录了控制器输入,而回放时的物理反馈和游戏时候有差别
作者: zo    时间: 2007-9-27 18:30

引用:
原帖由 xphi 于 2007-9-27 16:25 发表


3维空间中位置坐标需要x,y,z 3个值,方向向量也需要x,y,z三个值。还仅仅是位置方向。
引用:
原帖由 xphi 于 2007-9-27 16:19 发表


这个计算太奇怪了,一般来讲,记录一个物件的位置,方向,需要六个座标值,这个值就是你这里计算的35K的3倍,算是100K吧,如果场景中有1000个物件的话,就需要100M,每分钟100M,还仅仅只是位置信息……。
首先申明,我前面已经提到HALO的录像是存储操作信息和AI取值。这样的优点是数据非常小,缺点是不能自由取段播放和倒放。

其次,我也很蛋痛,希望证明录像通过完全记录时间轴上的路径位置和状态数据的方式,虽然数据量会多很多,但也不是完全不现实的。

首先地图是多大?

很显然,地图坐标大小和画面分辨率毫无关系,HALO也不是一个像素级别移动的游戏。
你前面提到地图取值达到1百万*1百万,并没有提到场景的高度,我理解为是一个纯平面的场面,才导致前面的算法并未加上Z轴,而且这个1百万也太不严谨。

我们重新假设来场景的地图取值。
假设场景为1平方公里见方,高100M的空间。地图最小移动尺度为2cm.
那么地图单位就为50000*50000*5000。
这里可以使用一个优化算法,就是把整个地图平均分成(ABCD)等16个区,那么每个区的坐标就是3125*3125*5000.
还有halo的地图并不是所有坐标角色都能到达,对于主角来说,至少有一半以上的地形不能去到,对于npc和敌人来说,便有更多地方不能去了。
这些不能到达的坐标,可以在地图取值中删掉。
在这里,我们优化掉一半。那么得到3125*3125*2500.
那么一个人物地图坐标就是312531252500=48C4507514+分区A=11个字节
坐标我们只记录人物的运动状态,静止状态不用记录。假设人物70%时间在运动,30%时间静止。

人物视角角度坐标。
我们假设精度达到水平方向2000*垂直方向2000,去除人物瞄准的死角,比如正上方和正下方。
得到面对角度坐标为2000*1600=1313340=7个字节
坐标我们只记录准心的运动状态,静止状态不用记录。假设人物60%时间在瞄准,40%时间固定视角。

人物动作状态。
根据HALO的动作数量,3个字节足以表现所有状态。
我们只记录运动改变状态,静止或者延续状态不用记录。假设人物50%时间在改变状态,50%时间保持静止状态或者延续状态。


人物武器种类和副武器种类 2个字节,这个不需要每帧做记录,每次更换武器记录一次。我们假设1s更换一次武器。

手雷
4种手雷每种两个。使用4字节。每次手雷数目变化的时候记录。假定平均2s记录一次。

武器弹数
每把武器使用2个字节,一共4个字节,消耗的时候记录。假定平均0.5s记录一次。

装备装置
一个字节,消耗或者改变的时候记录。假定平均30s记录一次。

护盾
2个字节,消耗或者改变的时候记录。假定平均2s记录一次。

这样我们得到主角的全状态记录数据。因为halo3的回放是30Fps,所以我们只按照30Fps来计算。

主角一分钟数据量
位置坐标
11*70%*30fps*60=13860字节

瞄准坐标
7*60%*30fps*60=7560字节

动作状态
3*50%*30fps*60=2700字节

武器种类
2*60=120字节

手雷
4*30=80字节

武器弹数
4*120=480字节

护盾
2*30=120字节

总共一分钟主角占用24kb的数据


我们假设战场上有1个重要npc,4个次要npc,20个敌人,其中重要npc的数据是主角的40% ,次要npc的数据是主角的25%,敌人的数据是主角的10%.
总共人物数据是24+24*40%+24*4*25%+24*20*10%=一分钟106KB

即使把其他战场上的多余数据如弹道,物体移动,和场景破坏等整体数据加起来算作主角的2倍。

也不过一分钟318kb的数据,半小时时间10mb不到。
这还没做过数据压缩。

所以说录像通过完全记录路径位置和状态数据的方式,文件虽然大,也还是算行得通的。

[ 本帖最后由 zo 于 2007-9-27 18:34 编辑 ]
作者: xphi    时间: 2007-9-27 19:01

引用:
原帖由 zo 于 2007-9-27 18:30 发表



首先申明,我前面已经提到HALO的录像是存储操作信息和AI取值。这样的优点是数据非常小,缺点是不能自由取段播放和倒放。

其次,我也很蛋痛,希望证明录像通过完全记录时间轴上的路径位置和状态数据的方 ...
只看了第一段,后面部分还没看,我首先指出你的一个计算上的基本问题。

在记录物件的位置时,即使在一个1km^3的空间中记录,以2cm为精度,那么也只需要x,y,z三个坐标值,每个值的极限大小为50000,对于每一个值我只需要用一个16位的无符号整数字(0-65535)来表示就可以了,一个坐标值占用2字节,所以一共只需要6个字节,不知道你在那里优化了半天怎么还需要11个字节。
作者: xphi    时间: 2007-9-27 19:15

你后面的计算我看了一下,不可靠的推测太多了,特别是对某些物件使用数秒的时间单位进行采样,这肯定使不合理的,比如在Halo3中,2秒的时间我都可以丢出去2、3个手雷了。

此外,你对于场景中的物件这个概念的理解有问题。对于一个主角,由于是一个活动的模型,以Halo为例,就是一个人的样子,是包含了很多个物件的,头,手,躯干,武器。此外场景中的所有可以移动的物体都是物件。

所以我们也来简化的算一下:
每个物件位置6个字节,方向矢量以球面坐标来计算,取极低的精度,每维只用一个字节,总共三个字节,场景中共有1000个物件,每秒30帧的采样率计算,每分钟在不考虑数据结构,文件结构,附加数据的情况下,供需消耗(6+3)x1000x30x60=16,200,000个字节,也就是16M的数据量,事实上这个数据还是很不充分的。
作者: xphi    时间: 2007-9-27 19:19

引用:
原帖由 msforza 于 2007-9-27 18:18 发表

也有可能,但是如果回放速度是2倍呢,那岂不马上三红?或者是隔帧渲染?我觉得只记录结果会更省资源,回放可以做的更漂亮
我举个只记录输入,回放的时候即时计算物理和ai失败的典型例子吧,xb时代的rsc2,如 ...
事实上Halo3在加速回放的时候,在复杂场景下会发生严重的跳帧。性能很差的机器回放SC的录像选择高倍速也会跳帧。
作者: msforza    时间: 2007-9-27 19:42

引用:
原帖由 xphi 于 2007-9-27 19:19 发表


事实上Halo3在加速回放的时候,在复杂场景下会发生严重的跳帧。性能很差的机器回放SC的录像选择高倍速也会跳帧。
跳的不明显,我一直以为是隔帧渲染
作者: xphi    时间: 2007-9-27 19:45

在火爆的对战场景按住RT不放的话,有时可能只有几FPS。
作者: karsus    时间: 2007-9-27 20:28

受不了你们了。。还真以为回放录像的时候是真计算了一把,肯定是把渲染命令拿出来重新执行了一次罢了,至于跳祯,那么复杂的场景,你让它加速绘制当然不可能,所以就出现了那种情况
作者: karsus    时间: 2007-9-27 20:36

引用:
原帖由 xphi 于 2007-9-27 16:46 发表


游戏里的物件不是一个孤立的存在,不像做Flash,制定轨迹就可以了,如果记录轨迹的话,还要记录物件之间的交互,记录量会更加的大。

目前大部分的游戏录像,包括SC,Halo3,几乎所有的模拟器,都是记录玩 ...
我觉得你说的这个方法实在太多余,直接记录渲染命令让图像引擎重新渲染一遍就是了,如果那些信息都要记录然后重新玩一遍,那举个例子,一次判定,你是记录操作信息还是记录结果信息,如果记录了结果那还记录操作信息干嘛,重新计算不是还要耗费时间,毕竟,录像看就好了,不用操纵
作者: xphi    时间: 2007-9-27 20:41

引用:
原帖由 karsus 于 2007-9-27 20:36 发表


我觉得你说的这个方法实在太多余,直接记录渲染命令让图像引擎重新渲染一遍就是了,如果那些信息都要记录然后重新玩一遍,那举个例子,一次判定,你是记录操作信息还是记录结果信息,如果记录了结果那还记录 ...
别的太明显的错误就不和你说了,知不知到Halo3的回放是可以自由移动镜头的?
作者: karsus    时间: 2007-9-27 21:21

引用:
原帖由 xphi 于 2007-9-27 20:41 发表


别的太明显的错误就不和你说了,知不知到Halo3的回放是可以自由移动镜头的?
。。自由移动镜头和我说的有什么关系吗?只要不能操作,那我说的方法就没问题

恩,如果你指的是视野外的内容,记录命令和去执行是两码事吧,至于细节层次问题,那只不过是调用模型贴图罢了,除非移动了镜头渲染效果发生了本质变化才能说明额外的信息在回放的过程中被重新计算了

总的来说,我觉得你说的方法实在太不实际,具体实现起来太麻烦了,基本上只需要调用渲染单元,可能再加上一些单元来处理你在移动镜头时的判定罢了,记录操作信息再计算太不实际而且没有必要
作者: nLeXeR    时间: 2007-9-27 21:25

引用:
原帖由 hudihutian 于 2007-9-27 14:18 发表
所有角色的坐标信息和动作信息?

omg

地图如果是1000000x1000000像素的,每秒60帧,仅仅记录主角的坐标信息每秒要多少字节?
又不是记录坐标,他只要记录你的操作就行了,例如记录你按了10秒前,再按了10秒左,然后回放的时候你自动往前10秒再往做10秒,中间的左边一运算不就出来了嘛。
至于AI的行动,魔兽星际的录象大家总看过吧,里面还不是有NPC一样的AI,总不能说每次看录象都不一样吧,具体这个怎么实现的我也不清楚
作者: xekrn    时间: 2007-9-27 21:28

引用:
原帖由 karsus 于 2007-9-27 21:21 发表


。。自由移动镜头和我说的有什么关系吗?只要不能操作,那我说的方法就没问题

恩,如果你指的是视野外的内容,记录命令和去执行是两码事吧,至于细节层次问题,那只不过是调用模型贴图罢了,除非移动了镜 ...
不知道你在胡扯什么。游戏的时候MC视角外的东西全部都被clip掉,哪里来的渲染指令?
回放的时候可以第一视角第三视角随便切换,可以360随便转视角,还可以自由控制camera去游戏里去不了的地方,这些地方正常游戏怎么来的“渲染指令”?
你以为这里说“播片”就真是“播片”啊?
作者: xekrn    时间: 2007-9-27 21:31

不知道游戏里各种爆炸的粒子系统是不是也把随机数种子都记录下来了,每个火花飞溅的角度都和进行游戏的时候一摸一样么?没查过。。。。。。




欢迎光临 TGFC Lifestyle (http://club.tgfcer.com/) Powered by Discuz! 6.0.0