问题标签 [simplex-noise]

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 回答
122 浏览

python - 使用 Opennoise 在 Pymunk 中创建地形(形状)

我一直在尝试使用 Opennoise 在 pymunk 中创建具有 2D 地形的游戏。地形坐标为:

y 坐标移动了 +700,因为我使用 pygame 显示所有内容,窗口顶部位于 y = 0 处,底部位于 y = 800 处。

然后我创建一个多边形形状的 pymunk 静态体,并创建一个 pygame 形状来显示地形,如下所示:(pm = pymunk)

pygame 创建的形状看起来正确,但与 pymunk 多边形的形状不匹配,这表明 pymunk 没有创建预期的形状。那么我如何按预期创建 pymunk 形状?

0 投票
0 回答
39 浏览

three.js - 在平面threejs上为各个顶点着色

我想创建一个带有three.js 和单纯形噪声的地形生成器,但我不知道如何根据它们的生物群系为平面上的顶点着色。这是我的代码:

这可行,但我想为各个顶点着色,因为您无法真正看到山脉的位置。如何为平面上的顶点着色?

0 投票
1 回答
58 浏览

shader - SimplexNoise 在 fbm 中重新调整渐变

我需要如何修改我的 fbm 循环中的梯度向量?

问题是我无法使用此代码正确计算法线...它们指向正确的方向,这会导致奇怪的照明。

这里计算法线向量:

编辑: 我稍微改变了正常计算。并去掉了频率。现在看起来还可以。有没有办法插入频率?

更新:

所以现在一切正常,但是当我将频率添加到我的循环时,我再次得到奇怪的照明......

任何人都可以告诉我这里有什么问题吗?

0 投票
0 回答
154 浏览

java - 为什么我的 GLSL 单纯形噪声的质量比在 Java 上运行的要差那么多?

我一直在使用 Simplex Noise 处理无限程序生成的地形。我决定通过将单纯形噪声的代码传输到我的计算着色器来提高其性能。问题是我为 GLSL simplex noise找到的代码比我为 Java simplex noise找到的代码执行得更差。它们都可以正常工作,但 Java 单纯形噪声产生的地形看起来比 GLSL 中的地形更好、更有趣。有没有办法改进我的计算着色器上的 Simplex 噪声算法,或者通过使用 Java 噪声来降低性能速度并获得更好的结果更好?

计算着色器单纯形噪声代码

Java 单纯形噪声代码

两种代码都使用相同的倍频程、频率和幅度来渲染。 Java 单纯形噪声渲染 在此处输入图像描述

GLSL 单纯形噪波渲染 在此处输入图像描述

0 投票
0 回答
83 浏览

java - 有什么方法可以提高我的程序生成代码的性能吗?

我最近一直在从事一个项目,该项目创建程序生成的地形,该地形使用 3d 单纯形噪声以及行进立方体算法。我目前在我的 cpu 上运行它,渲染一个 200x200x200 的地形大约需要 10-20 秒,如果我想让世界变得无限,这不是最佳的。有什么方法可以提高地形渲染的速度,或者这是我能达到的最大速度。(我已经尝试过使用计算着色器,但 GLSL 的限制不允许我追求这个想法。)

地形生成代码

0 投票
1 回答
100 浏览

opengl - 如何在噪点图案中正确调整颜色?

我正在尝试在 GLSL 中编写类似于木材的噪声模式。这是我当前的代码:

在当前状态下,它使我的图案看起来呈红粉色,底部出现了一些奇怪的渐变。我想让粉红色区域变成棕色,而我的图案保持黑色。有人可以展示如何调整我的颜色变量来做到这一点吗?

0 投票
1 回答
464 浏览

processing - 使用 4D OpenSimplex Noise 而不是 2D Perlin Noise 创建循环噪声的目的是什么?

在学习创建循环生成艺术 GIF 的方法时,我遇到了两种不同的制作噪声循环的方法。

  1. Etienne Jacob 在他的教程中的示例代码使用 4D OpenSimplex Noise,如下所示。

    (float)noise.eval(scl * x, scl * y, R * cos(TWO_PI * t), R * sin(TWO_PI * t));

  2. Daniel Shiffman 在他的教程中的示例代码使用了 2D Perlin Noise,如下所示。

    噪声(cos(a) + 1, sin(a) + 1);

