2012-01-25 11 views
5

Próbuję utworzyć super proste chmury szumu Perlina w module cieniowania fragmentów, używając funkcji szumów, która została znaleziona here.Wygładzanie niskiego oktawy hałas

W niskich oktawach moje wyniki są, z braku lepszego słowa, "blobby". Chciałbym po prostu wygładzić te nierówne obszary i uzyskać płynny dźwięk, ale mam go trochę bardziej szczegółowy niż tylko oktawę.

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

żywo przykład:
http://glsl.heroku.com/e#1413.0

Lewy jest to, co mam w tej chwili. Jak byłbym w stanie osiągnąć coś więcej z właściwym obrazem?

Odpowiedz

4

Najprostszym sposobem jest usunięcie dwóch wywołań szumu w funkcji powierzchni. Pozostawić tylko pierwszą linię wywołania hałasu i masz coś, co wygląda jak pierwszy:

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

SHARP linie hałasu multi-oktawy pochodzą z użyciem ABS(), usunąć abs() i zastąpić to z wyrównaniem wartości szumu lub zrobieniem czegoś podobnego do 0.5 * (1.0 + cnoise()) (jeśli wynik cnoise wynosi pomiędzy -1..1).

Oto wynikiem jakiegoś błahy http://glsl.heroku.com/e#1450.1

+0

Dzięki Ilmari. Rozważyłem twoje rozwiązanie i używałem tylko jednej oktawy szumu, ale wynik wciąż wydaje się dość nieubłagany. Nie lubię też większego kontrastu między czarnymi i białymi obszarami. Rozumiem, że dodanie dodatkowych oktaw szumu dodaje szczegółów, ale także zmniejsza kontrast w wyniku (na podstawie http://libnoise.sourceforge.net/tutorials/tutorial4.html#octaves), co jest dokładnie tym, czego szukam. Czy jestem rozsądny? –

+0

Ahh, w porządku, teraz rozumiem, co masz na myśli. Edytowano odpowiedź. –

+0

Cudownie, udało się - dzięki! –