如何开始生成程序?


147

程序生成最近已受到关注(Spore,MMO等),并且似乎是一种有趣/功能强大的编程技术。

我的问题是:

  • 您是否知道任何利用程序生成技术的中型项目?
  • 哪种语言/哪类语言最适合程序生成?
  • 您可以对“严重”代码使用过程生成吗?(即不是游戏)

1
想知道您是否对X-Team的这篇文章有帮助?x-team.com/blog/…–
亚当·杰拉德

Answers:


117

您可能应该从一些理论和简单的示例开始,例如中点位移算法。如果您对生成图形感兴趣,还应该对Perlin Noise有所了解。我用它来开始我关于程序生成的最后一年的项目。

分形与程序生成密切相关。

TerragenSpeedTree将为您展示过程生成的一些惊人可能性。

程序生成是一种可以在任何语言中使用的技术(由于它可以在Java等OO语言和Prolog等逻辑语言中使用,因此它绝对不限于C等程序语言)。对任何语言的递归都有很好的理解,可以增强您对过程生成的理解。

对于“严重”或非游戏代码,程序生成技术已用于:

  • 模拟城市的增长,以规划交通管理
  • 模拟血管的生长
  • SpeedTree用于电影和建筑演示中

这种Perlin Noise看起来很像Photoshop的“云”滤镜。
doubleOrt

第一条链接断开了
Jean Carlo Machado

一些电子音乐使用程序生成来创建
Poyda

50

程序内容生成Wiki:

http://pcg.wikidot.com/

如果您想要的东西不在那儿,那么添加它;)


11
我无法在此处复制整个Wiki!没有“必不可少的部分”。
马丁

12

现在,程序性内容生成都是为GPU编写的,因此您需要了解着色器语言。这意味着GLSL或HLSL。这些是分别与OpenGL和DirectX相关的语言。

由于速度,更轻松的学习曲线和Frank D Luna的缘故,我个人偏爱Dx11 / HLSL ,但更多平台均支持OpenGL。

如果您想直接进入编写着色器,而不必花费(相当大的)时间来设置OpenGL / DirectX游戏引擎,则还应该签出WebGL。

程序内容始于噪音。

因此,您需要了解Perlin噪声(及其后继产品Simplex噪声)。

Shadertoy是学习着色器编程的绝佳参考。我建议您自己给着色器编码后再使用它,因为该代码不是数学上的用处,但这是程序内容的完成方式。

Shadertoy是由程序天才Inigo Quilez创建的,Inigo Quilez是在皮克斯工作的演示场景的产品。他有一些现场编码会话的youtube视频很好的例子),我也可以推荐这些视频。


17
您的意思是“过程内容生成现在全部是为GPU编写的”?您是在谈论草叶之类的话题吗?例如,您的意思不是生成游戏的地图或城市吗?
德隆兹

2
是的,我认为这里的“全部”评论过于笼统,但是在景观生成领域(我猜这是最常见的一种),这是一个有用的答案。尽管我无法想象谁愿意看某人在视频中键入代码。
Nate CK 2015年

1
想要学习如何编写复杂代码(例如着色器)或学习如何在设计中利用复杂模式的人。这只是表面。
塔科马塔尔奥特曼

“现在程序性内容生成都是为GPU编写的,因此您需要了解着色器语言。” 完全是不真实的,而且100%会引起误解。(我正在做一个简单的过程生成项目,我一生写了0行着色器代码)
减少活动


8

我不是专家,但是我可以尝试提供一些答案:

  1. NetHack和它的brethern是开源的,并且严重依赖于过程的级别(图)的生成。链接到它的下载。如果您对景观/纹理/云生成更感兴趣,建议您搜索GamasutraGameDev,其中有很多关于这些主题的文章。

  2. AFAIK我认为语言之间没有太大区别。您看到的大多数代码都将使用C / CPP,因为它仍然是Game Developers的官方语言,但是您可以使用任何您想要的东西...

  3. 好吧,这取决于您是否有一个可以从这种技术中受益的项目。我看到了在陆军模拟器中使用的程序生成(可以将其视为一种游戏,尽管它们不是很容易玩:)。

还有一点需要注意的是-我的定义是:如果过程生成是指通过少量规则或模式以及大量随机性生成大量数据的任何事物,那么您的结果可能会有所不同:)


8

关于该主题有一本非常出色的书:

http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486

它偏向于非实时视觉效果和动画生成,但是我认为这些理论和思想在这些领域之外是可用的。

值得一提的是,有一个专业的软件包可以实现一个完整的过程工作流,称为SideFX的Houdini。您可以使用它来发明问题的过程解决方案并为其原型设计,然后将其转换为代码。

虽然这是一个相当昂贵的软件包,但它具有免费的评估许可证,可以用作非常好的教育和/或工程工具。


7

程序生成在演示场景中大量使用,以在小型可执行文件中创建复杂的图形。威尔·赖特(Will Wright)甚至说,他在制作《孢子》时受到了恶魔般的启发。那可能是您最好的起点。

http://en.wikipedia.org/wiki/Demoscene


3

最重要的是分析道路,城市,街区和建筑物的结构。找出所有建筑物之间的共同点。看照片,地图,计划和现实。如果这样做,您将比那些将城市建设仅视为计算机技术问题的人们领先一步。

接下来,您应该开发有关如何以微小,不同的步骤创建几何图形的解决方案。您必须定义构成可信城市的规则。如果您要进行3D建模,则必须重新考虑很多已学到的知识,以便计算机在任何情况下都可以按照您的指示进行操作。

为了避免松懈,您应该设置很多操作员,这些操作员仅负责整个过程的一小部分。这使得调试,扩展和改进系统变得更加容易。在下一步中,您应该链接这些运算符并通过更改参数来检查结果。

我看到了太多的“城市生成器”,它们主要由随机形状的盒子组成,上面带有一些窗口纹理:(


3

(超过10年后...)

过程生成仅意味着使用代码来生成数据,而不是手工制作。例如,如果要生成包含各种树木的森林,则无需手工设计每棵树,因此编码可以更有效地生成变化。它可能是树形图形,大小,结构,位置的生成...

一般有某种互为作用的几个规则,此外,您可以添加一些自己的随机性和逻辑,结合所有这些技术......凡是有点乱,但不是太乱了可以产生有趣的结果。

以下是一些值得注意的技术:

一些以程序生成而闻名的游戏:

有关程序性土地发电的视频教程。

关于游戏过程内容生成的会议,有很多有关以下主题的视频:一切过程

玩得开心。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.