无限星辰官方论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 91158|回复: 159

[原创] Infinity核心技术“过程生成”专题帖(更新2楼)

  [复制链接]
发表于 2007-10-22 18:14:24 | 显示全部楼层 |阅读模式
为何Infinity敢说“上亿的星系”“每一个星球都可以无缝登陆”而且他们全都独一无二?!答案就是:Procedural Generation(过程生成),“过程生成”是Infinity的核心技术,支撑了整个游戏的构架,但是很多人并不了解什么是“过程生成”,把其误认为一种随机技术。其实根本不是那么回事。下面我将带领大家进入神秘的“程序”之旅!

递归之美:数学,电脑科学与分形
——转自http://mmdays.wordpress.com/2007/05/24/recursive/

想像一下,我刚才说了一句话,那句话是:“想像一下,我刚才说了一句话,那句话是:“想像一下,我刚才说了一句话,那句话是:……….””,如此下去,就好像站在两面平行摆设的镜子中间,镜子中的影像不断的重复。再举个例子,写完一封信想要匿名保密,就署名“知名不具”。回信的人写:“知知名不具具”。之后再回信的时候就变成:知知知名不具具具,加上括号可能比较清楚:(知(知(知名不具)具)具)。

递归就是类似这样子,不断的重复同样的东西,只不过每次重复的是比较小的东西了。大家应该对数学归纳法不陌生,在使用数学归纳法时,我们首先确定n=1的时候某件事情是成立,然后在证明n到n+1的过程是正确的,就可以从n=1的例子,一路推论出第n项是什么东西。就像是推骨牌一样,把第一张牌推倒了之后,剩下的骨牌自然就被前面的骨牌给推倒。


递归的概念则是相反的方向:我们想要解决一个大小为n的问题,我首先做的事情是把问题化简成大小为n-1的问题,但是解决的方法还是一样,只不过大小是n-1。如此继续化简,最后变成大小为n=1的基本问题,接着只要n=1的基本问题解决了,原来大小为n的问题也跟着解决了。

这又好像层层分工。假设每个人都会加法,然后今天我想求出1+2+…+n等于多少?其中一个办法就是递归,我先假设1+2+…+(n-1)已经有人算好,那么我只要再加上n,就可以得到答案了。然而1+2+…+(n-1)要怎么得到呢?我就请另外一位朋友帮我算。另外一位朋友接到这个问题以后,也用同样的方法,他把1+2+…+(n-2)的结果交给另外一位朋友算,然后把这个结果加上(n-1),就变成我想要的1+2+… +(n-1)了。朋友的朋友也继续用类似的方法,直到最后一位朋友只需要回答1,接着倒数第二位朋友就把1加上2,传给倒数第三位朋友,倒数第三位朋友加上3,一直到我收到1+2+…+(n- 1)的结果,再加上n,就大功告成了。

不过可能会觉得,如此简单的问题,为何还需要递归呢?其实递归也是比较适合一些问题来解,也就是那些“解决方式一样,但是可以化成大小比较小”的问题,除此之外还可以轻松解决基本问题(n=1的时候)。举例来说,有个古老的问题叫做河内塔(Hanoi Tower),问题的定义引述如下(引用网站)


1883年,一位法国的数学家Edouard Lucas教授在欧洲的一份杂志上介绍了一个相当吸引人的难题──迷人的智力游戏。这个游戏名为河内塔(Tower of Hanoi),它源自古印度神庙中的一段故事(也有一说是Lucas教授为增加此游戏之神秘色彩而捏造的)。传说在古老的印度,有一座神庙,据说它是宇宙的中心。在庙宇中放置了一块上面插有三根长木钉的木板,在其中的一根木钉上,从上至下被放置了64片直径由小至大的圆环形金属片。古印度教的天神指示祂的僧侣们将64片的金属片移至三根木钉中的其中一根上。规定在每次的移动中,只能搬移一片金属片,并且在过程中必须保持金属片由上至下是直径由小至大的次序,也就是说不论在那一根木钉上,圆环形的金属片都是直径较小的被放在上层。直到有一天,僧侣们能将64片的金属片依规则从指定的木钉上全部移动至另一根木钉上,那么,世界末日即随之来到,世间的一切终将被毁灭,万物都将至极乐世界。

