标签: procedural-generation

Perlin Noise详细程度.如何放大景观?

我编写了自己的Perlin Noise实现,效果很好.我可以通过改变频率来"缩放"进出,但随着我放大噪音变得更加平滑和顺畅.

假设我有一个展示大陆的景观.我想放大到一个城市大小的区域(或更近),但仍然有细节.我想我需要在更接近的细节上重新生成景观,但我不确定是否有任何实现可以帮助解决这个问题?

放大了,我看到了大陆和海洋,但我希望在小区域内有大区域.

这是我遇到的问题的一个例子(大陆级别):

alt text http://www.blind-games.com/highlevelnoise.jpg

放大:

alt text http://www.blind-games.com/closeinnoise.jpg

放大地图上的某个区域时,如何才能获得丰富的细节?有涉及哪些技术的例子?

landscape procedural-generation perlin-noise

13
推荐指数
1
解决办法
4180
查看次数

程序声音生成算法?

我希望能够在算法上创造声音(如怪物咆哮,或遥远的雷声.)这不像网上广泛覆盖的更传统的程序内容(地形等)任何人有任何算法如何创造这些声音?

audio procedural-generation

12
推荐指数
2
解决办法
3355
查看次数

为什么单纯形噪声似乎比经典的Perlin噪声具有*更多*伪影?

我阅读了Stefan Gustavson关于单纯噪声的优秀论文,其中我被承诺:

单纯形噪声没有明显的方向伪影

与"经典"佩林噪音形成鲜明对比.我兴奋地实施它,以发现相反的情况似乎是真的.我确实看到了经典噪音中的人工制品,但我看到至少与单轴噪声一样多的伪像,与主轴成45度对齐.将噪声映射到阶跃函数时,它们尤其明显.

为了确保它不是我的实现问题,我使用了别人的JavaScript实现.比较一些图像:

而且这里有一个画廊与他们.在最后一张图像中,查找与水平/垂直方向成45度对齐的边框.他们到处都是.如果需要,我可以突出其中一些,但它们对我来说似乎非常明显.(再次,我也在经典的噪声图像中看到它们.)

编辑:为了更加定量,我采样了100万个随机点,并且对于每个点,我数值计算经典和单纯噪声的梯度,并采用投影到xy平面上的梯度方向的直方图.如果没有方向性伪影,则图形将是平坦的.但你可以看到经典和单纯的噪音每45度就会出现一次峰值.

这是单纯噪声算法的问题吗?这是可以修复的吗?或者我是唯一一个将此视为问题的人?

algorithm procedural-generation noise perlin-noise simplex-noise

12
推荐指数
2
解决办法
5054
查看次数

写了一些perlin噪声类代码,看起来很块

之前回答的问题似乎没有回答我的问题"Blocky"Perlin噪音

我试图尽可能地简化我的代码,使我的代码可读和易懂.

我不使用置换表,而是使用mt19937生成器.

我使用SFML

