演讲笔记 适合所有人的实用程序生成 PCG
Posted 暗光之痕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了演讲笔记 适合所有人的实用程序生成 PCG相关的知识,希望对你有一定的参考价值。
总起
近期翻到2017年GDC的一篇演讲——Practical Procedural Generation for Everyone,演讲者对PCG技术进行了简单的介绍,比较适合于想要了解PCG技术的人。
本篇文章参考她的演讲和文章进行一个总结,尝试回答以下两个问题:
- 什么是PCG?
- PCG常用的方法?
使用PCG的例子:
- 《我的世界》,生成地形;
- 《无人深空》,生成星球、动植物等;
- 《矮人堡垒》,生成地图、历史、人物等;
- 《Pippen Barr》,生成下象棋时摸胡须的方式;
- 《Mr. Darcy Dance Simulator》,生成Darcy侮辱你的方式
- 《Ultima Ratio Regum》,生成奇怪的博物馆;
- 《Yavalath》,生成游戏规则;
- 生成织物裙子之类、生成艺术品;
- 生成音乐、诗歌。
讨论的PCG三件事情:
- 你想要生成什么;
- 将专家搬到程序中;
- 具体方法。
你想要生成什么
首先确认你想要生成什么,越具体越好,比如生成一个简单多层的公寓模型,而像是生成一部有趣小说这个目标就有些太模糊了。
接下去思考对于生成物来说什么是好,什么是坏。好的部分我们可以设置为生成器的属性,而坏的部分提供了约束,而属性和约束确定了生成物可能性空间。
另一种方法,如果不知道该生成什么,也可以即兴发挥,从一些松散的部分开始,确定它想要生成什么。
将专家搬到程序中
这一步最好请专家共同商讨,深入了解专家在制作这项东西时思考过程,尝试将其搬到计算机程序中。
在设计《孢子》的编辑器时,程序、策划和美术密切合作,以了解美术(动画师)是如何对生物进行建模和处理贴图的。当时他们请了一个迪士尼的动画师,深入挖掘他创造生物时是如何画出形状、如何表现生物的性格等
可以尝试问专家以下几个问题(本体论):
- 他们在制作过程中问过什么样的问题?
- 他们怎样做决定?
- 他们如何在多项选择之间权衡?
- 有什么样的问题是一直在他们脑海中紧记的?
- 他们是怎么命名制作的各个部分的,以及各个部分之间的关系?
一些领域专家编写了一些有争议性的框架来描述他们的工作。比如音乐中的爵士即兴、巴赫风格、和声、流行乐,故事中有英雄叙事、TV Tropes(研究电影、电视剧中桥段),艺术中有黄金比例、色彩和谐和构图规则。需要注意的是没有一个框架是完整的,并且没有保证遵循它们就能做出好的生成器,各种框架可以提供一些指导和灵感。
具体方法
从规则到生成方法
人类,擅长估计、猜测和综合大量关于过去的情况的知识;
计算机,告诉什么做什么,但擅长大量计算。
特别适合构建生成器的方法(生成方法)将赋予计算机以下一些技能:
1.封装知识选项(技能 A)
2.创建一些结构(技能 B)
3.编码选择知识的条件规则 (A2)
4.在结构中增加可变性 (B2)
5.能够根据约束问自己问题(我解决了这个问题吗?)(技能 C)
6种方法:
方法1,Distribution,随机分布方法,随机数、真实是分层和聚集的。
这是最简单的生成方法,你可以将一堆东西散布在时间和空间中。
特点:
- 没有太多整体结构(B);
- 可能选择每个选项(A),有时候会使用加权随机或套牌洗牌(列出所有选项从中选择并在使用后丢弃);
- 条件规则(A2)也可以变得十分复杂,一般会给出固定的参数进行选择。
以RPG为例:
- 游荡的怪物分布在环境中(A);
- 高级怪物出现在更高级别的区域,水怪出现在水中等(A2);
- 战利品有可能从大量战利品中选择的(A);
- 击败高级怪物的情况下可能会获得更高级的战利品(A2)。
音乐和语言使用这种方法效果并不好,因为其结构比较繁重,可以试试基于图块或基于语法的方法,如果其结构非常固定,则可以试试参数化方法。
方法2,Parametric,参数方法。
如果经有了一个相当完善的工件,并且只需要稍微调整一下,可以通过参数的方式。它是一种非常可靠可控的方法!
特点:
- 通过固定的一维数值提供可变性(A);
- 完全没有结构可变性(B2);
更复杂的参数方法形式:
- 使用基于点、基于路径和基于图形的输入,类似Photoshop;
- 《孢子》使用的元球(Metaballs);
- 填充空间和路径的算法,Voronoi模式、Perlin/Simplex 噪声、三角测量算法、3D 挤压或旋转,以及分形地形的菱形正方形算法。
方法3,Tiles,基于图块的,文明、卡坦岛、暗黑破坏神、塔罗牌。
这种方法将问题分解为模块化的、相同大小的图块。
特点:
- 非常适合小规模结构(B);
- 没有什么灵活性(B2);
- 对可能的选项进行了非常严格的封装(A)。
方法4,Grammars,语法,Tracery(作者自己做的语言)、L-System、故事生成器。
特点:
- 可以构建非常深和复杂的结构(B);
- 同时提供了很多的控制(A);
- 其缺点是没有处理约束的方法;
方法5,Interpretive,约束求解器,将数据处理为另外的数据、手部追踪获得运动线、柏林噪声、几何算法、metaballs、分型和数学。
最简单古老的版本就是暴力破解,试图制作每一种可能,直到制作出符合约束的内容,当然通常可以通过某些方式缩短求解的时间。
方法6,Simulations,代理和模拟,粒子生成器、细胞自动机、代理模拟、物理模拟、遗传算法。
许多代理和模拟从自然界中汲取灵感,例如鸟群、进化、细菌、神经元和城市等。
参考
- 《GDC Practical Procedural Generation for Everyone》
https://www.youtube.com/watch?v=WumyfLEa6bU
- 《So you want to build a generator…》
https://galaxykate0.tumblr.com/post/139774965871/so-you-want-to-build-a-generator
以上是关于演讲笔记 适合所有人的实用程序生成 PCG的主要内容,如果未能解决你的问题,请参考以下文章
读书笔记 PCG in Games 程序化内容生成4 分型噪声和代理,地形生成
读书笔记 PCG in Games 程序化内容生成4 分型噪声和代理,地形生成
读书笔记 PCG in Games 程序化内容生成4 分型噪声和代理,地形生成