倘若这个故事的叙述为真,那么,我们只需加速移动金属片,是不是就能愈早到达极乐世界呢?果真要移动这64片金属片,那么,至少要花几次的搬动才能完成呢?有没有规律可循呢?


这个问题,就很符合刚才的特性:我们可以把大问题化成小问题,而且解决的方法相同,只不过问题的大小变小了。另外基本问题(n=1),就是移动一根金属片所需要的次数,这个我们也可以轻易解决,所以这个问题就可以用递归来解。

首先,我们假设有A、B、C三根柱子,这64片金属片一开始在柱子A上面,我们想要搬到柱子C。因为问题中规定某个金属片上面是空的时候才能移动,我们就假设有个人可以帮我们把63片比较小的金属片先从柱子A搬到柱子B上面,然后我们把最大的那一片从柱子A搬到柱子C,再请那位朋友把刚才的63片从柱子B搬到柱子C,整个问题就解决了。然后我们只要知道刚才那位朋友搬了几次,然后加上我们自己般动的1次,就是整个问题要求的搬动次数了。

递归不仅仅在数学上有其重要性,在电脑科学之中扮演的角色更是至关重要。程式设计者对于递归绝对不会陌生,上面所举的河内塔问题,实际上也是电脑科学的经典例子之一,是初学程序设计的人一定会学到的东西。递归的思维,常常可以让程式设计者打造出简洁的程式,让繁冗的问题透过简单的程式码来解决(例如parser的设计)。演算法上所讲的dynamic programming,就是递归思维在演算法的具体呈现。

递归同时也是分形(fractal)这门大学问的基石,分形是一种相当美妙的几何图案,就如同上面那一张蒙娜丽莎的图一样,图中有图,形中有形,且小的部分都是大的部分的缩影,我们就称之为分形。分形本身的数学定义,实际上就包含了递归定义在里面,我们甚至于可以说,分形是递归在几何学的一种具体呈现。但是分形不仅仅是一种数学概念而已,在自然界中,有许许多多的地方都出现自然的分形,让人赞叹递归原来就出现在我们的生活周围。图中的这棵花椰菜,就蕴含了递归的碎形图案与于其中。分形同时也在各个研究领域有着广泛的应用,光是在电脑科学领域,就有人把分形应用在影像和影片压缩之上(这不难想像,由于分形这种以小见大的特性,我们可以用小的来表现大的,因此可以有压缩的概念出现),在电脑图学上(computer graphics),也有人把碎形应用在设计电脑游戏之中的一些景物,打造出有效率和简洁的系统。现在电脑游戏之中的景物,很多都是玩家边玩、游戏系统边产生出即时的景物,这叫做procedural generation(过程生成),这种即时产生景物的技术,可以避免游戏软件预先储存一堆要展现的景物,帮整个软件瘦身。“过程生成”就使用了大量的分形产生与合成技术于其中,而这些都根植于递归这一个深刻却简单的思维。
fractal:

由B.B.Mandelbrot于1975年提出来的分形(fracta1)理论,是20世纪70年代同混沌理论一起发展起来的,是非线性科学的重要组成部分.不同于传统的欧氏几何以零维、一维、二维、三维、四维对应的点、线、面、体和时空来描述物体的形状,分形理论用“分维”(fractal dimension)来描述大自然.事实上任何物体的微观平面都是凹凸不平的,因而欧氏几何所描述的对象,严格来讲,在现实生活中是不存在的。