戈兰·莱文的作品

我的理解是,两者都通过在上面 gif 的噪声空间中“绕圈行走”来实现循环。但是我不清楚两者之间的区别。选择 4D OpenSimplex 而不是 2D Perlin Noise 来创建循环噪声的目的是什么?

0 投票
0 回答
85 浏览

java - 基于斜率的单纯形噪声中的增益/持久性

我目前正在研究地形引擎,并且正在尝试一些噪音。看看几行代码就能创造出不同的结构、功能和纯粹的想象力,真是令人着迷。最近我看到了这篇文章:http ://squall-digital.com/ProceduralGeneration.html ,我对所有这些技术都非常感兴趣,但尤其是第一个引起了我的注意。程序员使噪声的增益(或持久性)与该点上的噪声斜率成正比。我目前正在努力实现这一目标,但我认为我没有走在正确的轨道上。

我目前正在使用单纯形噪声。我知道这篇文章的作者使用了 Perlin Noise,是的,我已经看到了如何计算 Perlin Noise 的导数,但显然这种实现不会起作用,因为 Perlin 和 Simplex 噪声的生成方式存在根本差异。因此,我开始以自己的方式尝试和近似给定位置上的噪声斜率。

我想出了以下“算法”:

  • 计算相邻噪声点 [(x + 1, z), (x - 1, z), (x, z + 1), (x, z - 1)]。
  • 计算它们各自的噪声值
  • 分别计算x轴和z轴上噪声值的differenceX和differenceZ
  • 从原点创建向量:(2, differenceX, 0) 和 (0, differenceZ, 2)
  • 缩放到长度为 1 的向量
  • 添加得到的单位向量的 y 分量
  • 将此 y 分量用作在给定点处近似的“斜率”。

现在我已经在代码中实现了这个(为了便于理解,我添加了“3D”向量)

现在这让我非常失望和放心,错误的结果:结果

如果这是一种完全错误的近似斜率的好技术,有没有人可以解释我。我不是最大的数学天才,所以我已经很高兴我能弄清楚这一点并且它首先产生了结果。如果有人有与单纯形噪声的导数相关的资源(显然,这将是一个救生员),那将不胜感激!

0 投票
1 回答
160 浏览

godot - Godot - 如何让我的块在玩家周围生成 3 x 3 网格

如何在 3 x 3 网格中生成块,以便场景中始终存在 9 个网格实例?目前,每次玩家移动到新区域/块时,我只生成 1 个块。

为了让你们更容易,我把它放到了一个 github repo 中,你们可以下载并尝试它! https://github.com/Dragon20C/GODOT---Flat-Terrain-Generation

相关代码:

0 投票
0 回答
37 浏览

shader - 在值求和期间没有分支的单纯形噪声

我一直在研究单工噪声的实现,在值求和期间没有分支。

几乎一切都运行顺利,我唯一遇到的问题是由于一些人工制品,可以看到单纯形晶格。这些伪影来自权重的计算方式:开始时,我从着色器手册中获取了一些代码:噪声

带有少量伪影的噪声

带有少量伪影的噪声(当前状态)

夸张的文物

带有夸张伪影的噪音(故意让您可以清楚地看到问题)

这个函数返回每个角的影响,通过使用它作为权重的基础,然后得到它们的平方值以平滑它们,我使用与他的三平面映射技术相同的技巧 sabastian lague 并简单地将它们除以它们的总和。这样我就不必使用五次平滑功能。

这种方法有两个问题:

  • 刚才说的文物。
  • frac函数的使用

为了解决它们(同样,几乎解决了第一个问题),我使用了一个类似于 arduino 的 map 函数的 map 函数(与数组没有任何关系)。

通过手动搜索每个重量的最小值和最大值,我读取了压裂并大大减小了人工制品的大小。但这仍然不够,因为人工制品在地形网格上更加明显。我很确定问题出在我想出的最小值和最大值上。因此,如果你们中的任何人有任何建议或问题来摆脱这些人工制品,请随时发布以下是 HLSL 中的代码: 代码截图

如果您想自己尝试,这里是整个着色器的链接。