Procedural generation最近成为人们关注的焦点(由孢子,MMO等),它似乎是一种有趣/强大的编程技术。
我的问题是这些:
答案 0 :(得分:114)
你应该从一些理论和简单的例子开始,例如midpoint displacement algorithm。如果您对生成图形感兴趣,还应该了解Perlin Noise。我用这个来开始我关于程序生成的最后一年项目。
Fractals与程序生成密切相关。
Terragen和SpeedTree将向您展示程序生成的一些惊人可能性。
程序生成是一种可以在任何语言中使用的技术(它绝对不限于诸如C的过程语言,因为它可以用于诸如Java的OO语言和诸如Prolog的逻辑语言)。很好地理解任何语言的递归都会加强你对程序生成的把握。
对于“严重”或非游戏代码,程序生成技术已被用于:
答案 1 :(得分:48)
答案 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 videos(great example)个实时编码会话,我也可以推荐这些。
答案 3 :(得分:8)
我不是这方面的专家,但我可以尝试提供一些答案:
NetHack和它的brethern是开源的,并且在很大程度上依赖于程序生成级别(地图)。 Link下载它。 如果您对景观/纹理/云生成更感兴趣,我建议您搜索Gamasutra和GameDev,其中有很多关于这些主题的文章。
AFAIK我不认为语言之间有太大差异。你看到的大多数代码都是在C / CPP中,因为它仍然是游戏开发者的官方语言,但你可以使用你想要的任何东西......
这取决于你是否有一个可以从这种技术中受益的项目。我看到了军队模拟器中使用的程序生成(可以认为是一种游戏,虽然它们不太可玩:)。)
还有一个小小的注意事项 - 我的定义是,如果程序生成是从少量规则或模式中产生大量数据并且随机性很多,那么结果可能会有所不同:)
答案 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的启发。这可能是你最好的起点。
答案 7 :(得分:3)
最重要的是分析道路,城市,街区和建筑的结构。找出所有建筑物的共同点。看看照片,地图,计划和现实。如果你这样做,你将比那些将城市建设视为仅仅是计算机技术问题的人领先一步。
接下来,您应该开发出如何以微小,不同的步骤创建该几何体的解决方案。你必须定义组成一个可信赖城市的规则。如果你正在进行3D建模,你必须重新考虑你学到的很多知识,这样计算机就可以在任何情况下都遵循你的指示。
为了不松动,你应该设置很多只负责整个过程中很少部分的操作员。这使得调试,扩展和改进系统变得更加容易。在下一步中,您应该链接这些运算符并通过更改参数来检查结果。
我见过太多“城市生成器”,主要由随机形状的盒子组成,上面有一些窗口纹理:(
答案 8 :(得分:1)
(十多年后……)
过程生成仅表示使用代码来生成数据,而不是手工制作。例如,如果您要生成包含各种树木的森林,则不要手工设计每个树木,因此编码可以更有效地生成变化。
一般来说,有一些规则和一些规则,此外,您还可以添加一些自己的随机性和逻辑,并结合所有这些技术... 任何有点混乱但不太混乱的东西都会产生有趣的结果。
以下是一些值得注意的技术:
一些以程序生成而闻名的游戏: