程序生成最近(由 Spore、MMO 等)引起了关注,它似乎是一种有趣/强大的编程技术。
我的问题是:
- 您知道任何使用程序生成技术的中型项目吗?
- 哪种语言/语言类别最适合程序生成?
- 您可以将程序生成用于“严重”代码吗?(即,不是游戏)
程序生成最近(由 Spore、MMO 等)引起了关注,它似乎是一种有趣/强大的编程技术。
我的问题是:
您可能应该从一些理论和简单的例子开始,例如中点位移算法。如果您对生成图形感兴趣,还应该了解一些关于Perlin Noise的知识。我用它来开始我最后一年的程序生成项目。
分形与程序生成密切相关。
Terragen和SpeedTree将向您展示程序生成的一些惊人的可能性。
过程生成是一种可以在任何语言中使用的技术(它绝对不限于诸如 C 之类的过程语言,因为它可以用于诸如 Java 之类的 OO 语言和诸如 Prolog 之类的逻辑语言中)。对任何语言的递归有很好的理解将加强您对程序生成的掌握。
至于“严肃”或非游戏代码,程序生成技术已用于:
程序内容生成现在都是为 GPU 编写的,因此您需要了解着色器语言。这意味着 GLSL 或 HLSL。这些是分别与 OpenGL 和 DirectX 相关的语言。
虽然由于速度、更容易的学习曲线和Frank D Luna等原因,我个人更喜欢 Dx11 / HLSL,但更多平台支持 OpenGL。
如果您想直接开始编写着色器,而无需花费(大量)时间来设置 OpenGL/DirectX 游戏引擎,您还应该查看 WebGL。
程序内容从噪音开始。
因此,您需要了解 Perlin 噪声(及其继任者Simplex 噪声)。
Shadertoy是学习着色器编程的绝佳参考。我建议您在自己尝试过着色器编码后使用它,因为那里的代码不适用于数学上的娇气,但这就是程序内容的完成方式。
Shadertoy 由程序天才Inigo Quilez创建,他是在 Pixar 工作的演示场景的产物。他有一些实时编码会话的 youtube 视频(很好的例子),我也可以推荐这些。
程序生成在演示场景中大量使用,以在小型可执行文件中创建复杂的图形。Will Wright 甚至说他在制作《孢子》时受到了演示场景的启发。这可能是您最好的起点。
关于这个主题有一本很棒的书:
http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486
它偏向于非实时视觉效果和动画生成,但我想这些理论和想法在这些领域之外是可用的。
值得一提的是,有一个专业的软件包可以实现完整的程序工作流程,称为 SideFX 的 Houdini。您可以使用它来发明和原型化问题的程序解决方案,然后您可以将其转换为代码。
虽然它是一个相当昂贵的软件包,但它有一个免费的评估许可证,可以用作非常好的教育和/或工程工具。
如果您想要一个世界发电机模拟板块构造、侵蚀、雨影等的示例,请查看: https ://github.com/ftomassetti/lands
除此之外,还有一个文明进化模拟器:
https://github.com/ftomassetti/civs
一个充满有趣资源的博客是:
dungeonleague.com/
它现在被放弃了,但你应该阅读它的所有帖子
我不是这方面的专家,但我可以尝试提供一些答案:
NetHack 和它的兄弟是开源的,并且严重依赖于程序生成的关卡(地图)。链接到它的下载。如果您对景观/纹理/云生成更感兴趣,我建议您搜索Gamasutra和GameDev,它们有很多关于这些主题的文章。
AFAIK我认为语言之间没有太大区别。你看到的大部分代码都在 C/CPP 中,因为它仍然是游戏开发者的官方语言,但你可以使用任何你想要的......
好吧,这取决于您是否有可以从此类技术中受益的项目。我看到了军队模拟器中使用的程序生成(它可以被认为是一个游戏,虽然它们不是很可玩:))。
还有一个小提示-我的定义是,如果程序生成是从少量规则或模式以及大量随机性中生成大量数据的任何事物,那么您的结果可能会有所不同:)
(十多年后……)
程序生成仅意味着代码用于生成数据,而不是手工制作。例如,如果您想生成一个包含各种树的森林,您不会手动设计每棵树,因此编码更有效地生成变化。它可能是树图形、大小、结构、位置的生成......
一般来说,有一些规则的某种交互,除此之外你可以添加一些你自己的随机性和逻辑,结合所有这些技术......任何有点混乱但不太混乱的东西都可以产生有趣的结果。
以下是一些值得注意的技术:
一些以其程序生成而闻名的游戏:
关于程序地块生成的视频教程。
游戏程序化内容生成会议,有很多关于该主题的视频:一切程序化
玩得开心。
最重要的是分析道路、城市、街区和建筑物的结构。找出所有例如建筑物的共同点。看看照片、地图、计划和现实。如果你这样做,你将比那些认为城市建设仅仅是计算机技术问题的人领先一步。
接下来,您应该开发解决方案,了解如何以微小、不同的步骤创建该几何图形。您必须定义构成可信城市的规则。如果你喜欢 3D 建模,你必须重新思考你所学的很多东西,这样计算机才能在任何情况下遵循你的指令。
为了不松懈,您应该设置许多只负责整个过程的一小部分的操作员。这使得调试、扩展和改进您的系统变得更加容易。在下一步中,您应该链接这些运算符并通过更改参数来检查结果。
我见过太多“城市生成器”,它们主要由随机形状的盒子组成,上面有一些窗口纹理:(