分形是用来描述大自然的一门几何学,它所描述的图形可以是分数维.分形的特征是整体和局部有严格的或统计意义下的自相似性.描述分形的定量参数为分维,而维数的定义种类很多,如相似维数、Hausdorff维数、盒维数(box dimansion)、拓扑维数(topological dimension)等,需要随研究对象的改变来选择.研究表明,分形在自然界中随处可见,例如,曲折而不规则的闪电路径,弯曲复杂的海岸线形状、密如蛛网的人体血管系统、变换不定的宇宙星云分布以及材料的组织生长、准晶态的晶体结构、材料的损伤等等.从地理学、生物学到物理学、化学甚至社会科学都普遍存在分形现象.分形理论在高分子科学中的应用研究也有很多文献报道,例如分形理论与各种现代分析手段相结合,已用于研究高分子的链结构、结晶过程、凝胶化过程、高分子的相形态结构等等方面.

"Fractal"原是一个几何概念, 意为多维、超维或分维, 它打破了原来3 维空间的概念, 不仅可以超过3 维, 而且还可以有小数维(小数点以后 1 位、2 位或更多位数)空间。“Fractal”引用在纤维纱和织物(称为纤维集合体)中, 就是立体多层次、有不同尺度的纤维粗细、长短配合,以及存在着凹凸状点接触的纱、线织物结构。

美国和日本都开始注意纤维的分形(Fractal)结构的研究,它们触及了纤维表面凹凸构造的自相似性与大自然的色、光的对应关系。分形理论和混沌论都是20世纪物理学的第三次革命,它研究自然界非线性过程内在随机性所具有的特殊规律性, 从字面上看是指一类极其零碎而复杂但有其自相似性的体系, 是在自然界中普遍存在的。它是用自相似、无标度方法全面描述宏观、中观、微观大自然的科学概念, 混沌是物理概念, 其几何形态则是分形的概念。

天然纤维内在的分形维自然扭曲是其特有的一种分形结构, 它与合成纤维有本质的不同, 合成纤维的机械或化学卷曲, 包括三维卷曲都与天然纤维的从微纤的扭曲开始、自相似放大、最后导致的纤维扭曲截然不同。合成纤维中的超细旦、竹节丝、异截面丝、异收缩丝等都是1 维、2维甚至3维的整数维变化, 而天然纤维则是符合分形理论的分形维变化。
关于更多分形的图片可以查看这里:http://browse.deviantart.com/cus ... r/fractals/?order=5

至于把分形应用在游戏之中,现在已经做到有多可怕的地步了呢?请大家看看以下的几张张图片,不妨猜猜拥有这种精致画面的游戏软件,其整个游戏的大小是多少呢?

正确答案是97KB!没错,我没有打错字,你的眼睛也没有看错,这款游戏的大小只有97KB!传统的一片3.5吋磁片可以装下十几个这款游戏!这一款第一人称的射击游戏叫做.kkrieger,是由德国的demogroup .theprodukkt 所开发,截至目前为止还在beta测试版的阶段,这款游戏之所以可以压缩到这么小的境界,就是因为游戏之中的场景和音乐几乎全部都是由动态产生,游戏之中预先存放的资料只有一些简单的几何形状和MIDI音乐档,所以自然档案大小非常小。如果这款游戏没有用“过程生成”(Procedural Generation)的技巧进来的话,估计档案大小会爆增成200~300MB,这样的技术,真是令人叹为观止。而背后最大的功臣,就是这篇文章谈到的递归和碎形。各位也不妨下载来玩玩看吧 (下载点)。 不过需要注意到一件事情,这款游戏的载入时间非常长,因为他要靠着一点点的程式码即时来运算制造出场景,所以要耗去很多计算时间,这可说是一种time和space的tradeoff。


看完这篇文章,各位有没有对看似枯燥的数学有了一点点不同的看法呢?没想到递归可以这样应用在游戏开发之中吧。下次学习数学感觉到枯燥时,不妨从应用的角度切入试试看吧!

