问题标签 [procedural-generation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3580 浏览

performance - 优化 Haskell 中的数值数组性能

我正在为类似 MineCraft 的世界开发地形生成算法。目前,我正在使用基于论文'Simplex Noise Demystified' [PDF]中的实现的单纯形噪声,因为单纯形噪声应该比 Perlin 噪声更快并且具有更少的伪影。这看起来相当不错(见图),但到目前为止它也很慢。

在此处输入图像描述

运行噪声函数 10 次(我需要不同波长的噪声来处理地形高度、温度、树木位置等),每个块(16x16x128 块)的噪声为 3 个八度音程,或调用约 100 万次噪声函数总共需要大约 700-800 毫秒。尽管算法中没有明显的昂贵操作(至少对我而言),但对于以任何不错的速度生成地形来说,这至少是一个数量级太慢了。只是地板,模,一些数组查找和基本算术。下面列出了算法(用 Haskell 编写)。SCC 评论用于分析。我省略了 2D 噪声函数,因为它们的工作方式相同。

对于分析,我使用了以下代码,

这会产生以下信息:

为了比较,我还将算法移植到 C#。那里的性能快了大约 3 到 4 倍,所以我想我一定是做错了什么。但即便如此,它也没有我想要的那么快。所以我的问题是:谁能告诉我是否有任何方法可以加快我的实现和/或一般算法,或者是否有人知道具有更好性能特征但外观相似的不同噪声算法?

更新:

遵循下面提供的一些建议后,代码现在如下所示:

连同将我的块大小减少到 8x8x128,生成新的地形块现在以大约 10-20 fps 的速度发生,这意味着现在四处移动几乎不像以前那样成问题。当然,仍然欢迎任何其他性能改进。

0 投票
1 回答
537 浏览

c# - 直线到曲线

我正在尝试提出一种技术来生成流星陨石坑的高度图。目前我试图保持小而简单,并且有一个简单的算法,其中标记了陨石坑的中心,在其半径内,它周围的像素根据它们与中心的接近程度而着色。

这种方法的问题是它会产生 V 形陨石坑,我需要更多的“U”形结果。我不熟悉正弦波的使用,我觉得插值不会很快起作用,因为流星半径内可能有多少像素。

有什么建议么?

0 投票
2 回答
2600 浏览

c++ - 帮助使用 perlin 噪声库 libnoise

当我使用 x、y 和 z 作为整数调用 libnoise 的 getvalue 函数时,结果总是返回 0。这是正常的吗?当我按照教程http://libnoise.sourceforge.net/tutorials/tutorial2.html尝试1.25、0.75、0.5 时,我得到了 0.686347 的预期结果。具体来说,我已经尝试过使用 20 以下的整数。我只是不明白它是如何工作的吗?

任何帮助是极大的赞赏。

0 投票
3 回答
13720 浏览

terrain - 3d perlin 噪声函数如何用于生成地形?

我可以使用 2D Perlin 噪声函数来生成高度值,但我不明白为什么要使用 3D Perlin 噪声函数。在Notch 的博客中,他提到在 Minecraft 上使用 3D Perlin 噪声函数生成地形。有谁知道如何做到这一点以及为什么会有用?如果您正在传递x,yzvalues ,这是否意味着您已经拥有高度?

0 投票
1 回答
1019 浏览

algorithm - 生成随机点以构建程序线

我想随机生成点。好吧,至少在 y 轴上应该有一个限制。后来我将这些点连接到一条线,这条线应该在一个简单的动画中进行。你可以把它想象成一个醉酒的人随意走动,上坡下坡。

在此处输入图像描述

这听起来很简单。我在网上搜索,发现这可以使用马尔科夫链来完成。我觉得这个想法真的很有趣。

您可以自己创建场景的第一个状态,并将此状态作为输入传递给马尔可夫链算法。该算法随机更改此状态并创建步行。

但是我找不到该算法的任何示例,也没有源代码。我刚刚找到了一个演示马尔可夫链算法的小程序:http: //www.probability.ca/jeff/java/unif.html

请建议一些代码。任何其他如何实现这一点的想法也值得赞赏。

我画了一个例子

在此处输入图像描述

所以我希望这条线以类似的方式进行。有山谷,斜坡......它们是随机的,但随机性仍然适用于线的初始状态。这就是为什么我在这里发现 makrov 链如此有趣:http: //www.suite101.com/content/implementing-markov-chains-a24146

0 投票
4 回答
605 浏览

3d - 哪些语言或方法允许图形和音乐演示适合 64kb 的 EXE?

怎么可能在一个64kb编译的 exe 中,这些程序可以生成如此疯狂的视觉效果,并配有匹配的音乐?

一个例子:Ars Nova By Phantom Lord运行演示的 YouTube 视频

这个程序只有64kb大小!他们是怎么做到的?

他们是否在 DirectX 或类似的东西中使用某种预先存在的对象、着色器等?

他们甚至使用什么语言?这东西有什么指南吗?

0 投票
4 回答
4408 浏览

memory - OpenGL:纹理大小和显存

我正在使用 OpenGL 制作蠕虫风格的位图可破坏地形游戏。我想知道视频内存方面的限制对于世界的大小在哪里。

目前,我对地形使用 512*512 RGBA 纹理块。

  • 非常粗略地说,我可以期望这样一个 512*512 RGBA 纹理占用多少内存?
  • 是否正在进行任何内部自动压缩?
  • 我可以期望大多数用户的计算机有多少视频内存可用?
0 投票
2 回答
346 浏览

c - 使用 ALSA API 播放唱名笔记?

我正在使用Alsa API,我想知道应该将哪些参数传递给函数snd_pcm_writei以简单地播放 solfège 音节/音符(AG / do re mi fa sol la si do)。

谢谢

0 投票
3 回答
6256 浏览

c# - 星系生成算法

Vector我正在尝试生成一组大致模拟螺旋星系的点(由结构表示)。

我一直在玩的 C# 代码如下;但我似乎只能让它生成银河系的一个“手臂”。

0 投票
4 回答
2647 浏览

algorithm - Diamond-Square 算法的平滑问题

我正在使用菱形正方形算法来生成随机地形。它工作得很好,除了我让这些大锥形形状伸出或进入地形。问题似乎是时不时地设置一个点太高或太低。

这是问题的图片
截屏

当我将平滑度设置得很高时可以更好地看到
截图特写

这是我的代码 -