Affichage de terrain intelligents en Xna à l'aide de la technique BilLOD

Je réalise en ce moment même un article pour la MSDN sur l'affichage de terrains intelligents en Xna à l'aide d'une technique que j'ai "inventé".

Le système fonctionne plutôt pas mal et répond à tous mes besoins. J'en profite donc pour le partager avec vous ici.

Je donnerais l'url de l'article sous peu. Pour l'heure je peux donner les grandes lignes du fonctionnement de cet algo.

Principe :

J'ai tenté de comprendre à quoi correspondait une forme en Xna. Pourquoi est ce ci important de comprendre ça ? Tout simplement parceque la forme est l'élément visuel le plus important d'un terrain. Si on veut pouvoir afficher un terrain de manière intelligente, c'est à dire avec peu de resources en gardant au maximum son aspect il faut comprendre au mieux ce qui le caractérise. La forme est un ensemble de courbes. C'est à dire un ensemble de triangles côtes à côtes qui ne sont pas coplanaires. A partir de là j'ai cherché à comprendre comment on pouvait définir le fait que deux triangles appartiennent à deux plans qui forment un "angle" entre eux. En fait, c'est tout simple : on le déduit à l'aide de leur normale. Quand deux plans ne sont pas parallèles leurs normales forment un angle. Il suffit alors de calculer le produit scalaire de leurs normales (qui donne la force de leur angle) pour déterminer l'intersité de la forme.

Maintenant que je connait l'intensité de la forme, je suis en mesure de déterminer quelles sont les formes le plus caractéristique de mon terrain pour le garder visible et quelles sont celles qui ne sont pas pertinentes pour les supprimer.

J'ajoute à celà un critère primordial : la distance de la forme à la caméra. Une forme peut être non pertinente si vue de loin. Mais à proximité il est important de la voir. Vous pouvez voir le résultat à l'aide de l'image ci-dessous :

A peu près 100 fois moins de ressources prises et le même aspect. Regardez de même ce cône que j'affiche avec ma technique en Wireframe :

On remarque que la ou il y'a une courbe (à la base du cone et au sommet) le nombre de primitive est important. Mais là ou les courbes sont inexistantes (sur le plan principal et sur les coté du cône), le nombre de primitive est réduit au maximum.

L'image suivante explicite encore mieux le fait d'afficher les détails proche de la caméra et réduire les détails à mesure qu'on s'en éloigne :

J'avais placé la caméra au centre de l'écran (là où se trouve un cratère) et j'ai mis en pause l'application de l'algorithme. Le mesh du terrain n'est alors plus modifié. J'ai alors pris de l'altitude pour comtempler le terrain. On voit que près de la caméra les détails sont au maximum et à mesure qu'on s'en éloigne ils se réduisent mais gardent l'aspect du terrain. De cette façon on peut très bien imaginer l'affichage de terrains eloignés avec très peu de détail pour simuler une ligne montagne comme la ligne bleue des vosges :

L'affichage du terrain est alors ultra leger. J'ai appellé cette technique BilLOD, je vous laisse réflechir pouquoi :)

Vous pouvez télécharger le code source ici.

Attention il est en Xna 3.0.

 

A bientôt sur ce blog !

Valentin Billotte

Published Wed, Oct 1 2008 2:50 by valentin

Comments

# re: Affichage de terrain intelligents en Xna à l'aide de la technique BilLOD

Wednesday, October 01, 2008 7:44 AM by Jonathan Dixon

Brilliant work, cant wait to try it out, thanks for your hard work and publishing the code

# re: Affichage de terrain intelligents en Xna à l'aide de la technique BilLOD

Friday, October 03, 2008 3:43 AM by QuanticStorm

Alors attention : BilLOD = Billotte Level Of Details, je pense.

Par contre je voudrais savoir si le LOD que vous avez utilisé dans votre article sur le MRM en XNA repose sur le meme principe que celui du dessus ?

# re: Affichage de terrain intelligents en Xna à l'aide de la technique BilLOD

Friday, October 03, 2008 4:12 AM by valentin

Je dirais plutot qu'il repose sur la même idée : interpreter une forme et son impact visuel.

L'implémentation n'est pas du tout la même par contre.

# re: Affichage de terrain intelligents en Xna à l'aide de la technique BilLOD

Tuesday, October 07, 2008 3:39 PM by Dimfacion

Interessant ...

# re: Affichage de terrain intelligents en Xna à l'aide de la technique BilLOD

Wednesday, October 22, 2008 5:21 AM by Boris B.

J'achète !

# re: Affichage de terrain intelligents en Xna à l'aide de la technique BilLOD

Wednesday, January 14, 2009 4:53 PM by yoyo

Bonjour, il me semble qu'une idée similaire (bien que moins poussée) avait été utilisée pour la réalisation du jeu Far Cry. En effet, il s'agissait uniquement de réduire le nombre de polygones à l'éloignement de la caméra, et d'augmenter le nombre à son approche.

Et sinon super les articles et les tuto. Bonne continuation.

# re: Affichage de terrain intelligents en Xna à l'aide de la technique BilLOD

Friday, January 16, 2009 6:24 AM by valentin

Oui j'ai pu voir les vidéos, j'aimerais bien savoir comment marche leur algo par contre.

# re: Affichage de terrain intelligents en Xna à l'aide de la technique BilLOD

Friday, January 16, 2009 6:55 AM by BILLOD Yves

Trés interessant d'autant plus que je suis géomètre

Leave a Comment

(required) 
(required) 
(optional)
(required) 
If you can't read this number refresh your screen
Enter the numbers above:  
Powered by Community Server (Commercial Edition), by Telligent Systems