标签: procedural-generation

具有脊状分形噪声的程序地形

我实现了双线性插值白噪声,以便在程序上生成地形.

我可以得到这样的结果:

在此输入图像描述

我想实现脊状分形噪声,以获得更逼真的地形,如:

在此输入图像描述

但是我找不到脊状分形噪声的好教程.你能告诉我怎么做吗?

opengl procedural-generation terrain

6
推荐指数
1
解决办法
4983
查看次数

Unity 3D中的程序地形编程

我试图与程序生成相处,我绝对不是团结的专业人士,但我遵循这个指南:点击 并得到一些结果.现在我有两个问题,我有一些基本的想法如何解决它们,但我想听听其他一些意见.

(我已经在Unity答案中发布了这个问题,但是我根本没有回复,如果有一些遗漏的信息或者几句话无法解释,请告诉我或者提供一些如何查找这些信息的建议)

主要问题是:块之间的差距:

在此输入图像描述

如果我会变焦,它们有点消失,但纹理仍然不合适而且非常显着.

第二个,你可以看到我在地面上有红色问题(我真的不知道怎么称呼它).我曾尝试使用指南中的材料,但效果相同.

此外,Perlin Noise(我知道我可以使用Diamond square或simplex)是伪随机算法,所以它会为相同的输入参数返回相同的值,所以它是否意味着我的块总是相同的?

我的代码(我正在使用指南中的LibNoise库):

    void Awake()
    {
        var settings = new TerrainChunkSettings(129, 129, 100, 40, FlatTexture, SteepTexture, TerrainMaterial);
        var noiseProvider = new NoiseProvider();
        for (var i = 0; i < 4; i++)
            for (var j = 0; j < 4; j++)
                new TerrainChunk(settings, noiseProvider, i, j).CreateTerrain();
    }
public class TerrainChunkSettings
{
    public int HeightmapResolution { get; private set; }

    public int AlphamapResolution { get; private set; }