关于此游戏的介绍:
上面例子中的游戏就是使用了“过程生成”这项技术,游戏下载:
这里还有一个
游戏技术中提到的64k的的演示,运用了“过程生成”:点我下载
官网上还有一些“过程生成”的演示,有兴趣下载看看。

德国「.the .produkkt」小组官网:http://212.202.219.162

kkrieger游戏介绍:(转载)
目前在欧美网络上流传一个震撼玩家的游戏「kkrieger」,以超炫的游戏画面效果让人瞠目结舌,而且最猛的是这个游戏的容量只有96K.

游戏世界真是卧虎藏龙,今天大家有机会遇到啦。目前在欧美网络上流传一个震撼玩家的游戏「kkrieger」,以超炫的游戏画面效果让人瞠目结舌,而且最猛的是这个游戏的容量只有96K,但画面表现却可以打死其它市面上同类型的游戏,真的是好厉害好霹雳啊!!

这个容量只有96K的第一人称射击游戏「kkrieger」,是由德国一家名为「.the .produkkt」的小组完成的,但玩过的玩家都被这吓死人的游戏视觉表现震撼,不管是超炫的光影表现、实时阴影投射、环境贴图、凹凸贴图...等3D效果一应俱全,加上游戏中的人物、怪物3D模块也建构得很仔细,游戏关卡也设计得颇有气氛,这么高水平的游戏就算是直接拿市面上已经发售的同类型游戏来比都胜过太多了,但游戏容量竟然只有96K,讲白点,游戏Screenshot容量都不只96K了,只能说这款游戏「kkrieger」真的是太强了!!

当然,其画面肯定无法和QUAKE3、DOOM3之类相比,但光影效果可以说甚至超越了DOOM3!,考虑到其96KB的身材,也足以令人震惊。

那么.theprodukkt小组是如何将这款游戏微缩到96KB中呢?该小组表示,他们并没有采用什么特别的压缩算法,只是对游戏中将用到的材质、网孔等资源进行了最为合理的安排,保证足够紧凑。对于该游戏所采用的深入技术细节,该小组并不愿公布。(其实就是“过程生成”)

不知道大家是否有印象,以前网上经常传出许多大小只有64KB的3D演示动画,那是一些编程高手为了展示自己的实力完全采用汇编语言完成的作品。而相比来看,这款96KB的FPS游戏则更加精彩,因为他是一款有声有色,并且真正可以“玩”的游戏,但这款游戏并不是人们所想象的100%采用汇编语言完成,反而其主体由C++完成,之间贯穿少量汇编语言。

别看该游戏体积很小,但对机器配置要求却很高,一般人的电脑恐怕都不能运行。看来是拿来测试计算机硬件效能的好东西喔,要求配备如下:(达不到不能运行):

操作系统:Windows Me / 2000 / XP
DirectX 9.0b
CPU:Pentium3 1.5GHz 以上
内存:512MB 以上
3D显示卡:Geforce4Ti 或 ATI Radeon8500 以上
(支持pixel shaders 1.3功能,内建128MB绘图内存)
释放后占用了近300MB内存

运行该游戏后先要经历一段长时间的解压缩过程,而这些数据都将释放到内存中,所以512MB以上的内存配置是必须的。该游戏所占据的内存容量,已经接近300MB。

theprodukkt小组表示,.kkrieger这款游戏总共将有三个章节,而现在发布的仅仅是第一章的测试版,未来发布的版本体积可能会上100KB,但将修正更多BUG,运行也会更加稳定。



《无限星辰》相关游戏截图:
































本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2007-10-22 20:27:08 | 显示全部楼层

这是我和开发者的一段对话(感谢ling7334带来的翻译!)

Freeman:

看上去“过程生成”在游戏中占很重要的地位!怎么去理解它?有没有专业解答?诚挚谢意!


Magellanic:

没有专业解答,我相信之前我给出过基本介绍.

首先,Infinity项目负责人(IA)将其描述为:

