如何开始程序生成?

per*_*iae 141 procedural-generation

程序生成最近引起了人们的关注(由Spore,MMO等),它似乎是一种有趣/强大的编程技术.

我的问题是这些:

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

Lia*_*iam 115

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

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

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

程序生成是一种可以在任何语言中使用的技术(它绝对不限于诸如C的过程语言,因为它可以用于诸如Java的OO语言和诸如Prolog的逻辑语言).对任何语言的递归的充分理解将加强​​您对程序生成的掌握.

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

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


Mar*_*tin 49

程序内容生成维基:

http://pcg.wikidot.com/

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

  • 我不能在这里复制整个维基!没有"必不可少的部分". (10认同)

fis*_*ood 14

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

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

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

程序内容始于噪音.

因此,您需要了解Perlin噪声(及其后续单声道噪声).

Shadertoy是学习着色器编程的绝佳参考.我建议你一旦你自己给出了着色器编码就可以实现它,因为那里的代码不是数学上的娇气,但这就是程序内容的完成方式.

Shadertoy是由程序天才Inigo Quilez创建的,Inigo Quilez是在Pixar工作的演示场景的产物.他有一些youtube视频(很好的例子)的实时编码会话,我也可以推荐这些.

  • 你是什​​么意思"程序内容生成现在都是为GPU编写的"?你刚才谈的是草叶之类的东西?你并不是指为游戏生成地图或城市,例如,你呢? (16认同)
  • 是的,我认为这里的"全部"评论是过度概括,但在景观生成领域(我猜这是最常见的一种),这是一个有用的答案.虽然我无法想象谁会想看某人在视频中键入代码. (2认同)

Mik*_*kle 8

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

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

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

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

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


bee*_*tee 8

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

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

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

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

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


Fed*_*tti 8

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

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

https://github.com/ftomassetti/civs

关于有趣资源的博客是:

dungeonleague.com/

它现在被抛弃但你应该阅读它的所有帖子


ano*_*non 7

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

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

  • 我发现demoscene是一个难学的地方. (12认同)

Chr*_*ssy 6

(十多年后……)

程序生成仅意味着使用代码来生成数据,而不是手工制作。例如,如果您想生成一个包含各种树木的森林,您将不会手动设计每棵树,因此编码可以更有效地生成变体。它可以是树图形的生成、大小、结构、放置...

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

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

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

关于程序陆地生成的视频教程。

关于游戏程序内容生成的会议,有很多关于该主题的视频:everythingprocedural

玩得开心。