演讲笔记 适合所有人的实用程序生成 PCG

Posted 暗光之痕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了演讲笔记 适合所有人的实用程序生成 PCG相关的知识,希望对你有一定的参考价值。

总起

近期翻到2017年GDC的一篇演讲——Practical Procedural Generation for Everyone,演讲者对PCG技术进行了简单的介绍,比较适合于想要了解PCG技术的人。

本篇文章参考她的演讲和文章进行一个总结,尝试回答以下两个问题:

  1. 什么是PCG?
  2. PCG常用的方法?

使用PCG的例子:

  1. 《我的世界》,生成地形;
  2. 《无人深空》,生成星球、动植物等;
  3. 《矮人堡垒》,生成地图、历史、人物等;
  4. 《Pippen Barr》,生成下象棋时摸胡须的方式;
  5. 《Mr. Darcy Dance Simulator》,生成Darcy侮辱你的方式
  6. 《Ultima Ratio Regum》,生成奇怪的博物馆;
  7. 《Yavalath》,生成游戏规则;
  8. 生成织物裙子之类、生成艺术品;
  9. 生成音乐、诗歌。

讨论的PCG三件事情:

  1. 你想要生成什么;
  2. 将专家搬到程序中;
  3. 具体方法。

你想要生成什么

首先确认你想要生成什么,越具体越好,比如生成一个简单多层的公寓模型,而像是生成一部有趣小说这个目标就有些太模糊了。

接下去思考对于生成物来说什么是好,什么是坏。好的部分我们可以设置为生成器的属性,而坏的部分提供了约束,而属性和约束确定了生成物可能性空间

另一种方法,如果不知道该生成什么,也可以即兴发挥,从一些松散的部分开始,确定它想要生成什么。

将专家搬到程序中

这一步最好请专家共同商讨,深入了解专家在制作这项东西时思考过程,尝试将其搬到计算机程序中。

在设计《孢子》的编辑器时,程序、策划和美术密切合作,以了解美术(动画师)是如何对生物进行建模和处理贴图的。当时他们请了一个迪士尼的动画师,深入挖掘他创造生物时是如何画出形状、如何表现生物的性格等

可以尝试问专家以下几个问题(本体论):

  1. 他们在制作过程中问过什么样的问题?
  2. 他们怎样做决定?
  3. 他们如何在多项选择之间权衡?
  4. 有什么样的问题是一直在他们脑海中紧记的?
  5. 他们是怎么命名制作的各个部分的,以及各个部分之间的关系?

一些领域专家编写了一些有争议性的框架来描述他们的工作。比如音乐中的爵士即兴、巴赫风格、和声、流行乐,故事中有英雄叙事、TV Tropes(研究电影、电视剧中桥段),艺术中有黄金比例、色彩和谐和构图规则。需要注意的是没有一个框架是完整的,并且没有保证遵循它们就能做出好的生成器,各种框架可以提供一些指导和灵感

具体方法

从规则到生成方法

人类,擅长估计、猜测和综合大量关于过去的情况的知识;

计算机,告诉什么做什么,但擅长大量计算。

特别适合构建生成器的方法(生成方法)将赋予计算机以下一些技能:

1.封装知识选项(技能 A)

2.创建一些结构(技能 B)

3.编码选择知识的条件规则 (A2)

4.在结构中增加可变性 (B2)

5.能够根据约束问自己问题(我解决了这个问题吗?)(技能 C)

6种方法

方法1,Distribution,随机分布方法,随机数、真实是分层和聚集的。

这是最简单的生成方法,你可以将一堆东西散布在时间和空间中。

 

特点:

  1. 没有太多整体结构(B);
  2. 可能选择每个选项(A),有时候会使用加权随机或套牌洗牌(列出所有选项从中选择并在使用后丢弃);
  3. 条件规则(A2)也可以变得十分复杂,一般会给出固定的参数进行选择。

以RPG为例:

  1. 游荡的怪物分布在环境中(A);
  2. 高级怪物出现在更高级别的区域,水怪出现在水中等(A2);
  3. 战利品有可能从大量战利品中选择的(A);
  4. 击败高级怪物的情况下可能会获得更高级的战利品(A2)。

音乐和语言使用这种方法效果并不好,因为其结构比较繁重,可以试试基于图块或基于语法的方法,如果其结构非常固定,则可以试试参数化方法。

方法2,Parametric,参数方法。

如果经有了一个相当完善的工件,并且只需要稍微调整一下,可以通过参数的方式。它是一种非常可靠可控的方法!

特点:

  1. 通过固定的一维数值提供可变性(A);
  2. 完全没有结构可变性(B2);

更复杂的参数方法形式:

  1. 使用基于点、基于路径和基于图形的输入,类似Photoshop;
  2. 《孢子》使用的元球(Metaballs);
  3. 填充空间和路径的算法,Voronoi模式、Perlin/Simplex 噪声、三角测量算法、3D 挤压或旋转,以及分形地形的菱形正方形算法。

方法3,Tiles,基于图块的,文明、卡坦岛、暗黑破坏神、塔罗牌。

这种方法将问题分解为模块化的、相同大小的图块。

特点:

  1. 非常适合小规模结构(B);
  2. 没有什么灵活性(B2);
  3. 对可能的选项进行了非常严格的封装(A)。

方法4,Grammars,语法,Tracery(作者自己做的语言)、L-System、故事生成器。

特点:

  1. 可以构建非常深和复杂的结构(B);
  2. 同时提供了很多的控制(A);
  3. 其缺点是没有处理约束的方法;

方法5,Interpretive,约束求解器,将数据处理为另外的数据、手部追踪获得运动线、柏林噪声、几何算法、metaballs、分型和数学。

最简单古老的版本就是暴力破解,试图制作每一种可能,直到制作出符合约束的内容,当然通常可以通过某些方式缩短求解的时间。

方法6,Simulations,代理和模拟,粒子生成器、细胞自动机、代理模拟、物理模拟、遗传算法。

许多代理和模拟从自然界中汲取灵感,例如鸟群、进化、细菌、神经元和城市等。

参考

  1. 《GDC Practical Procedural Generation for Everyone》

https://www.youtube.com/watch?v=WumyfLEa6bU

  1. 《So you want to build a generator…》

https://galaxykate0.tumblr.com/post/139774965871/so-you-want-to-build-a-generator

以上是关于演讲笔记 适合所有人的实用程序生成 PCG的主要内容,如果未能解决你的问题,请参考以下文章

演讲笔记 适合所有人的实用程序生成 PCG

读书笔记 PCG in Games 程序化内容生成4 分型噪声和代理,地形生成

读书笔记 PCG in Games 程序化内容生成4 分型噪声和代理,地形生成

读书笔记 PCG in Games 程序化内容生成4 分型噪声和代理,地形生成

读书笔记 PCG in Games 程序化内容生成2 基于搜索的方法

读书笔记 PCG in Games 程序化内容生成2 基于搜索的方法