“过程生成”是一种让电脑实时或按要求的生成宇宙的技术,而不是预先制作好。因此,创造出的宇宙理所当然很大很大。数以万亿的世界,等待着冒险者们的探索,然而大多数可能永远不会被发现。

我理解为,这是一个电脑程序,它会用数学算法创造一个多变的宇宙。我相信这多变性叫做“seeds”。(译:seed?gundan seed?我就不翻了)不同的输入会得出不同的结果。如果你十分不熟悉数学,那我就用一个简单的代数方程来解释。

5 + x = y

如果 x = 1, 那么 y = 6
如果 x = 5, 那么 y= 10

对于每一个x值,都对应着一个不同的y值,由此会得出许许多多结果。我是在ICP测试中知道的。用这个理念,我们可以创造各不相同的世界,因为我们输入了不同的数据。

而且,因为公式是不变的,只要输入相同的“seed”,就会得出相同的结果。所以,宇宙的物理参数不需要存储在你的电脑里,系统保留其特有的属性,都依赖于“seed”。

但我不是个程序员。只是个普通的玩家。如果你要更多的信息,等开IA回答吧,或用google,原谅我可能给出的错误信息。


Delver:

Hi Freeman.我对数学不是很在行。这很伤脑筋。

我想你肯定会中文。(译:haha,被看穿了)

我不能用英语简单的叙述,我试试吧。

一个程序是一个可以用来做任何事的数学公式。像是画一个圆或三角。它同样可以用来解决复杂的问题。作出树,行星或更复杂的东西。你可以让程序记住东西将会是什么样子。现在如果你有真正复杂的事,你就会想这一定很难。用数学就可以使其更简单。电脑要做很多工作,但它确实比人工制作星球,城市简单的多。

我可以用很长时间用图画软件Photoshop或3dstudio去画一张看上去很像地球图。者要很长时间。

除了做这些,如果确实太复杂,我可以用一系列的程序来创建一个球体,然后填充如岛屿,水,空气...我怎么做呢?可以给每一样物品编上号。我可以把红色描述为数字FF0000(16进制),我可以将树描述为数字,涂上绿色0000FF。

我如果正确使用这些数字画出一个星球,我就可以做出一个同样的。如果我记得画这个星球的数字,我就可以告诉你,你也可以做出一个相同的。

简而言之:

程序是一个储存或创建数字来创造东西的数学公式或告诉你这东西是什么。你可以想像成制作东西的便宜法门。如果数字相同,公式相同,我们创造的东西也永远相同。如果我改变一点,创造出来的东西就完全不同了。

注:

宇宙中的所有东西都可以编号。也许这就是宇宙的原理。我们只是上帝的玩物。


Freeman:

感谢你们Magellanic & Delver。
感谢你们现身说法。



DeAdLy_cOoKiE:

我觉得“过程生成”是在一个大空间下,所有事物都是由程序产生的.许多老套的(译:应该是old school,我讨厌学习不认真的)演示都用“过程生成”创造物体来炫耀,因为(cause,再次bs)电脑的内存在当时十分有限。当然也有用它做游戏的(特别是地图),midwinter, liberation等等。你可以通过变更参数来得出完美的效果。



Delver:

freeman,你最好再多找点资料。看看fractals(分形),这是最早的“过程生成”的图形演示。这超过我的能力了。

除了这些问题,有时我觉得这技术在未来会越来越重要。我的假设在我上个帖子写过了。

什么会被刻画?什么会被创造?想象一下整个宇宙都可以随机产生!



terra0nova:

呃,“过程生成”不会储存任何数据,这正是其美丽之处,数据可能会放在内存里,但不会在硬盘上(当然要在内存里暂存,但产生出来的行星数据,不会储存,程序会决定行星的位置)给出坐标,程序(关于坐标的算法,像是伪随机算法,把坐标作为seed[译:呵呵])就会产生出你需要的行星。行星信息可能会暂存在内存中,以防你再次来(节省时间),但你一关游戏,数据就被删除了,如果需要,将再次由程序产生数据。

