【问题标题】:How does one get started with procedural generation?如何开始程序生成?
【发布时间】:2010-09-14 09:07:40
【问题描述】:

Procedural generation 最近受到关注(由 Spore、MMO 等),它似乎是一种有趣/强大的编程技术。

我的问题是:

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

【问题讨论】:

标签: procedural-generation


【解决方案1】:

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

Fractals 与程序生成密切相关。

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

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

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

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

【讨论】:

  • 这个 Perlin Noise 看起来很像 Photoshop 的“云”滤镜。
  • 第一个链接坏了
  • 一些电子音乐使用程序生成来创建
【解决方案2】:

程序内容生成维基:

http://pcg.wikidot.com/

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

【讨论】:

  • 我不能在这里复制整个维基!没有“必要部分”。
【解决方案3】:

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

虽然由于速度、更容易的学习曲线和Frank D Luna,我个人更喜欢 Dx11 / HLSL,但更多平台支持 OpenGL。

如果您想直接开始编写着色器,而无需花费(大量)时间来设置 OpenGL/DirectX 游戏引擎,您还应该查看 WebGL。

程序性内容从噪音开始。

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

Shadertoy 是学习着色器编程的绝佳参考。我建议您在自己尝试过着色器编码后使用它,因为那里的代码不适合数学上的娇气,但这就是程序内容的完成方式。

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

【讨论】:

  • 你是什么意思“程序内容生成现在都是为 GPU 编写的”?你只是在谈论草叶之类的东西吗?例如,您不是指为游戏生成地图或城市,对吗?
  • 是的,我认为这里的“全部”评论过于笼统,但在景观生成领域(我猜这是最常见的一种),这是一个有用的答案。虽然我无法想象谁会想在视频中观看某人键入代码。
  • 想学习如何编写复杂代码(例如着色器)或学习如何在设计中利用复杂模式的人。而这只是表面现象。
  • “程序内容生成现在都是为 GPU 编写的,因此您需要了解着色器语言。”完全是不真实的,并且 100% 具有误导性。 (我在做简单的程序生成项目,一生写了0行shader代码)
【解决方案4】:

在演示场景中大量使用过程生成来在小型可执行文件中创建复杂的图形。 Will Wright 甚至说他在制作《孢子》时受到了演示场景的启发。这可能是您最好的起点。

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

【讨论】:

    【解决方案5】:

    有一本关于这个主题的好书:

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

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

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

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

    【讨论】:

      【解决方案6】:

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

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

      https://github.com/ftomassetti/civs

      一个充满有趣资源的博客是:

      地牢联赛.com/

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

      【讨论】:

        【解决方案7】:

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

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

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

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

        还有一点需要注意 - 我的定义是,如果程序生成是从少量规则或模式以及大量随机性生成大量数据的任何事物,那么您的结果可能会有所不同:)

        【讨论】:

          【解决方案8】:

          (十多年后……)

          程序生成仅表示代码用于生成数据,而不是手工制作。例如,如果您想生成一个包含各种树木的森林,您不会手动设计每棵树,因此编码更有效地生成变化。可能是树的图形、大小、结构、位置的生成...

          一般来说,有一些交互与一些规则,除了你可以添加一些你自己的随机性和逻辑,结合所有这些技术... 任何有点混乱但不太混乱的事情都可以产生有趣的结果。

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

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

          关于Procedural Landmass Generation的视频教程。

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

          玩得开心。

          【讨论】:

            【解决方案9】:

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

            接下来,您应该制定解决方案,了解如何以微小、不同的步骤创建几何图形。您必须定义构成可信城市的规则。如果你喜欢 3D 建模,你必须重新思考你所学的很多东西,这样计算机才能在任何情况下按照你的指示进行操作。

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

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

            【讨论】:

              猜你喜欢
              • 2012-05-10
              • 2020-05-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-12-15
              • 2013-09-17
              相关资源
              最近更新 更多