总起

近期翻到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相关推荐

  1. 印象笔记,石墨笔记和Effie哪个更适合影评人?

    说起影评人,相信有不少人会想起抖音平台中一些影视视频剪辑的大咖,他们拥有者灵活地视频剪辑技巧,懂得为整个影视剧情谋篇布局,剪辑出关键部分,在配上文字解说,瞬间得到了很多观众的一致喜爱,他们拥有了众多粉 ...

  2. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  3. 聊一聊天酬汇适合哪些人吧

    作为一名站长,每天都会有 遇到新手来问问题,这几天就有很多人加我,有的是问关于"天酬汇"的,有问的是适不适合网络小白?我是一名宝妈能做不?有什么门坎吗?等问题,所以它的受众人群有必 ...

  4. 软件测试培训适合什么人学习?

    软件测试在互联网行业一直有着非常可观的发展前景,想要学习软件测试技术的人也越来越多,但不是所有人都可以学,都能学会的,小编下面就为大家详细的介绍一下软件测试培训适合什么人学习? 软件测试培训适合什么人 ...

  5. Python培训班适合哪些人报名学习

    学习Python技术有两种方法,一个是自学,一个是报Python培训班进行系统学习,自学肯定是对一些有Python基础的同学比较合适的,那么Python培训班适合哪些人报名学习呢?来看看下面的详细介绍 ...

  6. 化生政组合能选计算机专业吗,化生政这个组合好不好? 适合哪些人报考

    新高考3+3选科模式中,选科组合多达20种,使得家长和同学们在众多选科组合中挑花了眼.那么,化生政组合好吗? 化生政组合优势 1.化学与生物学科组合可选择专业较多 如果有同学日后想要从事医药类行业.或 ...

  7. 微软电脑适合什么人用_眼膜适合什么年龄段的人使用呢?什么年龄段的人用什么样的眼膜...

    很多女人为了保护自己的眼周肌肤都会使用眼膜,不过呢眼膜可不是适合所有人使用的,那么眼膜适合什么年龄段的人使用呢? 18岁以上可以用补水型眼膜 过了十八岁以后的朋友们可以开始用一些眼膜了,但最好选补水型 ...

  8. 毕竟这个世界互相适合的人太少了

    m_strFlagFace="见面" if(m_strFlagFace=="ok") { /*毕竟这个世界互相适合的人太少了,一定要抓住啊*/ try   { ...

  9. 计算机老师能叫少儿编程,少儿编程教师适合哪些人做?需要具备什么能力?

    少儿编程教师适合哪些人做?需要具备什么能力?严格上来讲只要是对孩子有爱心,愿意从事少儿教育行业,就适合做少儿编程教师.可能一般人会认为,少儿编程教师需要具备极强的编程能力.其实不然,少儿编程教师只需要 ...

最新文章

  1. 如何让一滴水不蒸发?
  2. linux java aptget_apt-get没有安装任何linux服务器
  3. WCF中的ServiceHost初始化两种方式(宿主)
  4. 重拾python Day 2
  5. 第五章 编写主引导扇区代码
  6. Spring Cloud Alibaba —— Sentinel 入门
  7. 依赖反转原则(DIP)
  8. C#可视化编程技术总结:制作可视化窗体软件
  9. android 华为 imei,华为手机怎么查看IMEI码?华为手机查询IMEI串号两种方法,华为imei...
  10. 【Opencv综合应用】自制训练集的人脸识别1——拍摄10张人脸图片
  11. c语言 实现参数值双向传递,基于C语言函数参数传递规律的探讨
  12. 【PTA-乙级】1019 - 数字黑洞(4种解法)(C/C++)
  13. frontpage中没有动态HTML效果,[多选] 在frontpage中,应用文字的动态HTML效果时可选择的事件有()...
  14. 磨金石教育摄影干货分享|风光摄影后期教程:冷色调变暖色调
  15. Qt 配置使用IPP库
  16. 归一化互相关(NCC)计算视差图
  17. 图像分割二十年,盘点影响力最大的10篇论文(含论文和源代码)
  18. EditPlus中文版+英文版+注册码下载
  19. IP(Internet Protocol)网际协议
  20. mysql链接liunx远程服务器

热门文章

  1. Devart Excel 插件 Crack,Microsoft Excel 和非常普通的 Excel 电子表格
  2. php什么是同源策略,安全 初探同源策略及其安全
  3. 复活这个失效的文库下载神器,从此告别VIP
  4. 有了金刚钻,不惧瓷器活 | 在数据文件上轻松使用SQL
  5. 两款C++静态检查工具
  6. Unity 场景资源检查工具
  7. 共读ulord项目分析(二)
  8. 计算机学院毕业典礼口号,毕业典礼宣传标语40条
  9. 【数据结构-C】单链表基本操作及图解分析
  10. CentOS 7 搭建PPTP,实现虚拟专用网络服务