using namespace std;
using namespace sf;
typedef Vector2f Vec2;
Sprite spr;
Texture tx;
// dot product
float        prod(Vec2 a, Vec2 b)       { return a.x*b.x + a.y*b.y; }
// linear interpolation
float         interp(float start,float end,float coef){return coef*(end-start)+start;}
// get the noise of a certain pixel, giving its relative value vector in the square with [0.0 1.0] values
float getnoise(Vec2&A, Vec2&B, Vec2&C, Vec2&D, Vec2 rel){
    float
    dot_a=prod(A ,Vec2(rel.x   ,rel.y)),
    dot_b=prod(B ,Vec2(rel.x-1 ,rel.y)),
    dot_c=prod(C ,Vec2(rel.x   ,rel.y-1)),
    dot_d=prod(D ,Vec2(rel.x-1 …
Run Code Online (Sandbox Code Playgroud)

c++ procedural-generation noise perlin-noise sfml

12
推荐指数
1
解决办法
2031
查看次数

循环通过描述螺旋的公式来生成XY坐标

我试图以xy(2D)坐标的形式生成一个螺旋星系 - 但数学并不是我的强项.

我从螺旋上的一个优秀来源收集了以下信息:

半径r(t)和角度t与最简单的螺旋,阿基米德的螺旋成比例.因此,等式是:

(3)极坐标方程:r(t)= at [a是常数].
由此得出
(2)参数形式:x(t)= at cos(t),y(t)= at sin(t),
(1)中心方程:x²+y²=a²[arc tan(y/x) ]².

这个问题有点触及了星系的产生,但是反应是分散的,而且仍然过于复杂,因为我需要的东西(也就是说,我的数学愚蠢的头脑无法理解它们).

基本上,我需要做的是在PHP~5000次循环螺旋公式,以在513x513 XY网格上生成点.网格的大小和所需的点数可能在将来发生变化.更好的方法是将这些点与螺旋的原点进行权衡,无论是频率还是偏离精确的数学公式,与星系的实际外观类似.

这篇数学论文讨论了一个描述螺旋星系结构的公式.

完全失去我的是如何将数学公式转换为我可以在PHP中循环的东西!

php procedural-generation fractals fibonacci

11
推荐指数
1
解决办法
2997
查看次数

确保部分连接的有向图连接牢固

上下文

我正在使用程序生成来构建一个3D游戏.我试图连接一些预先生成的房间,无论如何,玩家总能到达地图中的任何其他房间.房间有"可能的入口点",连接走廊必须连接.但是,并非所有入口点都可以从房间内的所有其他入口点到达.例如,可能存在陷阱,因此底部的玩家将无法穿过房间到达顶部,并且必须找到另一种方式.

问题

给定嵌入在3d空间中的一组预先存在的有向图,添加一组最小总长度的(双向)路径,将子图连接成更大的图.如果失败(因为一些研究表明这是NP-Hard),使得路径尽可能短,以便在短时间内计算.

到目前为止工作

我最好的解决方案是基于这个程序生成帖子,他创建了所有节点的Delaney三角剖分.我将房间的每个强连通组件(例如,陷阱的顶层和底层)视为单独的节点,然后构建MST,但这限制了一些更有趣的可能性(例如,必须通过两条单向路径回到你开始的地方).


有谁知道解决这个问题的更好方法?

c# algorithm procedural-generation unity-game-engine

11
推荐指数
1
解决办法
270
查看次数


为游戏地图构建有向图的好策略是什么(在Python中)?

我正在用Python开发一个程序生成的游戏世界.世界的结构将类似于MUD/MUSH范例的房间和出口被安排为有向图(房间是节点,出口是边缘).(注意,这并不一定是一个非循环图,虽然我愿意考虑非周期的解决方案.)

对于世界生成算法,不同种类的房间将通过每个房间的"标签"属性(一组字符串)来区分.一旦它们被实例化,就可以通过标签(单标签,标签交叉,标签联合,最佳候选)来查询和选择房间.

我将使用模板对象和工厂方法的美化系统创建特定类型的房间 - 我不认为细节在这里很重要,因为当前的实现可能会改变以匹配所选择的策略.(例如,可以向房间模板系统添加标签和标签查询.)

举个例子,我会有这些类型的房间:

side_street, main_street, plaza, bar, hotel, restaurant, shop, office

最后,问题是:实例化和安排这些房间以创建可能与给定规则相对应的图表的好策略是什么?

一些规则可能包括:每万人口一个广场; main_street连接plaza; side_street连接到main_streetside_street; hotel赞成main_streetplaza关联,并相应地接收更多标签; 等等

如果建议的策略能够实现数据驱动的实施,则奖励积分.

python graph procedural-generation

9
推荐指数
1
解决办法
1086
查看次数

在六边形内生成随机点以用于程序性游戏内容

我正在使用程序技术为我正在编写的游戏生成图形.

为了生成一些树林,我想在以<0,0>为中心的正六边形区域内随机散布树木.

以统一的方式生成这些点的最佳方法是什么?

language-agnostic random algorithm procedural-generation

9
推荐指数
3
解决办法
3302
查看次数

星系生成算法

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

我一直在玩的C#代码如下; 但我似乎只能让它产生银河系的一个"手臂".

    public Vector3[] GenerateArm(int numOfStars, int numOfArms, float rotation)
    {
        Vector3[] result = new Vector3[numOfStars];
        Random r = new Random();

        float fArmAngle = (float)((360 / numOfArms) % 360);
        float fAngularSpread = 180 / (numOfArms * 2);

        for (int i = 0; i < numOfStars; i++)
        {

            float fR = (float)r.NextDouble() * 64.0f;
            float fQ = ((float)r.NextDouble() * fAngularSpread) * 1;
            float fK = 1;

            float fA = ((float)r.NextDouble() % numOfArms) * fArmAngle;


            float fX = fR …
Run Code Online (Sandbox Code Playgroud)

c# procedural-generation

9
推荐指数
3
解决办法
5352
查看次数