5

ここにある Noise 関数を使用して、フラグメント シェーダーで非常に単純な Perlin ノイズ クラウドを作成しようとしています。

低いオクターブでの出力は、より適切な言葉が必要なため、'blobby' になります。これらのぼんやりした領域を滑らかにしてノイズを滑らかにしたいだけでなく、1 オクターブよりも少し詳細にしたいだけです。

フラグメント シェーダー:

#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

左が今持っているものです。どうすれば、適切な画像とよりインラインで何かを達成できるでしょうか?

4

1 に答える 1

4

最も簡単な方法は、サーフェス関数で 2 つのノイズ コールを取り除くことです。最初のノイズ コール行だけを残すと、最初のようなものが得られます。

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

マルチオクターブ ノイズのシャープな線は、abs() を使用して abs() を削除し、ノイズ値を 2 乗するか、0.5*(1.0+cnoise()) のような処理で置き換えます (cnoise 出力が -1 の場合) ..1)。

これがいくつかのいじりの結果です http://glsl.heroku.com/e#1450.1

于 2012-01-27T15:19:17.347 に答える