问题标签 [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.
c# - “随机外观”序列生成器
我想不出一个好的方法来做到这一点,如果可能的话,我会很感激一些帮助!
恐怕我还没有任何代码可以发布,因为我还没有那么远。
我需要从0-999范围内的 3 个(或可能更多)参数生成一系列值。
对于给定的输入,该值必须始终相同,但在上下边界之间具有公平分布,以便显得随机。
例如:
这些必须相当快地生成,我的意思是我应该能够在网页加载期间生成100-200 ,而没有明显的延迟。
该方法必须在 C# 和 JavaScript 中都可以使用,否则我可能会使用 CRC32 或 MD5 哈希算法。
如果有帮助,这将用作程序生成例程的一部分。
我之前曾问过这个问题,但我认为我的解释质量差让我失望。
如果措辞不当,我深表歉意。如果是这样,请告诉我,我会尝试进一步解释。
非常感谢您的帮助。
noise - 单纯形噪声 - 求和
我一直在按照 Nathan Reed在 Programmers.StackExchange 上的要求阅读这篇文章。 经过一番阅读,我偶然发现了一个我真的不明白的段落。谁能用更简单的语言向我解释这一段?(英语不是我的母语)如果你想阅读原文,你可以在“ ”下找到它。Moving from interpolation to summation
单纯形噪声使用来自每个角的贡献的直接总和,其中贡献是梯度斜坡的外推和径向对称衰减函数的乘积。在信号处理方面,这是一个信号重建内核。仔细选择径向衰减,以便每个角的影响在穿过边界到下一个单纯形之前达到零。这意味着单纯形内的点只会受到该特定单纯形角的贡献的影响。
javascript - 在three.js中将高度图应用于SphereGeometry
[编辑:见这个 jsfiddle 的一个活生生的例子加上随附的代码]
使用three.js,我试图渲染出一些具有突出特征的天体。
不幸的是,没有提供关于如何使用 threejs 应用球形高度图的示例,但他们确实有一个将高度图应用于平面的示例。
我举了一个例子并将其修改为使用 aSphereGeometry();
而不是 aPlaneGeometry();
显然,球体的几何形状与平面的几何形状截然不同,在渲染结果时,球体显示为平坦的纹理。
平面的高度图代码:
现在我猜测解决方案相对简单:不是在 for 循环中映射到平面的 2d 坐标,而是必须在 3d 空间中找到球体的表面坐标。不幸的是,我并不是真正的 3d 数学专家,所以我几乎被困在这一点上。
应用于球体的高度图示例和所有代码都放在这个 jsfiddle中。更新的jsfiddle显示了一个改变的球体,但使用随机数据而不是高度图数据。
我知道你可以扭曲球体的 3d 点来生成这些表面细节,但我想使用高度图来做到这一点。据我所知,这个 JSFiddle 会随机改变点以使球体呈现岩石外观,但显然看起来不太自然。
编辑:以下是我希望实现将高度图数据映射到球体所需的逻辑。
为了将数据映射到球体,我们需要将坐标从简单的球坐标系(经度 φ、纬度 θ、半径 r)映射到笛卡尔坐标(x、y、z)。就像在正常的高度映射中 (x, y) 处的数据值映射到 z 一样,我们将 (φ, θ) 处的值映射到 r。这种转变归结为:
参数 Rdefault 和 Rscale 可用于控制球体的大小和其上的高度图。
algorithm - 如何更好地将城市放置在程序生成的地形周围?
我正在制作地形/地图生成器。地形生成工作正常,但是在地形周围放置城市时会出现问题。我根据地形的湿度、温度、土壤质量和地下矿物质含量将城市放置在给定的地形上。自然地,最佳地形将在附近具有次优地形,因此我的城市出现在集群中,就像这样(城市是红点):
我倾向于的解决方案是确定两个城市是否在一定的距离内,如果是,则将其中一个城市移动到远离其他城市的位置。我的问题是:
- 这是分散城市的最佳方法吗?
- 如果是这样,我可以使用什么技术来确定两个城市的距离(我读过最近的邻居搜索,它看起来很有希望,也许是这样)?
editor - 统一3d。在运行前使用参数实例化预制件
我最近开始学习unity3d。
我想在编辑器中程序性地生成一些东西(由树木预制件制成的森林),然后在照明上烘烤。所以这些东西需要在运行前被实例化。
这篇文章很好地展示了如何在运行前生成东西
http://www.scriptocalypse.com/?p=102&cpage=1#comment-258
总而言之,它向您展示了如何将自定义游戏对象添加到游戏对象菜单,以便您可以在运行前实例化它们。
但是你只能得到一个菜单选项来点击。我希望能够对变量进行更多控制,例如设置半径、强度等,然后单击生成按钮。有任何想法吗?
我知道我可以通过更改脚本中的参数来做到这一点,但是从长远来看,我认为像 unity 通常工作方式这样的图形界面最终会更快。
algorithm - 为什么所有 Simplex Noise 算法都有一个排列和梯度表?
我已经尝试实现 Simplex Noise 大约一个月了,我确实理解使用 Simplices 来减少所需的计算量以及梯度方面的安全功率的想法。但是,将其实现为任何语言似乎都是不可能的任务。
在我找到的每一个、每一个、每一个代码、我阅读的资源中,无处不在,代码似乎有一个 G 和一个 P 表。通过一些谷歌搜索和四处询问,我了解到它们是一个排列和梯度表。他们在做什么?为什么我们需要它们?
我目前的想法是排列表只包含随机值,因此不必在运行时计算它们。
例子:
algorithm - 为什么单纯形噪声似乎比经典的 Perlin 噪声具有*更多*伪影?
我阅读了Stefan Gustavson 关于单纯形噪声的优秀论文,其中我被承诺:
单纯形噪声没有明显的方向性伪影
与“经典”柏林噪声形成对比。我兴奋地实现了它,发现事实恰恰相反。我确实在经典噪声中看到了伪影,但我在单纯噪声中看到了至少同样多的伪影,与主轴成 45 度角对齐。当您将噪声映射到阶跃函数时,它们尤其明显。
为了确保我的实现没有问题,我使用了别人的 JavaScript 实现。比较一些图像:
这是一个拥有所有这些的画廊。在最后一张图片中,查找与水平/垂直成 45 度角对齐的边框。他们到处都是。如果需要,我可以突出显示其中的一些,但它们对我来说似乎很明显。(再一次,我在经典的噪声图像中也看到了它们。)
编辑:为了更量化,我采样了 100 万个随机点,对于每个点,我数值计算了经典噪声和单纯噪声的梯度,并获取了投影到 xy 平面上的梯度方向的直方图。如果没有方向性伪影,则图形将是平坦的。但是您可以看到经典噪声和单纯噪声每 45 度出现一次尖峰。
这是单纯形噪声算法的问题吗?它是可以修复的吗?还是只有我认为这是一个问题?
javascript - threeJS程序平面顶点未对齐
我正在使用threeJS 与Simplex 噪声算法相结合来生成50x50 平面的平铺系统。目前,我正在循环 x+y 并添加每个平面。然后我使用 Simplex 噪声算法来计算平面的四个顶点 z 位置。
我使用当前的 x/y 作为左上角的顶点 ([0]),其余的你可以在下面最初生成图块的函数中看到:
好的,这就是循环,然后是 addTile 函数:
(快速说明,我意识到我认为我不需要为每个平面都有一个新的几何图形)
好的,结果如下:
http://i.imgur.com/h4XNEYj.jpg
如您所见,顶点没有对齐。我已经尝试了很多东西,但现在完全被难住了。我很确定我将正确的顶点设置为 TL、TR 等。你能发现为什么顶点没有对齐吗?
谢谢你 :) 杰克
flash - 在动作脚本 2 中处理无限/巨大的世界
如何在动作脚本 2 中以最小的延迟实现无限/巨大的程序生成世界?例如,在像 Terraria 或 Minecraft 这样的游戏中。处理这样的巨大世界的最佳方法是什么?
显然循环遍历每个块并以这种方式移动它们是行不通的。我尝试将块放入 50x50 的“块”中,然后移动每个块,但结果并不像应有的那样平滑。
如果玩家不在附近,有什么方法可以完全禁用地图的某些部分?是否可以简单地将它们存储在内存中并在需要时加载它们?
任何帮助表示赞赏,谢谢!
java - Java 中的二维地形生成器有问题
由于某种原因,这些块一直被渲染在相同的位置。有谁能够帮我?