    public int Length { get; private …
Run Code Online (Sandbox Code Playgroud)

c# procedural-generation unity-game-engine perlin-noise

6
推荐指数
1
解决办法
2339
查看次数

HTML5 Canvas:旋转图案填充

作为一个学习项目,我尝试使用 HTML5 画布重新创建 Tiny Wings 中程序生成的山丘。我的目标是生成像这张图片中的山一样的纹理:

小翅膀截图

到目前为止,我已经生成了一个无缝重复纹理。它看起来有点像这样:

程序图像 1

正如您所看到的,这只是其中的一部分,但是在《Tiny Wings》中,正弦曲线图案通常会旋转一定角度。我的问题是:是否可以采用无缝重复的图案,旋转它,然后将其剪裁为矩形,并且仍然具有无缝重复的图案?

我最初认为这是微不足道的,任何剪辑到其原始尺寸的旋转重复图案仍然会重复。然而,我的调查使我相信事实并非如此。

如果我所描述的不可能,我将如何使用我生成的图像的旋转版本作为形状的图案/填充?到目前为止,我能想到的唯一解决方案是使用画布剪辑区域。还有其他方法可以实现此目的吗?

相关问题:

textures image-processing procedural-generation html5-canvas

5
推荐指数
1
解决办法
1800
查看次数

程序生成受约束的景观

我想实现一个程序生成的地形.经过深入研究后,我得出一个结论,它应该采用梯度(相干)噪声生成算法之一,例如Perlin噪声算法.但是,我不希望这一代完全随机.我想应用一些限制(比如应该是山脉,或者应该是低地等).

题:

例如,我有一条代表一些景观元素的曲线.曲线是一系列点.

  • 如何改进Perlin Noise算法,以便沿着此曲线,噪声将具有一个优选的值范围(或者,为简单起见,值为0)?
  • 或者,如果我的纹理是Perlin Noise算法(2d数组)的输出,我怎样才能将其转换为所需的噪声(受曲线影响)?

3d gradient procedural-generation terrain perlin-noise

5
推荐指数
1
解决办法
1445
查看次数

如何在代码中使用Unreal 4 ProceduralMeshComponent类?

我试图找到一些关于如何使用Unreal 4 ProceduralMeshComponents通过代码实现功能的示例或文档.网站上这些类的文档非常稀疏,只提供了它们如何运作的最详细信息:

https://docs.unrealengine.com/latest/INT/BlueprintAPI/Components/ProceduralMesh/index.html

我知道,我知道,他们已经接触过蓝图编辑器,所以我知道我可以在引擎本身使用它们.但是,我想了解流程的确切细节,这意味着我需要通过代码在项目中实现这一点.

此外,我觉得仅通过Blueprint节点使用这些组件限制了使用此强大功能可以完成的工作的范围.

我还搜索了任何示例(在网上或论坛上),但找不到任何不涉及以某种方式使用蓝图的内容.另一个问题是这个功能是最近才引入的,在此之前,Rama(一个出色的虚幻用户)提出了一个允许程序网格生成的类似API.但是现在它已被弃用,并且有许多示例引用该版本.

不要误解我的意思,我不是在这里讨论蓝图.我喜欢这个工具并认为它们是Unreal 4中最好的部分之一.但是出于我的目的,我要求从头到尾完全暴露我的过程.

我将非常感谢您可以共享任何实现Unreal Procedural Mesh类的资源或示例,完全通过代码实现某些效果.

c++ procedural-generation unreal-engine4

5
推荐指数
0
解决办法
4730
查看次数

Unity 5:自动指定网格顶点的三角形列表

有没有一种方法或算法可以自动指定应该如何连接顶点列表?

例如,假设我有这个(为简单起见,以2D表示):

     *(0,0)     *(2,0)

*(-1,-1)   *(1,-1)
Run Code Online (Sandbox Code Playgroud)

所以我按(-1,-1),(0,0),(1,-1),(2,0)的顺序添加顶点,然后将三角形0、1,2和2,1,3,这将生成一个包含两个三角形的网格。

但是,随着顶点数量的增加,定义三角形的过程将变得更加乏味,除非我当然要以某种排序的顺序添加这些顶点,以便我可以跟踪自己是哪个三角形,并且每个都添加一个偏移量时间(我不想做)。

我要去的地方是这个(为简单起见,再次以2D表示):我想定义一个数组,说:

[0,0,1,0,1,0]

[0,0,0,0,0,0]

[0,1,0,1,0,0]

它表示xy平面,并且该数组中的点是顶点(1)或不包含任何点(0)。因此,array [0,0]将为x = 0,y = 0(无),而array [2,1](一个顶点)将为x = 1,y = 2。然后,我想使用它生成一个网格。

这可能吗?任何帮助,将不胜感激。

谢谢

编辑:我知道有一个三角脚本,但它仅适用于2D。

mesh procedural-generation unity-game-engine

5
推荐指数
1
解决办法
2484
查看次数

为什么从Mersenne twister切换到Gradient Noise Generator中的其他PRNG会产生不良结果?

我一直在尝试创建一个广义的渐变噪声生成器(它不使用散列方法来获得渐变).代码如下:

class GradientNoise {
    std::uint64_t m_seed;
    std::uniform_int_distribution<std::uint8_t> distribution;
    const std::array<glm::vec2, 4> vector_choice = {glm::vec2(1.0, 1.0), glm::vec2(-1.0, 1.0), glm::vec2(1.0, -1.0),
                                                    glm::vec2(-1.0, -1.0)};

public:
    GradientNoise(uint64_t seed) {
        m_seed = seed;
        distribution = std::uniform_int_distribution<std::uint8_t>(0, 3);
    }

    // 0 -> 1
    // just passes the value through, origionally was perlin noise activation
    double nonLinearActivationFunction(double value) {
        //return value * value * value * (value * (value * 6.0 - 15.0) + 10.0);
        return value;
    }

    // 0 -> 1
    //cosine interpolation
    double interpolate(double a, …
Run Code Online (Sandbox Code Playgroud)

c++ random procedural-generation noise perlin-noise

5
推荐指数
1
解决办法
521
查看次数

Minecraft加载块的速度

我正在研究体素地形生成器。一切都很好,我有生物群落,街区等。

让我感到震惊的是我团结一致的项目速度。如果我在主线程上运行所有程序,则只能加载并渲染1到2个块,而不会降至70fps以下。这主要是因为块中的每个块都必须检查其邻居以定义其块侧可见性。一个块有6个邻居,一个块有16个块。这很快就进行了很多检查。

我读过《我的世界》是单线程的,但我很难相信,因为它的块加载速度非常快并且没有fps下降。

我的解决方案是在另一个线程上运行块的块邻居的检查。这将大大提高我的fps和我的块加载速度。这是正确的方法吗?我不想使用线程,因为我的代码未优化。这就像将灰尘推到地毯下面。

谢谢阅读

编辑:检查邻居的代码

//Block provides its mesh information
//Check for solidity of adjacent blocks
public virtual MeshData CreateBlockData(Chunk chunk, int x, int y, int z, MeshData meshData)
{
    //Set this to true to turn on collider creation shaped like the chunks
    meshData.useRenderDataForCol = true;

    if (!chunk.GetBlock(x, y + 1, z).IsSolid(Direction.down))
    {
        meshData = FaceDataUp(chunk, x, y, z, meshData);
    }

    if (!chunk.GetBlock(x, y - 1, z).IsSolid(Direction.up))
    {
        meshData = FaceDataDown(chunk, x, y, z, meshData);
    }

    if (!chunk.GetBlock(x, y, …
Run Code Online (Sandbox Code Playgroud)

c# multithreading procedural-generation unity-game-engine minecraft

5
推荐指数
1
解决办法
189
查看次数

关于程序世界生成的问题 - 我只能生成丘陵地形

我一直在尝试使用噪声贴图生成 3D Minecraft 世界,但是无论我如何重叠声音,我都无法获得同时具有平坦区域和山区的噪声贴图。

到目前为止,我尝试重叠不同的噪声贴图,结果各不相同,我最好的结果看起来像这样:https : //imgur.com/0N2x5Ck.png(抱歉,我没把它嵌入这里)

看起来“还可以”,但越靠近,您就越能看到有 2 种不同的噪声波,而且过渡非常粗糙。而整个世界,就是这样的地形,没有什么明显的变化。

我不确定我需要改变噪音的哪个方面。我试过调整音阶、频率,通常只是用我能想到的任何东西来破解它,包括:

  • 发出负面声音 0(有点奏效,每座山之间的空间增加,但这还不够,也无助于混合)
  • 平均不同的噪声贴图(用非常倾斜的渐变制作了一个非常平坦的世界。看起来很糟糕)
  • 上限太高或太低(做了一些高原,但最终仍然没有深远的平坦地面,仍然有岛屿的外观)

到目前为止,我所做的任何事情都没有失败,看起来像培养皿(https://imgur.com/HgNyXUu.png

重申一下,我正在尝试获得最终的噪声图,其中包括:

  • 地势平坦,地势低洼
  • 可以达到中深到深深的平坦洋底
  • 山地地形

都在同一张地图上,很顺利。我该怎么做?

更新:Minecraft 的内置 SimplexOctaveGenerator 似乎没有正确生成八度音程。我用我找到的生成器库(https://github.com/Auburns/FastNoise/)替换了它。八度现在按预期工作,我不再有培养皿的外观,而且我已经获得了一些平坦的陆地和深海。现在所需要的只是山地地形。( https://i.imgur.com/mKIpoaU.png )

java procedural-generation minecraft

5
推荐指数
0
解决办法
125
查看次数

Shadertoy 着色器导入到 libgdx

我到处搜索,但没有参考。我想将这个着色器从 shadertoy 用于我的 libgdx 项目,所以我尝试首先从以下位置导入简单的着色器:https ://www.shadertoy.com/view/XsffRs

我像这样修改了它,但没有成功:

/*
 * Original shader from: https://www.shadertoy.com/view/XsffRs
 */

#ifdef GL_ES
precision mediump float;
#endif

uniform float time;
uniform vec2 resolution;

// shadertoy emulation
#define iTime time
#define iResolution resolution

// --------[ Original ShaderToy begins here ]---------- //
#define TAU 6.28318531
float C,S;

mat2 rot(float a){
    return mat2(C=cos(a),S=sin(a),-S,C);
}

float map(vec3 p) {
    p.yz*=rot(p.z*(.03*sin(iTime*3.)));
    p.xz*=rot(p.z*(.03*cos(iTime*3.)));
    float m=TAU/6.,
    l=length(p.xy),
    a=mod(atan(p.y,p.x)-p.z*.5+iTime*5.,m)-.5*m;
    return length(vec2(a*l,l-2.))-.8;
}


void main(void)
{
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    uv-=.5; …
Run Code Online (Sandbox Code Playgroud)

shader procedural-generation libgdx

5
推荐指数
1
解决办法
187
查看次数