最大的问题是算法的速度,如果我们要这游戏与现实时间同步(很可能你到之前,行星就已经产生好了),即使如此,这算法仍要更快更完美(可以先大致产生些数据[星球外廓],然后再慢慢填充细节[城市和地面细节])。我不知道这些算法的速度,但如果做得太花,速度就会慢下来。城市看上去很有趣,但我们想要更大,更科幻的。

CutterJohn:

想象一下:

假如这就是我们的过程引擎:
X = 2y

那么现在我就向在座各位解释一下我的这个微型过程引擎。

请看,如果让Y = 5 (也就是所谓的‘seed’)。 每个人都拿出计算器来算一下X是多少。
都是10吧? 如果不是,去买个新的。。。

很明显,我的“过程”引擎是很简陋的,但依然是一个不错的类比。 其实所谓的“过程”就是一堆用来计算所需答案的神奇方程式组。
而游戏里的每一个客户端都内嵌了相同的方程式组。那么在给定同一个“seed”的情况下,这组方程式(完全一致的,记住)将在每一台电脑上输出一模一样的结果。这就好比你们计算如上所示的那个微型引擎必然得出相同结果一样。

过程生成简述

过程生成的定义可以在维基上找到:
http://en.wikipedia.org/wiki/Procedural_generation
由于这里已经有一个绝佳的例子了,那就不用我来跟你们吹过程生成到底有多牛了。。。一个只有96kb的游戏,伙计们,好好看看:
http://212.202.219.162/kkrieger

但是呢,不要把过程生成仅仅看作游戏编程里的概念。 过程生成的理念具有深远意义,比如它可以取代人类来自动的处理一些重复性的智能工作。 更加有趣的情况是,通过将自动性与一系列过程代码的集成,人们完全可以做到曾经不可想象的事情。下面这篇文章是介绍了一个还未发布的游戏,然而对我来说,这绝对不仅仅是一个游戏:
http://en.wikipedia.org/wiki/Spore_%28game%29

大家伙就偷着乐吧!

原文:http://www.infinity-game.com/bbs/forum.php?mod=viewthread&tid=306


小型开发者的利器——内容的程序自动生成
转载于:http://tgfc.qwd1.com/viewnews-1951
原文载于Behind Another World 游戏设计研究室

译自Introversion Software《Procedural Content Generation》

简介
内容。
是。
折磨人的。

这是一条任何独立开发者都需要牢记的简单却非常重要的规则。在IntroversionSoftware的最新游戏《核战危机》(《DEFCON》)里,真正由我们创作的内容只有音效。游戏中几乎所有的其他内容都是来自于公之于众的信息——城市的位置,多变的海岸线的经纬度,国家的边境线等全都可以在互联网上免费获取。《核站危机》开发了一年。Introversion的《Darwinia》的内容有“手工”创造,约有10个小时的gameplay,却开发了三年之久。在《Darwinia》中的场景是有几行代码自动生成的——如果这其中的每一样都要手工来做的话,不知道要花费多少时间。

随着每一代的新主机的降临,创造游戏的成本,不论是时间还是资金,都飞速地增长。而小型开发组无力应付这样的增长。“内容的自动生成”于是便有了用武之地。自动生成的内容是由计算机算法创造出来的,而不是由美工精心雕琢而出的。这样的内容完全是动态生成,或者可以在一些(比如由用户或文本文件的)外部输入的基础上来生成。

假设,作为一个独立开发者,你想要制作一款像《GTA3》一样的游戏。你可以为了一个城市花上几个月的时间,为它增加建筑,为游戏世界铺上材质。或者你可以花费几个星期的时间,来研究一个自动生成这些城市的方法。这样做的成果是有几乎无限数量的城市供你游玩,而开发时间却被大大减少了。

