如题,为了申请关于程序化生成算法的大创,自己翻译了一些相关论文并且进行了总结归纳,做成了如下的报告:

(csdn插入图片真的麻烦,emmmmm,所以没有添加原本报告随笔中的图片,如果想要完整版pdf来我的资源里下载就ok,当然,写的这么烂,emmmmmmm)

(而且因为很多内容并不是翻译得来,在原创/翻译上犯了难,先当原创好了。。。)

一、Procedural content generation(程序化生成)的定义:

理想中的程序化生成——按下一个按钮并生成完整的游戏世界:地形,植被,道路,城市,人,生物,任务,知识,对话,物品,车辆,图形,纹理,文字。

二、HISTORY(应用与沿革)

(一)1995——Diablo系列:首次将rogue-like游戏和PCG引入电子游戏领域

特点: 1.地牢布局随机生成

2.物品随机生成

(二)2006——矮人要塞

特点: 1.充分考虑天气,生物群落,材料的地质分布

2.板块构造,风水侵蚀

3.具有人又起伏的城 市,人又,种族和城市的完整历史

4.诗歌,怪物,动物,事件,城市

(1)具体描述:

游戏背景是一个有魔法和怪物的奇幻世界。游戏发生在一个用算法产生的世 界,玩家可以设定世界的大小、蛮荒程度、矿物丰富度、历史长度等参数。程序用随 机中点位移法(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: 在深度学习应用的“风格迁移”课题中寻找方法。

(三)如何设计通用内容生成器

SpeedTree是唯一在多款游戏中实际使用的PCG插件,但它只能生成一种类型的 内容(植被),而且这种类型在大多数游戏中的功能意义不大,虽然往往不会破坏水 平,但生成内容中的灌木丛的确“很丑陋”。

缺乏可以随时使用的PCG系统,这可能会阻碍PCG技术在游戏行业中的采用。

应对挑战的拟Solution:

对内容的特定要求应指定为生成器的参数。具体想法:将PCG算法视为内容本 身,并使用其他PCG方法生成它们,以适合特定的内容领域。

(四)搜索空间的构造

如果要搜索游戏内容空间,则需要以某种方式表示内容,而表示形式(和相关 的变量运算符)将形成搜索空间。

搜索空间的结构决定了在搜索空间中任何特定实例的微小扰动都可以影响内容 的产生。因此,搜索空间的结构需要具有某些形式的局部性。通常,基本表示形式的 细微扰动不应导致内容本身的外观或功能发生根本变化。例如,一张桌子不应该变成 一个小蘑菇,而应该是“可能会变短,变高或变圆”,但它仍然是可以识别的桌子。

一个重要的问题是如何将基因型(由进化算法处理的数据结构)映射到表型, 即基因型和表型之间的区别可以看作是蓝图与完成的建筑物之间的区别,或者可以看 作是算法与算法输出之间的区别。在游戏内容生成场景中,基因型可能是创建游戏级 别的指令,而表型可能是实际游戏级别。当采用随机搜索时,即使在简单的情况下, 例如搜索方程的根,我们总是可以谈论基因型/表型的区别。在这种情况下,变量值是基因型,将这些值替换为变量的结果是基因型,等式左侧的计算是基因型到表型的映 射。

表示之间的重要区别在于直接编码和间接编码之间。直接编码意味着在基因型 到基因型的映射中相对的计算简单,即,基因型的大小与表型的大小成线性比例,并 且基因组的每个部分都映射到表型的特定部分。在间接编码中,基因型非线性地映射 到表型,前者不必与后者成正比。通常,需要复杂的计算才能从基因型创建表型(几 种这样的间接编码基于L-System的)。

应对挑战的拟Solution:

了解底层表示与其所诱导的空间结构之间的关系(这种关系不一定直观),并 且进行编码。其中将运用到L-System(分形)与CPPNs(对称)。

(五)可控性

众多PCG游戏根本没有控制参数,它们以随机种子为输入,直接输出内容。 具体描述:

所有PCG算法都基于更紧凑的表示形式来创建某种“扩展”内容。 在一个极端情 况下,该算法可能只是将种子作为其随机数生成器的输入; 在另一个极端,该算法可 能会将指定其所生成内容的属性的实值参数的多维向量作为输入。 例如,可以使用参 数来指定地牢生成器,这些参数指定诸如房间数量,走廊的分支因子,项目位置的聚 类等属性。随机种子参数矢量连续体的另一个名称是控制。

应对挑战的拟Solution:

一些经典的构造算法(L-System)提供了一种方法来指定所生成内容的各个方 面,例如植物的“闷热度”。基于搜索的方法以目标的形式指定内容的期望属性(但是 在适应度函数中编码期望的质量远非那么简单,并且无法保证可以找到在这些目标上 具有高价值的内容在搜索空间中)

(六)各种生成算法必须能够相互通信

五、PCG与自然现象 基本介绍:

虽然减少与手动内容创建相关的工作量和成本是按程序生成内容的主要优点之 一,但程序内容生成技术的发展提供了许多其他好处,包括自动为所生成的内容添加 一定程度的随机性。

因此,过程技术非常适合创建自然现象,例如火和烟。

(一)地形生成

Frade等为电子游戏Chapas开发了地形。地形被间接地表示为表达树,这些表达 树是使用类似于CPPN 编码的方法通过遗传编程进化而来的。但是,尽管该算法生成 了有用的地图,但“颜值堪忧”,并且在使用前需要人工检查。

Togelius等设计了一种为RTS游戏生成地图的方法。基地和资源的位置都直接表 示为坐标,而其他地形特征则间接表示。对于基于高度图的表示,将演化出几个二维 高斯曲线的位置,标准偏差和高度,并根据这些来计算每个点处的地形高度。对于星 际争霸表示法,使用受“海龟图形”启发的随机(但具有确定性)方法绘制山层。使用 直接和基于模拟的理论驱动的评估函数集合来进行评估。

不基于搜索的地形生成方法:基于分形(菱形平方算法)、基于代理的模拟腐 蚀、基于细胞自动机的游戏的地形生成系统,但是,尽管大多数此类算法的运行时间 较短且可预测,但通常无法针对游戏属性级别对其进行控制(例如,无法保证地图协 调性,甚至出现“禁区”)。最近的一些projects与papers关注于将各种不同的地形生成 算法集成到混合启动模型中。

(二)程序化生态系统生成的应用——基于真实生态系统数据

来自生态模型或地理数据集的输入数据通常不包含足够的细节来直接提取确切 的植物位置以获得具有多种物种的高密度植物分布。因此,过程生成技术用于生成和 填充这些缺失的细节。

为了获得完整的生态系统,有必要遍历L-System并在经过一定数量的迭代后停 止仿真。从局部到全局的技术为每种植物的个体行为建模提供了可能性。可以模拟复杂的行为,例如对阳光和土壤资源的有形竞争。缺点是这些技术的可控性很低,因为 在给定输入参数的情况下无法在模拟完成后预测结果。他们无法将有关环境的地图和 统计信息转换为正确的工厂分布。相反,这些方法很好地显示了不同植物之间的相互 作用。

而全局到局部技术不使用仿真过程来计算植物分布,并且没有对植物进行单独 建模。取而代之的是,直接从全局定义的环境中计算工厂的位置。

目前运用最多的方法:

使用Wang平铺技术生成一个完整的点集。每个点接收每种植物物种的概率值。 接下来,结合随机变化,为每个点分配最高概率的植物物种。最后,选择一组点,这 些点的概率值具有最高的标准偏差,因此最有可能停留在相同的植物物种中。这些点 用于在其相邻点上表现出邻居效应。为了将这种效果包括在分类中,重复分类过程, 直到完成了多次迭代或当某些数量的点不再改变植物种类时为止。

(三)程序化洞穴生成

多年以来,在使用分形建模和物理侵蚀模拟等方法开发合成地形的有效方法方 面已取得了很大进展。但是,用于表示地形的传统方法通常依赖于2D高度图来存储高 度场信息。虽然高度图简单易用,但这种方法存在局限性,因为水平面上每个位置只 能有一个高度值。因此无法生成拱门、洞穴。

为了克服这一局限性,体素网格已被用来represent凹面地形特征。 Peytavie等开 发了一种紧凑的体积离散数据结构,用于表示包括山洞在内的复杂地形。但是,尽管 他们提出了一种用于程序生成岩堆的技术,但他们的工作主要集中在开发框架,以通 过使用高级地形建模和雕刻工具来减轻复杂地形创建的负担。

Boggus和Crawfis 研究了溶洞3D模型的程序生成。这些是由岩石形成的洞穴被酸 性水溶解。他们提出的方法是一种基于物理的方法,涉及近似水的运输以创建洞穴通 道的粗略细节模型。尽管如此,生成的洞穴模型仅限于两个平面。即洞穴的地板和天 花板。

Tortelli和Walter 提出了一种基于地质研究模拟蛇麻藻生长的方法。在他们的工 作中,他们利用GPU强大的计算能力,从一组有意义的地质参数中实时模拟了钟乳 石,石笋和圆柱的成因和生长。

六、Change the world 集成语义+过程生成——虚拟世界声明式建模的关键支持因素。

虚拟世界的声明式建模的主要概念——让虚拟世界的设计人员专注于说明他们 要创建的内容,而不是描述如何建模。

背景:当前用于虚拟世界的内容内容仍然保留了传统创意作品的手工特征。如 今,对这种劳动密集型内容的需求不断增加且要求越来越复杂。

当前提供的大多数基于过程的内容创建方法和工具都可以通过提供半自动化的 过程解决方案来部分满足这些需求,这些解决方案可帮助生成虚拟世界的某些部分 (例如地形,道路,城市或建筑物)。但是,对于大多数设计师而言,他们存在几个 基本缺陷,例如它们在技术上大多很复杂,以非交互速率运行,在使用中通常不直 观,仅产生一种特定类型的内容,并且几乎不提供对输出的适当控制,从而无法轻松 地将其集成到完整且一致的虚拟世界中。

现有的声明框架——SketchaWorld——语义库——基于WordNet

程序化生成(PCG)算法的改进——基于以地学为主的多基础学科相关推荐

  1. 【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----程序化生成地形算法设计

    2 程序化生成地形算法设计 Input: Output: 2.1 地形的生成 程序化生成地形算法是一种在计算机中生成地形的方法,通常用于游戏开发和虚拟现实应用.下面是几种常见的程序化生成地形算法: D ...

  2. ransac剔除误匹配matlab代码,基于APAP图像拼接算法的改进

    硕 士 学 位 论 文 基于 APAP 图像拼接算法 的 改进 学 科 专 业  软件工程  学 位 类 型工 学硕 士学位 研 究 生 姓 名  刘 诗  导 师姓名 ...

  3. 基于维纳滤波的语音增强算法 matlab,基于维纳滤波语音增强算法的改进实现

    通过对维纳滤波的介绍,实现了基本维纳滤波效果;利用两级维纳滤波和两级滤波器组滤波方法实现了语音增强,达到了良好的效果. 维普资讯 http://doc.docsou.com 文章编号:0 2 8 8 ...

  4. 南华大学计算机学院吴取劲,一种基于图深度优先搜索的基本路径集自动生成优化算法-南华大学学报.PDF...

    26 3 ( ) Vol. 26 No. 3 第 卷第 期 南华大学学报 自然科学版 2012 9 Journal of University of South China (Science and ...

  5. 基于密度聚类算法的改进

    基于密度算法的改进 本篇博客来自我的github小项目,如果对您有帮助,希望您前去点星 ! 使用基于密度的聚类算法,进行高维特征的聚类分析,从高维数据中提取出类似的有用信息,从而简化了特征数量,并且去 ...

  6. 基于差分进化算法(DE)改进的jDE2 处理约束优化问题

    约束优化问题是生活中常见的问题,传统的方法解决起来比较麻烦,这里提供了一种基于差分进化算法的改进算法jDE2,整体的处理效果不错! 这里迭代1000次平均值达到-0.99809,而第三测试函数的最好值 ...

  7. 风电功率预测优化算法MATLAB程序基于改进神经网络

    风电功率预测优化算法MATLAB程序基于改进神经网络 (1) 该程序为基于改进神经网络的风电功率预测优化算法程序,风电预测程序,期刊论文源程序,配有该论文. (2) 该程序所用的ICA-BP 神经网络 ...

  8. #时间预测算法_改进的智慧交通系统出行时间预测算法

    引用 Chowdhury N K, Leung C K S. Improved travel time prediction algorithms for intelligent transporta ...

  9. 三维图形几何变换算法实验_基于深度学习的三维重建算法综述

    点击上方"计算机视觉life",选择"星标" 快速获得最新干货 00 前言 目前,三维重建技术已在游戏.电影.测绘.定位.导航.自动驾驶.VR/AR.工业制造以 ...

  10. 使用并行计算改进基于独立 Metropolis-Hastings 的估计

    0.摘要 在本文中,我们考虑了如果提议的值独立于马尔可夫链的当前值,则可以通过通用 Metropolis-Hastings 算法利用并行原始功率这一事实的含义.特别是,我们提出了对独立 Metropo ...

最新文章

  1. (原)调用jpeglib对图像进行压缩
  2. MyBatis-学习笔记11【11.Mybatis的缓存】
  3. IMPDP table_exists_action 参数的应用
  4. python重写和装饰器_python中的装饰器
  5. gojs 部分功能实现
  6. java数组有顺序吗_java – 使用特定顺序对(数组)列表进行排序
  7. ARM中断产生和管理
  8. 【译】组织好你的Asp.Net MVC解决方案
  9. mysql.cnf配置
  10. 大数据只做三件事,对用户的理解、对信息的理解、对关系的理解
  11. 利用.bat批处理命令进行文件复制粘贴备份
  12. 扩展工具将网页保存为PDF
  13. haosou属于搜索引擎的_搜索引擎登录工具
  14. 洛谷P1338(末日的传说)
  15. 使用EasyExcel上传下载excel
  16. Java源码阅读绘图规范手册--[捷特版]
  17. 解决Chrome或Microsoft Edge浏览器打开时自动跳转到hao123
  18. 《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks》翻译
  19. [ZT]系统学习Linux的11点建议
  20. 水面模拟--波动方程

热门文章

  1. x299服务器芯片,X299比X399差在哪? 两大平台产品比拼
  2. 列举在100到200以内的质数
  3. python处理excel数据
  4. 计算机桌面出现家庭组,win7系统桌面突然多出一个家庭组图标的解决方法
  5. 百年通信史:落后西方半世纪的中国,用20年绝地反杀!
  6. ASP.NET Word转换成PDF文件
  7. 【马克思主义基本原理】--第二章--实践与认识及其发展规律
  8. Rabbitmq二进制集群搭建
  9. IP地址屏蔽功能设计
  10. python判断一个数是素数_使用Python语言判断质数(素数)的简单方法讲解