GÉNÉRATEUR DE LIGHTMAPS À PARTIR D'UNE HEIGHTMAP

Signaler
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
-
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39387-generateur-de-lightmaps-a-partir-d-une-heightmap

Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

Super le dessin, très clair là :). Merci :).
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Non non pas d'association entre un pixel et un triangle, comme tu dis, dans une heightmap un pixel serait plutôt un sommet, qui serait commun à 4 triangles voisins.

En nommant axe des X l'axe qui va de gauche à droite de l'image, axe des Y celui qui va de haut en bas et axe des Z celui qui va du "haut" (pixel blanc) au "bas" (pixel noir), l'algo donne ça :
On part d'une image entièrement sombre.

Pour chaque ligne horizontale (i.e. on parcourt en Y)

Pour chaque altitude de départ (i.e. en Z, ce que j'appelle z_origine dans mon code)
(tous les rayons partent du côté gauche de l'image avec une altitude croissante)

Tant que le point en bout de rayon (nommons-le P)n'a pas dépassé la largeur
de l'image (axe des X)
Si jamais P est à la hauteur de ou en dessous du point de l'image survolé
(en même position pour X et Y) alors ce point devient blanc et on passe au rayon suivant.
Fin Si

On incrémente la position du point en bout de rayon en X avec un pas de 1
(i.e. on passe au pixel suivant) et
on décrémente sa position en Z (i.e. il descend en avançant)


Fin Tant que

Fin Pour

Fin Pour

Voilà, donc en gros on peut imaginer ça comme un rayon fait de petits cubes qui évolurait au-dessus d'un voxel, fait de petits cubes...
En illustration ça donnerait ça : http://perso.orange.fr/funto/explication.jpg (représentant une "tranche" horizontale de l'image).

Bon là je pense avoir été assez clair? ^^
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

Intéressant. Mais tu pourrais pas détailler l'algo?

Bon, déjà, c'est clair qu'il fallait partir des pixels :D C'est comme ça que ça marche pour les raytracers aussi, sinon je vois pas comment on peut faire autrement ^^ (d'ailleurs c'est un peu un raytracer en fait). Mais plus techniquement, tu calcules tous les triangles du relief et tu testes les collisions avec un rayon de lumière? T'utilises des octrees alors? Et tu calcules les normales des triangles pour le degré d'éclairage ou pas?

En fait, je vois quand même pas trop trop comment tu associes un pixel à un triangle ... un pixel c'est plus un sommet de trois triangles voisins (ou plus? je sais pas trop comme ça sans réfléchir). Faut moyenniser les vecteurs normaux alors?

Enfin, détaille quoi ;)
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Ok je vois, ton propre format quoi :)
J'avais fait mon propre format aussi, d'ailleurs c'est dans mes sources :p Avec compression RLE, mais si ton truc c'est avec des flottants ça doit pas être possible ^^

Sinon peut-être qu'avec le OpenEXR y'a possibilité d'avoir une + grande résolution...
Afficher les 9 commentaires