Pregunta

He intentado muchas estrategias diferentes para obtener una función de ruido utilizable y ninguno de ellos trabajo. Entonces, ¿cómo se implementa perlin ruido en una tarjeta gráfica ATI en GLSL?

Estos son los métodos que he intentado: He intentado poner la permutación y datos gradiente en una textura GL_RGBA 1D y llamar a la función texture1D. Sin embargo, una llamada a este ruido de implementación conduce a 12 llamadas textura y mata a la tasa de fotogramas.

He tratado de subir la permutación y datos de gradiente en una matriz uniforme vec4, pero el compilador no me deja consigo un elemento de la matriz a menos que el índice es una constante. Por ejemplo:

int i = 10;
vec4 a = noise_data[i];

dará un error de compilación de esto:

ERROR: doce y cuarenta y tres:. No soportado cuando el uso de matriz de índice indirecto temporal

Significado sólo puedo recuperar los datos de la siguiente manera:

vec4 a = noise_data[10];

También probé la programación de la matriz directamente en el shader, pero tengo el mismo problema índice. Escucho tarjetas gráficas NVIDIA realmente permitirán este método, pero no lo hará ATI.

I intentado hacer una función que devuelve un específico datos codificados duro punto dependiendo del índice de entrada, pero la función, siendo llamado 12 veces y tener 64 si las declaraciones, hizo que el tiempo que une insoportable.

ATI no soporta el "construido en" funciones de ruido para GLSL, y no puedo acaba de calcular previamente el ruido y la importación como una textura, porque yo estoy tratando con fractales. Esto significa que necesitan la precisión infinita de calcular el ruido en tiempo de ejecución.

Así que la pregunta principal es ...

¿Cómo?

¿Fue útil?

Solución

ruido () es bien conocido por no beeing implementado ...

rollo es el propietario:

int c;
int Xn;
srand(int x, int y, int width){// in pixel
    c = x+y*width;
};

int rand(){
    Xn = (a*Xn+c)%m;
    return Xn;
}

para A y m valores, ver Wikipedia

No es perfecto, pero a menudo lo suficientemente bueno.

Otros consejos

Para una mejor distribución de los valores aleatorios sugiero estos artículos muy buenos:

  1. Pseudo Aleatorio Generador de Números en GLSL
  2. Lumina ruido GLSL tutorial

Diviértete al azar !!!

Hay un proyecto en github con funciones de ruido GLSL. Tiene dos funciones del "clásico" y más recientes de ruido en 2,3, y 4D.

IOS hace ha implementado la función noise.

Esta href="http://webstaff.itn.liu.se/~stegu/simplexnoise/" rel="nofollow noreferrer"> simplex materia de ruido

Trate de añadir #version 150 a la parte superior de sombreado.

scroll top