程序化⽣成(PCG)算法的改进——基于以地学为主的多基础学科
张伦源
2019年12⽉1⽇
理想中的程序化⽣成——按下⼀个按钮并⽣成完整的游戏世界:地形,植被,
⼀、Procedural content generation(程序化⽣成)的定义:
道路,城市,⼈,⽣物,任务,知识,对话,物品,车辆,图形,纹理,⽂字。
⼆、HISTORY(应⽤与沿⾰)
(⼀)1995——Diablo系列:⾸次将rogue-like游戏和PCG引⼊电⼦游戏领域
特点:
1.地牢布局随机⽣成
2.物品随机⽣成
(⼆)2006——矮⼈要塞
4.诗歌,怪物,动物,事件,城市
(1)具体描述:
特点:
1.充分考虑天⽓,⽣物
群落,材料的地质分布
2.板块构造,风⽔侵蚀
3.具有⼈⼜起伏的城
市,⼈⼜,种族和城市
的完整历史
游戏背景是⼀个有魔法和怪物的奇幻世界。游戏发⽣在⼀个⽤算法产⽣的世
界,玩家可以设定世界的⼤⼩、蛮荒程度、矿物丰富度、历史长度等参数。程序⽤随
机中点位移法(midpoint displacement algorithm)产⽣三维地形(包括地下洞窟和上
百种矿⽯的分布)及各地的⾬量,然后依此模拟河流、瀑布和湖泊、以及侵蚀作⽤。
河流和地下⽔接近海边时,还要考虑盐度。接下来程序考量的是季风、地形⾬等更复
杂的⽓候现象,调整各地的⾬量。再来,依据纬度和更多乱数及碎形,各地图有了⽓
温,并随机分为善良、中性或邪恶,有了⽓候和善恶之后,就可以依此区分为不同的
⽣态群落(biome),并填⼊动植物相:善良的温带草原会有独⾓兽、鸽⼦、苹果树和
野草苺,邪恶的热带沼泽会有鸟妖、⽼虎、莎草和红树林。再来各地会产⽣⼈类、精
灵、矮⼈、或哥布林的⽂明。河流和群落会被随机取名,⽤的是系统预先存好的⼈
类、精灵、矮⼈或哥布林语字典。计算机接着会模拟⽂明的历史,包括国家领⼟和宗
教的势⼒的范围、粮⾷产量、⼈⼜、⼈物的⽣死和互动、各种物品的制作和转⼿、城
市的建⽴、外交和战争等等。
(2)问题与局限:
1.“仅为”2D游戏
2.对于每种类型的内容,⽣成过程都过于简单,并且⽣成过程呈现明显的“单向性”(类
似Hartsook提出的“waterfall”模型,先⽣成地图,后⽣成资源,两个过程之间没有反馈
与互相影响)
(3)改进:
Smelik等⼈的Sketchaworld系统。该系统“混合主动”⽣成景观的各个对象,包括
拓扑,植被,道路和建筑物的位置,所有对象都具有语义和定义上的相互依赖性,并
在允许同⼀个级别上进⾏编辑(如更改河流的流量)的同时,允许对其他级别上的实
体产⽣影响(例如,在建造道路时如果碰到河流,就会⾃动转换为造桥模式)。
举例:
可以观察到随时间的推移(模拟器时间)森林不再符合⼭地地形拓扑
更新算法后如下图:
(三)2016——⽆⼈深空
特点:
星系、⾏星及其⽣态系统、动植物
及其⾏为模式、⼈造结构,外星派
系及其航天飞船等⼏乎所有游戏元
素都由程序⽣成。
缺点:
1.与矮⼈要塞相⽐,⽆⼈深空的⽣态
更加“随机”⽽没有逻辑性(甚⾄可以
说是⼀种退步)
2.各个星球的地形、⽣态、⽣物等重
复度⾼,同质化严重
3.矿产的分布过于随机,不符合基本
地学常识
4.程序化⽣成的⽣物“丑陋”⽽不符合
基本⽣物学常识(会飞的鱼、⼏⼗
种⽣物有着相同的头部)
完全确定性的PCG算法可以看作是数据压缩的⼀种形式。 第⼀⼈称射击游
三、PCG“意想不到”的妙⽤——压缩内存
戏.kkrieger(.theprodukkt 2004)是PCG技术使⽤的⼀个很好的例⼦,它设法将其所有
纹理,对象,⾳乐和关卡以及游戏引擎压缩到96 kb的存储空间中。 另⼀个很好的例⼦
是Elite(Acornsoft 1984),它通过将每个星球仅代表⼏个⾏星,设法将数⼗个星系保
存在当今硬件中可⽤的⼏⼗千字节的内存中。
四、Challenge
(⼀)过于平淡、通⽤、“积⽊化”的⽣成内容
例如,在查看Diablo系列中⽣成的地牢时,会很容易感觉到,“这只是⼀堆积
⽊”,重新⽣成后,获得的内容表⾯上⾮常不同但最终同样“积⽊化”“平淡”,⼤多数⽣
成的内容缺少有意义的宏观结构以及进度和⽬标感,⽆法体现其创建者的技能或技
巧,很少能表现出真正的设计创新。
但在Galactic Arms Race (《银河军备竞赛》)中,程序⽣成的⼏种武器(例如
隧道制造者和飓风)震惊了玩家和设计师,它们不仅仅像是设计师亲⾃设计的作品,
还充满了突破设计师思维的“脑洞”设计。
原理:
武器被间接表⽰为实数值的可变⼤⼩⽮量,这些⽮量被解释为神经⽹络的连接
拓扑和权重,进⽽控制了作为武器基础的粒⼦系统。评估功能是交互式的,隐式的和
分布式的。每个武器的适⽤性取决于登录到同⼀服务器的各种⽤户选择发射武器的频
率(相对于武器在其缓存中闲置的时间)。这种评估功能之所以吸引⼈,是因为玩家
实际上可以通过简单地玩游戏⽽隐含地表明⾃⼰的喜好,⽽⽆需了解基本的进化算法
的机制或存在性。
具有⽬的性、连贯性、原创性、创造性的内容⽣成器
可类⽐深度学习应⽤中的风格迁移,程序化⽣成中针对玩家或设计师的偏好进
应对挑战的拟Solution:
(⼆)风格迁移问题
⾏建模是个故有难题。
应对挑战的拟Solution:
(三)如何设计通⽤内容⽣成器
在深度学习应⽤的“风格迁移”课题中寻找⽅法。
缺乏可以随时使⽤的PCG系统,这可能会阻碍PCG技术在游戏⾏业中的采⽤。
SpeedTree是唯⼀在多款游戏中实际使⽤的PCG插件,但它只能⽣成⼀种类型的
内容(植被),⽽且这种类型在⼤多数游戏中的功能意义不⼤,虽然往往不会破坏⽔
平,但⽣成内容中的灌⽊丛的确“很丑陋”。
应对挑战的拟Solution:
⾝,并使⽤其他PCG⽅法⽣成它们,以适合特定的内容领域。
(四)搜索空间的构造
对内容的特定要求应指定为⽣成器的参数。具体想法:将PCG算法视为内容本
基于空间搜索的内容⽣成算法⽰意图
如果要搜索游戏内容空间,则需要以某种⽅式表⽰内容,⽽表⽰形式(和相关
的变量运算符)将形成搜索空间。
搜索空间的结构决定了在搜索空间中任何特定实例的微⼩扰动都可以影响内容
的产⽣。因此,搜索空间的结构需要具有某些形式的局部性。通常,基本表⽰形式的
细微扰动不应导致内容本⾝的外观或功能发⽣根本变化。例如,⼀张桌⼦不应该变成
⼀个⼩蘑菇,⽽应该是“可能会变短,变⾼或变圆”,但它仍然是可以识别的桌⼦。
⼀个重要的问题是如何将基因型(由进化算法处理的数据结构)映射到表型,
即基因型和表型之间的区别可以看作是蓝图与完成的建筑物之间的区别,或者可以看
作是算法与算法输出之间的区别。在游戏内容⽣成场景中,基因型可能是创建游戏级
别的指令,⽽表型可能是实际游戏级别。当采⽤随机搜索时,即使在简单的情况下,
例如搜索⽅程的根,我们总是可以谈论基因型/表型的区别。在这种情况下,变量值是
了解底层表⽰与其所诱导的空间结构之间的关系(这种关系不⼀定直观),并
基因型,将这些值替换为变量的结果是基因型,等式左侧的计算是基因型到表型的映
射。
表⽰之间的重要区别在于直接编码和间接编码之间。直接编码意味着在基因型
到基因型的映射中相对的计算简单,即,基因型的⼤⼩与表型的⼤⼩成线性⽐例,并
且基因组的每个部分都映射到表型的特定部分。在间接编码中,基因型⾮线性地映射
到表型,前者不必与后者成正⽐。通常,需要复杂的计算才能从基因型创建表型(⼏
种这样的间接编码基于L-System的)。
应对挑战的拟Solution:
且进⾏编码。
(五)可控性
具体描述:
所有PCG算法都基于更紧凑的表⽰形式来创建某种“扩展”内容。 在⼀个极端情
况下,该算法可能只是将种⼦作为其随机数⽣成器的输⼊; 在另⼀个极端,该算法可
能会将指定其所⽣成内容的属性的实值参数的多维向量作为输⼊。 例如,可以使⽤参
数来指定地牢⽣成器,这些参数指定诸如房间数量,⾛廊的分⽀因⼦,项⽬位置的聚
类等属性。随机种⼦参数⽮量连续体的另⼀个名称是控制。
其中将运⽤到L-System(分形)与CPPNs(对称)。
众多PCG游戏根本没有控制参数,它们以随机种⼦为输⼊,直接输出内容。
应对挑战的拟Solution:
⼀些经典的构造算法(L-System)提供了⼀种⽅法来指定所⽣成内容的各个⽅
⾯,例如植物的“闷热度”。基于搜索的⽅法以⽬标的形式指定内容的期望属性(但是
在适应度函数中编码期望的质量远⾮那么简单,并且⽆法保证可以找到在这些⽬标上
具有⾼价值的内容在搜索空间中)
(六)各种⽣成算法必须能够相互通信
五、PCG与⾃然现象
基本介绍:
虽然减少与⼿动内容创建相关的⼯作量和成本是按程序⽣成内容的主要优点之
⼀,但程序内容⽣成技术的发展提供了许多其他好处,包括⾃动为所⽣成的内容添加
⼀定程度的随机性。
因此,过程技术⾮常适合创建⾃然现象,例如⽕和烟。
(⼀)地形⽣成
Frade等为电⼦游戏Chapas开发了地形。地形被间接地表⽰为表达树,这些表达
树是使⽤类似于CPPN 编码的⽅法通过遗传编程进化⽽来的。但是,尽管该算法⽣成
了有⽤的地图,但“颜值堪忧”,并且在使⽤前需要⼈⼯检查。
Togelius等设计了⼀种为RTS游戏⽣成地图的⽅法。基地和资源的位置都直接表
⽰为坐标,⽽其他地形特征则间接表⽰。对于基于⾼度图的表⽰,将演化出⼏个⼆维
⾼斯曲线的位置,标准偏差和⾼度,并根据这些来计算每个点处的地形⾼度。对于星
际争霸表⽰法,使⽤受“海⻳图形”启发的随机(但具有确定性)⽅法绘制⼭层。使⽤
直接和基于模拟的理论驱动的评估函数集合来进⾏评估。
不基于搜索的地形⽣成⽅法:基于分形(菱形平⽅算法)、基于代理的模拟腐
蚀、基于细胞⾃动机的游戏的地形⽣成系统,但是,尽管⼤多数此类算法的运⾏时间
较短且可预测,但通常⽆法针对游戏属性级别对其进⾏控制(例如,⽆法保证地图协
调性,甚⾄出现“禁区”)。最近的⼀些projects与papers关注于将各种不同的地形⽣成
算法集成到混合启动模型中。
(⼆)程序化⽣态系统⽣成的应⽤——基于真实⽣态系统数据
来⾃⽣态模型或地理数据集的输⼊数据通常不包含⾜够的细节来直接提取确切
的植物位置以获得具有多种物种的⾼密度植物分布。因此,过程⽣成技术⽤于⽣成和
填充这些缺失的细节。
为了获得完整的⽣态系统,有必要遍历L-System并在经过⼀定数量的迭代后停
⽌仿真。从局部到全局的技术为每种植物的个体⾏为建模提供了可能性。可以模拟复
⽽全局到局部技术不使⽤仿真过程来计算植物分布,并且没有对植物进⾏单独
杂的⾏为,例如对阳光和⼟壤资源的有形竞争。缺点是这些技术的可控性很低,因为
在给定输⼊参数的情况下⽆法在模拟完成后预测结果。他们⽆法将有关环境的地图和
统计信息转换为正确的⼯⼚分布。相反,这些⽅法很好地显⽰了不同植物之间的相互
作⽤。
建模。取⽽代之的是,直接从全局定义的环境中计算⼯⼚的位置。
⽬前运⽤最多的⽅法:
使⽤Wang平铺技术⽣成⼀个完整的点集。每个点接收每种植物物种的概率值。
接下来,结合随机变化,为每个点分配最⾼概率的植物物种。最后,选择⼀组点,这
些点的概率值具有最⾼的标准偏差,因此最有可能停留在相同的植物物种中。这些点
⽤于在其相邻点上表现出邻居效应。为了将这种效果包括在分类中,重复分类过程,
直到完成了多次迭代或当某些数量的点不再改变植物种类时为⽌。
(三)程序化洞⽳⽣成