如何开始程序生成?

时间:2008-09-30 20:59:27

标签: procedural-generation

Procedural generation最近成为人们关注的焦点(由孢子,MMO等),它似乎是一种有趣/强大的编程技术。

我的问题是这些:

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

9 个答案:

答案 0 :(得分:114)

你应该从一些理论和简单的例子开始,例如midpoint displacement algorithm。如果您对生成图形感兴趣,还应该了解Perlin Noise。我用这个来开始我关于程序生成的最后一年项目。

Fractals与程序生成密切相关。

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

程序生成是一种可以在任何语言中使用的技术(它绝对不限于诸如C的过程语言,因为它可以用于诸如Java的OO语言和诸如Prolog的逻辑语言)。很好地理解任何语言的递归都会加强你对程序生成的把握。

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

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

答案 1 :(得分:48)

程序内容生成维基:

http://pcg.wikidot.com/

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

答案 2 :(得分:14)

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

虽然我个人偏好Dx11 / HLSL由于速度,更简单的学习曲线和Frank D Luna,但更多平台支持OpenGL。

如果你想直接写入着色器而不必花费相当多的时间来设置OpenGL / DirectX游戏引擎,你也应该检查WebGL。

程序内容始于噪音。

因此,您需要了解Perlin噪音(及其继承者Simplex noise)。

Shadertoy是了解着色器编程的绝佳参考。我建议你在你自己给出着色器编码之后再来它,因为那里的代码不是数学上的娇气,但这就是程序性内容的完成方式。

Shadertoy是由程序天才Inigo Quilez创建的,这是在Pixar工作的演示场景的产物。他有some youtube videosgreat example)个实时编码会话,我也可以推荐这些。

答案 3 :(得分:8)

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

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

  2. AFAIK我不认为语言之间有太大差异。你看到的大多数代码都是在C / CPP中,因为它仍然是游戏开发者的官方语言,但你可以使用你想要的任何东西......

  3. 这取决于你是否有一个可以从这种技术中受益的项目。我看到了军队模拟器中使用的程序生成(可以认为是一种游戏,虽然它们不太可玩:)。)

  4. 还有一个小小的注意事项 - 我的定义是,如果程序生成是从少量规则或模式中产生大量数据并且随机性很多,那么结果可能会有所不同:)

答案 4 :(得分:8)

有一本关于这个主题的优秀书籍:

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

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

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

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

答案 5 :(得分:8)

如果你想要一个世界发电机模拟板块构造,侵蚀,雨影等的例子,请看看: https://github.com/ftomassetti/lands

除此之外,还有一个文明进化模拟器:

https://github.com/ftomassetti/civs

关于有趣资源的博客是:

dungeonleague.com /

现在已经放弃,但你应该阅读它的所有帖子

答案 6 :(得分:7)

程序生成在demoscene中大量使用,以在小型可执行文件中创建复杂的图形。 Wright甚至会说他在制作Spore时受到了demoscene的启发。这可能是你最好的起点。

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

答案 7 :(得分:3)

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

接下来,您应该开发出如何以微小,不同的步骤创建该几何体的解决方案。你必须定义组成一个可信赖城市的规则。如果你正在进行3D建模,你必须重新考虑你学到的很多知识,这样计算机就可以在任何情况下都遵循你的指示。

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

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

答案 8 :(得分:1)

(十多年后……)

过程生成仅表示使用代码来生成数据,而不是手工制作。例如,如果您要生成包含各种树木的森林,则要手工设计每个树木,因此编码可以更有效地生成变化。

一般来说,有一些规则和一些规则,此外,您还可以添加一些自己的随机性和逻辑,并结合所有这些技术... 任何有点混乱但不太混乱的东西都会产生有趣的结果。

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

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