问题标签 [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.
performance - 优化 Haskell 中的数值数组性能
我正在为类似 MineCraft 的世界开发地形生成算法。目前,我正在使用基于论文'Simplex Noise Demystified' [PDF]中的实现的单纯形噪声,因为单纯形噪声应该比 Perlin 噪声更快并且具有更少的伪影。这看起来相当不错(见图),但到目前为止它也很慢。
运行噪声函数 10 次(我需要不同波长的噪声来处理地形高度、温度、树木位置等),每个块(16x16x128 块)的噪声为 3 个八度音程,或调用约 100 万次噪声函数总共需要大约 700-800 毫秒。尽管算法中没有明显的昂贵操作(至少对我而言),但对于以任何不错的速度生成地形来说,这至少是一个数量级太慢了。只是地板,模,一些数组查找和基本算术。下面列出了算法(用 Haskell 编写)。SCC 评论用于分析。我省略了 2D 噪声函数,因为它们的工作方式相同。
对于分析,我使用了以下代码,
这会产生以下信息:
为了比较,我还将算法移植到 C#。那里的性能快了大约 3 到 4 倍,所以我想我一定是做错了什么。但即便如此,它也没有我想要的那么快。所以我的问题是:谁能告诉我是否有任何方法可以加快我的实现和/或一般算法,或者是否有人知道具有更好性能特征但外观相似的不同噪声算法?
更新:
遵循下面提供的一些建议后,代码现在如下所示:
连同将我的块大小减少到 8x8x128,生成新的地形块现在以大约 10-20 fps 的速度发生,这意味着现在四处移动几乎不像以前那样成问题。当然,仍然欢迎任何其他性能改进。
c# - 直线到曲线
我正在尝试提出一种技术来生成流星陨石坑的高度图。目前我试图保持小而简单,并且有一个简单的算法,其中标记了陨石坑的中心,在其半径内,它周围的像素根据它们与中心的接近程度而着色。
这种方法的问题是它会产生 V 形陨石坑,我需要更多的“U”形结果。我不熟悉正弦波的使用,我觉得插值不会很快起作用,因为流星半径内可能有多少像素。
有什么建议么?
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 以下的整数。我只是不明白它是如何工作的吗?
任何帮助是极大的赞赏。
terrain - 3d perlin 噪声函数如何用于生成地形?
我可以使用 2D Perlin 噪声函数来生成高度值,但我不明白为什么要使用 3D Perlin 噪声函数。在Notch 的博客中,他提到在 Minecraft 上使用 3D Perlin 噪声函数生成地形。有谁知道如何做到这一点以及为什么会有用?如果您正在传递x
,y
和z
values ,这是否意味着您已经拥有高度?
algorithm - 生成随机点以构建程序线
我想随机生成点。好吧,至少在 y 轴上应该有一个限制。后来我将这些点连接到一条线,这条线应该在一个简单的动画中进行。你可以把它想象成一个醉酒的人随意走动,上坡下坡。
这听起来很简单。我在网上搜索,发现这可以使用马尔科夫链来完成。我觉得这个想法真的很有趣。
您可以自己创建场景的第一个状态,并将此状态作为输入传递给马尔可夫链算法。该算法随机更改此状态并创建步行。
但是我找不到该算法的任何示例,也没有源代码。我刚刚找到了一个演示马尔可夫链算法的小程序:http: //www.probability.ca/jeff/java/unif.html
请建议一些代码。任何其他如何实现这一点的想法也值得赞赏。
我画了一个例子
所以我希望这条线以类似的方式进行。有山谷,斜坡......它们是随机的,但随机性仍然适用于线的初始状态。这就是为什么我在这里发现 makrov 链如此有趣:http: //www.suite101.com/content/implementing-markov-chains-a24146
3d - 哪些语言或方法允许图形和音乐演示适合 64kb 的 EXE?
怎么可能在一个64kb编译的 exe 中,这些程序可以生成如此疯狂的视觉效果,并配有匹配的音乐?
一个例子:Ars Nova By Phantom Lord(运行演示的 YouTube 视频)
这个程序只有64kb大小!他们是怎么做到的?
他们是否在 DirectX 或类似的东西中使用某种预先存在的对象、着色器等?
他们甚至使用什么语言?这东西有什么指南吗?
编辑:另一个令人兴奋的演示。如何?
http://www.scene.org/file.php?file=/demos/groups/farb-rausch/fr08_final.zip&fileinfo
编辑:更多演示场景。
我找到了一些链接到一个制作此类东西的小组,他们发布了一个名为 .werkkzeug1 的产品以及一些压缩和音频工具,但我仍然无法弄清楚它是如何实现的。他们甚至用 96kb 制作了一个游戏。
memory - OpenGL:纹理大小和显存
我正在使用 OpenGL 制作蠕虫风格的位图可破坏地形游戏。我想知道视频内存方面的限制对于世界的大小在哪里。
目前,我对地形使用 512*512 RGBA 纹理块。
- 非常粗略地说,我可以期望这样一个 512*512 RGBA 纹理占用多少内存?
- 是否正在进行任何内部自动压缩?
- 我可以期望大多数用户的计算机有多少视频内存可用?
c - 使用 ALSA API 播放唱名笔记?
我正在使用Alsa API,我想知道应该将哪些参数传递给函数snd_pcm_writei以简单地播放 solfège 音节/音符(AG / do re mi fa sol la si do)。
谢谢
c# - 星系生成算法
Vector
我正在尝试生成一组大致模拟螺旋星系的点(由结构表示)。
我一直在玩的 C# 代码如下;但我似乎只能让它生成银河系的一个“手臂”。
algorithm - Diamond-Square 算法的平滑问题
我正在使用菱形正方形算法来生成随机地形。它工作得很好,除了我让这些大锥形形状伸出或进入地形。问题似乎是时不时地设置一个点太高或太低。
这是问题的图片
当我将平滑度设置得很高时可以更好地看到
这是我的代码 -