2012-01-25 25 views
5

私はフラグメントのシェーダで超単純なPerlinノイズクラウドを作成しようとしています。ノイズ関数はhereです。低いオクターブのパーリンノイズを平滑化

低オクターブでは、私の出力は「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

最も簡単な方法は、サーフェス関数で2つのノイズ呼び出しを取り除くことです。ちょうど第1ノイズコールラインを残して、あなたは最初のもののように見える何かを得る:腹筋を(使用してから来るマルチオクターブノイズの

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

シャープなラインを)、腹筋(削除)と交換してくださいノイズ値を二乗するか、または0.5 *(1.0 + cnoise())のようにする(cnoise出力が-1.1の間にある場合)。

はここにいくつかいじっ http://glsl.heroku.com/e#1450.1

+0

おかげイルマリの結果です。私はあなたの解決策を考え、1オクターブのノイズしか使用しませんでしたが、結果は依然としてかなり混乱しているようです。私はまた、黒と白の領域のコントラストがあまり好きではありません。私の理解は、ノイズの追加オクターブを追加すると詳細を追加するだけでなく、結果(http://libnoise.sourceforge.net/tutorials/tutorial4.html#octavesに基づいて)のコントラストを減少させることです。私は合理的なのですか? –

+0

ああ、さて、あなたが今何を意味しているのか分かります。答えを編集しました。 –

+0

素敵な、そのトリックをやった - ありがとう! –

関連する問題