2012-01-25 14 views
5

Intento crear nubes de ruido Perlin súper simples en un sombreador de fragmentos, utilizando la función Noise found here.Alisar ruido de perlas de baja octava

En octavas bajas mi salida es, a falta de una palabra mejor, 'blobby'. Simplemente me gustaría suavizar estas áreas problemáticas y tener un sonido suave, pero tenerlo un poco más detallado que solo una octava.

Fragmento de sombreado:

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

ejemplo vivo:
http://glsl.heroku.com/e#1413.0

izquierda es lo que tengo en este momento. ¿Cómo podría lograr algo más en línea con la imagen correcta?

Respuesta

4

La manera más fácil es eliminar dos de las llamadas de ruido en la función de superficie. Dejar sólo la primera línea de llamada de ruido y se obtiene algo que se parece a la primera:

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

Las afiladas líneas en el ruido de varias octavas se derivan del uso abs(), quite el abs() y reemplazar con ajustar el valor del ruido o haciendo algo como 0.5 * (1.0 + cnoise()) (si la salida cnoise está entre -1..1).

Aquí es el resultado de algún jugueteando http://glsl.heroku.com/e#1450.1

+0

Gracias Ilmari. Consideré tu solución y solo utilicé una octava de ruido, pero el resultado parece ser bastante complicado. Tampoco soy demasiado aficionado al mayor contraste entre las áreas en blanco y negro. Según tengo entendido, agregar octavas de ruido adicionales agrega detalles pero también reduce el contraste en el resultado (basado en http://libnoise.sourceforge.net/tutorials/tutorial4.html#octaves), que es exactamente lo que busco. ¿Estoy siendo razonable? –

+0

Ahh, está bien, veo lo que quieres decir ahora. Editado la respuesta. –

+0

Encantador, eso funcionó - ¡gracias! –