你也许会不服气,认为这样创造出来的城市远没有手工制作地那样精细,但这全看你在这些动态内容上投入多少精力。你的动态建筑可以是简单的方块,加上窗户和门的贴图,或者这些逼真的窗子可以是基于建筑本身的设计和大小生成出来的,窗户的贴图甚至可以依据放置在边上的邻居的房子来改变。







这些截图来自于由Chris Delay为IntroversionSoftware现正在开发的游戏《Subversion》所写的城市自动生成程序。这是一个快速自动生成内容的很好的例子——经过了一个星期的努力,我们现在有了一种动态生成令人信服的城市布局以及建筑的方法。这些建筑的大小会根据城市里那个区域的人口密度来改变。正如你所见的,同样的算法可以用来生成一系列风格迥异的城市,只要很简单地改变输入到生成程序的数值就可以了。

这便是这系统的灵活性所在。只要有一些细微的改变,同样的算法可以用来创造完全不同的对象。在《Subversion》这个例子里,生成城市里每幢建筑的布局都是用的同一个函数。

显然,手工设计这样规模的城市里的每一栋建筑会是一项可笑的壮举。这可能会花上击败,甚至很可能是几千个“人月”。而由一个人写出来的算法却能够在几秒钟内完成,而且可以被改良用于你可能需要的其他任何目的。比如《Darwania》中的树就是用相似的原理生成的——线条由种子点向外“生长”,树枝以成倍的数量向同一方向伸展。

广度

作为一个只有有限数量员工,并且没有3D模型师的公司,这显然是一个比花费数月手工制作成堆的模型更可取得方案。

自动生成内容还能让你大大增加游戏的广度(scope)。就用前一个例子,在一个手工建造的城市和十万个可比较的自动生成的城市间选择,答案是显而易见的。WillWright的《孢子》(《Spore》)就将这个概念发挥到了极致——整个星系,大到星系系统,小到这些星系里行星上的微生物,都由每个开始游戏的玩家动态生成的。

自动生成内容并非是一个新鲜事物——事实上,多数早期的电子游戏都将自动生成作为将大量数据装进那个时期仅有的相对较小的媒体中的唯一手段。《精英》(《Elite》)及其续作《边境》(《Frontier》)就是典型的例子——动态生成的星系系统,动态生成的关卡,以及一整套其他的特色内容全都是程序生成的——一个本质上无穷尽的宇宙就这样被装进了一张软盘里。



当然,你能够用程序生成的不仅是静态的模型和形状。贴图,音效,甚至动画都可以由算法在运行(runtime)时被创造出来。在回到先前的例子,《Spore》的一大特色就是能动态生成玩家创造的生物的动画和贴图。动画是根据给定生物的骨骼解剖架构动态创造出来的,这包括行走,奔跑,进食,甚至舞蹈。这个生物的贴图和它的身形完全匹配,而它的身形是由头部,胃部,背部和身体上其他部位的位置决定的。

另一个更加极端的例子是一个叫做《.kkrieger》的演示作品。这个作品是由一个叫做.theprodukkt的团队制作的。《.kkrieger》是一款第一人称射击游戏,其中的任何东西都完全有程序自动生成。关卡(只有一个关卡,这毕竟只是一个演示作品),贴图,模型,动画,音效——全都是由游戏在运行时动态创造的。更加令人叫绝的是,这样华丽的图像(考虑到所有因素而言),整个游戏只有96kb——你下载这篇文章里都包含不止96kb的信息量!如果所有的数据都是预先制作好,并且以传统的方式来存储的话,它很有可能占几百兆的空间。

当然,自动生成内容也有些许不足。对于初学者来说,如果你的整个游戏都是由程序自动生成出来的,就很难有外观别致的场景——很容易得到尽管布局不同,却十分雷同的关卡。这意味着一定程度的人为介入是让游戏变得光鲜所必需的。





