La génération d'une normal map à partir d'une carte de hauteur?

Je suis en train de travailler sur le plan procédural générer des taches de saleté à l'aide d'randomisés fractales pour un jeu vidéo. J'ai déjà généré une hauteur de la carte en utilisant le milieu algorithme de déplacement et l'a sauvé d'une texture. J'ai quelques idées pour les transformer en une texture de normales, mais certains commentaires seront très appréciés.

Ma hauteur, la texture est actuellement 257 x 257 échelle de gris de l'image (hauteur valeurs sont mises à l'échelle pour des raisons de visibilité):

La génération d'une normal map à partir d'une carte de hauteur?

Ma pensée est que chaque pixel de l'image représente un treillis de coordonner dans un 256 x 256 grille (d'où, pourquoi, il y a 257 x 257 hauteurs). Cela voudrait dire que la normale au niveau de coordonnées (i, j) est déterminée par la hauteur d'au (i, j), (i, j + 1), (i + 1, j) et (i + 1, j + 1) (appelons ces A, B, C, et D, respectivement).

Alors donné les coordonnées 3D de A, B, C, et D, ne serait-il judicieux de:

  1. split quatre en deux triangles ABC et BCD
  2. calculer les normales de ces deux visages, via la croix-produit
  3. divisé en deux triangles ACD et ABD
  4. calculer les normales de ces deux faces
  5. la moyenne des quatre normales

...ou est-il plus facile, que je suis absent?

  • Je ferais les mêmes, sauf que je voudrais utiliser les 4 points (i, j+1), (i+1, j), (i, j-1) et (i-1, j) pour calculer les normales, de sorte que (i, j) est dans le centre d'entre eux. De toute façon, je pense que vous êtes sur la bonne voie 🙂
  • Pour le "plus facile" de la méthode, vous devez savoir quelle est la fonction décrit la hauteur de x,y.. quelque chose comme h = f(x,y), et à partir de là, vous pouvez tirer les normales de la fonction en x,y... à Moins d'avoir cette fonction, votre méthode est le meilleur que vous pouvez faire 😉
InformationsquelleAutor Dawson | 2011-03-12