【问题标题】:Smoothing low octave perlin noise平滑低倍频程柏林噪声
【发布时间】:2012-01-25 18:17:33
【问题描述】:

我正在尝试在片段着色器中创建超级简单的 Perlin 噪声云,使用找到的噪声函数 here

在低八度时,我的输出是“blobby”,因为找不到更好的词。我只是想平滑这些斑点区域并获得平滑的噪音,但让它比仅仅一个八度音程更详细一点。

片段着色器:

#ifdef GL_ES
precision mediump float;
#endif

uniform float time;
uniform vec2 resolution;

// Noise related functions go here ..

float surface3 ( vec3 coord ) {
        float frequency = 4.0;
        float n = 0.0;  

        n += 1.0    * abs( cnoise( coord * frequency ) );
        n += 0.5    * abs( cnoise( coord * frequency * 2.0 ) );
        n += 0.25   * abs( cnoise( coord * frequency * 4.0 ) );

        return n;
}

void main( void ) {
        vec2 position = gl_FragCoord.xy / resolution.xy;

        float n = surface3(vec3(position, time * 0.1));

        gl_FragColor = vec4(n, n, n, 1.0);
}

现场示例:
http://glsl.heroku.com/e#1413.0

左边是我目前所拥有的。我怎样才能实现更符合正确图像的内容?

【问题讨论】:

    标签: glsl shader webgl fragment-shader


    【解决方案1】:

    最简单的方法是在表面函数中取出两个噪声调用。只留下第一个噪音呼叫线,你会得到看起来像第一个的东西:

    http://glsl.heroku.com/e#1450.0

    多倍频程噪声中的锐线来自使用 abs(),删除 abs() 并将其替换为对噪声值进行平方或执行类似 0.5*(1.0+cnoise()) 的操作(如果 cnoise 输出为介于 -1..1)。

    这是一些摆弄的结果 http://glsl.heroku.com/e#1450.1

    【讨论】:

    • 谢谢伊尔马里。我考虑了您的解决方案,并且只使用了一个八度音阶的噪音,但结果似乎仍然显得很模糊。我也不太喜欢黑白区域之间的较高对比度。我的理解是,添加额外的八度噪声会增加细节,但也会降低结果的对比度(基于libnoise.sourceforge.net/tutorials/tutorial4.html#octaves),这正是我所追求的。我讲道理吗?
    猜你喜欢
    • 2020-09-02
    • 2021-04-29
    • 2012-01-29
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多