Question

J'ai essayé tant de stratégies différentes pour obtenir une fonction utile de bruit et aucun d'entre eux travaillent. Alors, comment voulez-vous mettre en œuvre Perlin bruit sur une carte graphique ATI en GLSL?

Voici les méthodes que j'ai essayé: Je l'ai essayé de mettre la permutation et des données gradient dans une texture GL_RGBA 1D et appelant la fonction texture1D. Cependant, un appel à ce qui conduit la mise en œuvre de bruit à 12 appels de texture et tue le framerate.

J'ai essayé de télécharger la permutation et des données de gradient dans un tableau de vec4 uniforme, mais le compilateur ne me laisser un élément du tableau, sauf si l'indice est une constante. Par exemple:

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

donnera une erreur de compilation de ceci:

ERREUR: 00h43:. Non pris en charge lorsque l'utilisation tableau temporaire indice indirect

Signification Je ne peux récupérer les données comme ceci:

vec4 a = noise_data[10];

J'ai essayé aussi la programmation du tableau directement dans le shader, mais je suis le même numéro d'index. J'entends les cartes graphiques NVIDIA seront effectivement permettre à cette méthode, mais ATI ne sera pas.

I essayé de faire une fonction qui a renvoyé une spécifique des données codées dur ponctuelles en fonction de l'indice d'entrée, mais la fonction, étant appelé 12 fois et ayant 64 if, fait le temps de liaison insupportable.

ATI ne supporte pas le « construit dans » les fonctions de bruit pour GLSL, et je ne peux pas juste Précalculer le bruit et l'importer comme une texture, parce que je traite Fractales. Cela signifie que je besoin de la précision infinie de calcul du bruit au moment de l'exécution.

La question primordiale est ...

Comment?

Était-ce utile?

La solution

bruit () est bien connu pour ne pas beeing mis en œuvre ...

rouleau que vous possédez:

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

pour un et les valeurs de m, voir wikipedia

Il est pas parfait, mais souvent assez bon.

Autres conseils

Pour une meilleure répartition des valeurs aléatoires je suggère ces très bons articles:

  1. Pseudo Aléatoire Number Generator en GLSL
  2. Lumina bruit GLSL tutoriel

Amusez-vous au hasard !!!

Il y a un projet sur github avec les fonctions de bruit GLSL. Il a à la fois le « classique » et les nouvelles fonctions de bruit dans 2,3 et 4D.

IOS Finalité ont la fonction de noise mis en œuvre.

SimpleX substance de bruit peut faire ce que vous voulez.

Essayez d'ajouter #version 150 à la partie supérieure de votre shader.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top