如何开始程序生成?

程序生成最近已经成为焦点(由孢子,MMO等),这似乎是一个有趣的/强大的编程技术。

我的问题是这些:

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

你可能应该从一个小理论和简单的例子,如中点位移algorithm开始 。 如果你有兴趣生成graphics,你还应该学习一些关于Perlin噪声的知识 。 我用这个让我开始了我最后一年的程序生成项目。

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

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

程序生成是一种可以用于任何语言的技术(它绝对不限于程序语言,例如C,因为它可以用于诸如Java的OO语言和诸如Prolog的逻辑语言)。 很好地理解任何语言的recursion会增强你对程序生成的掌握。

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

  • 模拟城市的发展以便规划交通pipe理
  • 来模拟血pipe的生长
  • SpeedTree被用于电影和build筑演示

程序内容生成wiki:

http://pcg.wikidot.com/

如果你想要的不在那里,然后添加它;)

程序内容生成现在都是为GPU编写的,所以你需要知道一个着色语言。 这意味着GLSL或HLSL。 这些是分别与OpenGL和DirectX绑定的语言。

虽然我的个人偏好是Dx11 / HLSL,但由于速度更快,学习曲线更加容易,而且在更多的平台上支持OpenGL的Frank D Luna 。

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

程序内容从噪音开始。

所以你需要了解Perlin噪声(及其后继Simplex噪声 )。

Shadertoy是学习着色器编程的极好参考。 我build议你一旦给自己的着色器编码,就会来到它,因为代码没有math上的错误,但是程序内容是如何完成的。

Shadertoy是由一位程序天才Inigo Quilez创build的,这是在皮克斯工作的演示场景的产物。 他有一些YouTubevideo ( 很好的例子 )的现场编码会议,我也可以推荐这些。

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

  1. NetHack和它的brethern是开源的,严重依赖程序生成的层次(地图)。 链接到它的下载。 如果你对风景/纹理/云一代更感兴趣,我build议你search那些有相当多文章的Gamasutra和GameDev 。

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

  3. 那么这取决于你是否有一个可以从这种技术中受益的项目。 我看到在军队模拟器中使用的程序代(可以被认为是一个游戏,虽然他们不是很好玩:))。

还有一个小logging – 我的定义如果程序生成是从less量的规则或模式和大量的随机性产生大量的数据,你的结果可能会有所不同:)

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

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

它是偏向于非实时的视觉效果和animation的生成,但是这个理论和想法在这些领域之外是可以使用的,我想。

还值得一提的是,有一个专业的软件包,实现了一个完整的程序工作stream程,称为SideFX的Houdini。 您可以使用它来发明问题的程序性解决scheme并进行原型devise,以后可以转换为代码。

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

程序生成在demoscene中被用于在一个小的可执行文件中创build复杂的graphics。 Will Wright甚至会说,在制作Spore的时候,他受到了demoscene的启发。 这可能是你最好的开始。

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

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

最重要的是还有一个文明演化模拟器:

https://github.com/ftomassetti/civs

一个有趣的资源博客是:

dungeonleague.com/

它现在被放弃,但你应该阅读所有的post

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

接下来,您应该开发关于如何以微小,明确的步骤创build几何的解决scheme。 你必须定义构成可信城市的规则。 如果你进入3Dbuild模,你必须重新思考你学到的东西,这样计算机可以在任何情况下遵循你的指示。

为了不疏松跟踪,你应该build立很多只负责整个过程的一小部分的操作员。 这使得debugging,扩展和改善您的系统更容易。 在下一步中,您应该链接这些运算符,并通过更改参数来检查结果。

我看到太多的“城市发电机”,主要是由随机形状的箱子组成,上面有一些窗口的纹理: