平滑低倍频程柏林噪声

发布于 2024-12-29 03:26:03 字数 1178 浏览 2 评论 0原文

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

在低八度时,我的输出是,因为缺乏更好的词,“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

左边是我现在拥有的。我怎样才能实现与正确图像更一致的东西?

I'm trying to create super simple Perlin noise clouds in a fragment shader, using the Noise function found here.

At low octaves my output is, for want of a better word, 'blobby'. I'd simply like to smooth out these blobby areas and have smooth noise but have it a little more detailed than just one octave.

Fragment shader:

#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);
}

Live example:
http://glsl.heroku.com/e#1413.0


Left is what I have at the moment. How would I be able to achieve something more inline with the right image?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海风掠过北极光 2025-01-05 03:26:03

最简单的方法是去掉表面函数中的两个噪声调用。只保留第一个噪音呼叫线,您会得到类似于第一个的内容:

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

多八度噪声中的尖锐线条来自使用abs(),删除abs()并将其替换为噪声值的平方或执行类似的操作0.5*(1.0+cnoise())(如果 cnoise 输出在 -1..1 之间)。

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

The easiest way is to take out two of the noise calls in the surface function. Leave just the first noise call line and you get something that looks like the first one:

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

The sharp lines in the multi-octave noise come from using abs(), remove the abs() and replace it with squaring the noise value or doing something like 0.5*(1.0+cnoise()) (if cnoise output is between -1..1).

Here's the result of some fiddling
http://glsl.heroku.com/e#1450.1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文