2012-01-25 113 views
5

我試圖在片段着色器中創建超級簡單的Perlin噪聲雲,使用發現的噪聲函數here平滑低倍頻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

左邊是我的時刻。我如何能夠通過正確的圖像實現更多內聯?

回答

4

最簡單的方法是取出表面函數中的兩個噪聲調用。只留下第一噪聲通話行,你得到的東西看起來像第一個:

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

的銳利線條的多倍頻程噪聲來自使用ABS(),除去ABS()和替換它與平方噪聲值或做0.5 *(1.0 + cnoise())(如果cnoise輸出介於-1..1之間)。

下面是一些擺弄 http://glsl.heroku.com/e#1450.1

+0

感謝ILMARI的結果。我考慮過你的解決方案,只使用一個八度的噪音,但結果似乎仍然顯得相當糟糕。我也不太喜歡黑白區域之間的高對比度。我的理解是添加額外的八度噪音增加了細節,但也減少了結果的對比度(基於http://libnoise.sourceforge.net/tutorials/tutorial4.html#octaves),這正是我所追求的。我是否合理? –

+0

啊,好吧,我明白你的意思了。編輯答案。 –

+0

可愛的,那個伎倆 - 謝謝! –