《Darwinia》就是一个很好的例子——《Darwinia》的布景是接受简单字符串输入后由程序自动生成的,但游戏里所有的建筑都是手工摆放的,设计者还写了一部分由脚本控制的事件序列。尽管团队尝试过完全随机动态地生成关卡,但发现要产生玩起来有趣的场景,这样做是极其困难的。

另一个致命的不足是动态生成内容所要花费的时间。比如,也许生成城市里的一栋建筑只需要花费不足一秒钟的时间,而一旦你要生成整个城市里的几百栋建筑,以及道路系统,这就会累积成一段明显的停顿时间。这个问题在前面提到的《.kkrieger》中尤为明显——游戏开始前会有一段冗长的“读盘”时间[译注:loadingtime,原指将光盘媒体中的游戏内容读取到内存所花费的时间,在这里是指CPU计算出整个关卡的时间。将游戏本身——生成内容的程序读入内存对这个游戏来说只花极少的时间。],其间关卡中的所有内容正在生成。这也意味着运行这样的游戏要比预制预存的游戏更需要一台强劲的电脑。

尽管如此,程序自动生成内容对小型开发团队来说是一个关键的工具。而且有些人可能还会持有这样的观点——这将是业界的未来。随着开发成本铺卷开来,难以控制,发行商们变得越来越不敢冒险,尝试投资新生作品,情愿守着那些已经尝试过和考验过的方法,也不愿发掘原创作品。使用程序自动生成的方法可以降低成本,开发者们可以获得更多的自由来测试新的想法,而且确实,如果没有程序自动生成,像Introversion这样的小公司甚至可能都将不存在。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2007-10-22 21:19:10 | 显示全部楼层
程序世界实在是太神奇了
发表于 2007-10-22 22:41:00 | 显示全部楼层
本帖最后由 FreemanGL 于 2010-5-13 20:34 编辑

我爱死这篇文章了!

很多图片都失效了重传一下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1UC +2 收起 理由
Freeman + 2 感谢,主题已经更新

查看全部评分

发表于 2007-10-23 11:29:10 | 显示全部楼层
我喜欢................
发表于 2007-10-23 11:39:48 | 显示全部楼层
LS的看懂了么;em18; ;em18; ;em18;
发表于 2007-10-23 11:41:16 | 显示全部楼层
我的瑞星说有毒呢.....真的假的?pno0001.exe...
发表于 2007-10-23 11:46:00 | 显示全部楼层
额```很诡异的回答。。。。
 楼主| 发表于 2007-10-23 12:45:27 | 显示全部楼层
原帖由 小圣圣 于 2007-10-23 11:41 发表
我的瑞星说有毒呢.....真的假的?pno0001.exe...

不是毒,官方网站已经做了说明,有些杀毒软件会误报。
发表于 2007-10-23 12:49:44 | 显示全部楼层
这种革命性引擎简直就是颠覆PC硬盘商赢利的罪恶轴心!我要去告诉所有人!不许别人不知道!
发表于 2007-10-23 13:27:18 | 显示全部楼层
系统说我没权限。。。。。NND
发表于 2007-10-23 13:33:55 | 显示全部楼层
很强大的引擎!嗯...很强大!
ls的什么没权限?
发表于 2007-10-23 14:46:43 | 显示全部楼层
!   无法执行“C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Rar$EX00.422\pno0001.exe”
发表于 2007-10-23 23:05:09 | 显示全部楼层
人品决定一切`````;em05; ;em05; ;em05;
发表于 2007-10-23 23:08:52 | 显示全部楼层
原帖由 小圣圣 于 2007-10-23 14:46 发表
!   无法执行“C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Rar$EX00.422\pno0001.exe”

你下得是什么啊?没有一个文件叫pno0001.exe啊。

[ 本帖最后由 FreemanGL 于 2007-10-23 23:10 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|无限星辰 ( 京ICP备12007702号-2 )滇公网安备 53011202000341号

GMT+8, 2019-1-16 16:24 , Processed in 0.035980 second(s), 15 queries , MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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