Optimisations de l’affichage des meshes

Le level of detail (LOD)

LOD est littéralement le niveau de détail; ce niveau de détail dépend de la distance entre un objet et l'objectif de la caméra. Il s’agit d’avoir plusieurs versions d’un même mesh qui sont des versions simplifiées de ce mesh. Par exemple, si le mesh atteint les 5.000 triangles et qu’il se trouve très loin de la caméra, ce mesh représentera seulement quelques pixels à l'écran, mais les 5000 triangles du mesh seront quand même envoyés à l’affichage. Nous pouvons donc remplacer le mesh original par un mesh similaire mais simplifié. Ce qui fait que les objets les plus éloignés sont rendus avec moins de triangles.

En effet, de toute façon, il n’y a besoin que de quelques pixels pour rendre les objets distants, rendre de tels objets avec un maximum de polygones reviendrait à gaspiller considérablement de la puissance de calcul.

Pour générer des LOD, il existe 2 principales méthodes :

  • les LODs statiques
  • les LODs dynamiques.

Les LOD statiques

Les LODs statiques sont des meshes que le modeleur a créé.
Il y a le mesh original, qui est le plus élevé en nombre de faces et différents niveaux de simplifications de ce mesh qui peuvent aller de 1 à n, suivant la mémoire disponible sur la plateforme cible pour stocker les meshes et leurs LODs. Ensuite, à l’affichage, suivant la distance du mesh par rapport à la caméra courante, on utilise telle ou telle version du mesh ou d’un de ces LODs.

Pour obtenir un résultat crédible il est de plus nécessaire d'avoir une cohérence lors du passage entre les différents modèles. Il est souvent utilisé l’interpolation (du morphing) entre 2 LODs afin de ne pas créer un effet d’apparition/disparition trop brutal lors du changement de niveau de détail d’un mesh.

Avantages de cette méthode:
Le LOD statique nécessite peu de calculs et permet un gain considérable en FPS.

Inconvénients de cette méthode:
Les différents niveaux de détail doivent être créés manuellement par l’infographiste ; Le chargement de l’application prendra plus de temps car il faut stocker en mémoire toutes les versions simplifiées de la mesh.

Il est utile de savoir qu’il existe un programme permettant de créer des modèles avec LODs, sans peine, à partir d’objets 3D complexes (mais statiques !) tels que des buildings ou des véhicules. Cet outil, appelé « The Simplifikator », génère les différentes versions du modèle automatiquement. Le mesh final est donc simplifié, et une seule texture est reconstruite sur base des différentes textures du modèle original. Le modèle original peut posséder n’importe quel nombre de textures, le résultat final possédera toujours une, et une seule, texture (Vous comprendrez, dans le chapitre traitant des textures, à quel point le fait de ne posséder qu’une seule texture pour un modèle est avantageux).
Ce logiciel est disponible à cette adresse : http://iwalkthru.com/simplifikator.html.

Les LODs dynamiques

Il existe aussi des algorithmes utilisables en temps-réel qui en partant d’un mesh original peuvent le simplifier automatiquement en fonction de sa distance avec la caméra courante. Ces algorithmes sont appelés « LODs dynamiques » ou encore « Continuous LOD ».

Avantages de cette méthode:
Le temps de chargement de l’application sera amélioré car, avec les LODs dynamiques, il n’est pas nécessaire de stocker les différentes versions simplifiées du mesh sur la plateforme cible.

Inconvénients de cette méthode:
Les LODs dynamiques sont bien sûr plus gourmands en temps machine car les opérations demandent des calculs complexes ce qui fait énormément chuter le framerate.

Les modificateurs d’optimisation des meshes de 3DsMax

Si vous possédez un maillage que vous désirez optimiser pour le temps-réel, il faut exclure les modificateurs automatiques tels que « Multires » ou « Optimiser », mais préférer plutôt une optimisation manuelle.
Cela vous prendra plus de temps, mais vous serez certain de la validité de votre retouche.

Par exemple, avec le modificateur « Optimiser » de base, Vous remarquerez qu'une fois appliqué ce modificateur n'optimise pas comme on le voudrait, il se contente de supprimer des faces qui lui semblent inutiles, car situées sur des surfaces planes. Pourtant, pour l'animateur, cette perte représente un problème important : il se retrouve avec un personnage plus rigide et forcément moins de liberté lors de l'animatique.

Cependant, ce modificateur peut se révéler parfois utile sur des objets secondaires et fixes. Il faut veiller à l'utiliser avec précaution.

« Multires » est un modificateur au quotient intellectuel identique au modificateur « Optimiser ». Encore une fois, les résultats restent grossiers et peu convaincants.

Les subdivisions spatiales

Une autre technique employée pour optimiser l'affichage temps-réel d'une modélisation est de subdiviser le décor. Lorsque le décor fait 20.000 faces et qu'à un instant donné l'utilisateur ne voit qu’une partie de ce décor, il n'est pas réellement nécessaire d’envoyer au processeur graphique toutes les faces qui ne sont pas affichées.

Généralement, un décor est subdivisé afin de pouvoir être affiché en plusieurs parties, soit de manière automatique dans le moteur, sans intervention artistique, soit il est conçu en pensant chaque pièce comme un élément à part, lorsque le design du décor se prête à cela. Le fait de ne pas afficher des parties de la scène qui ne sont pas visibles à l'écran, soit parce qu'elles sont cachées par d’autres objets ou pas visible ou trop éloignée s'appelle le culling.

 

Introduction au culling

Bien que les méthodes de culling soient employées par les programmeurs, il est important de bien comprendre leur fonctionnement.

En effet, le culling est une des optimisations les plus importantes dans une application 3D car ce que vous apercevez à l’écran n’est généralement qu’une infime partie de la géométrie ; Il est donc inutile de faire calculer tout le reste au hardware…

Il est possible que l’infographiste ait à tenir compte de contraintes imposées par ces différentes méthodes de culling, c’est pourquoi il m’a semblé important de citer et de décrire brièvement celles utilisées le plus couramment :

Le frustrum culling :
technique par laquelle le programmeur va éliminer du rendu les faces ou meshes se trouvant en dehors du champ de vision (frustum) ;

Le backface culling :
technique par laquelle le programmeur va éliminer les faces qui "tournent le dos" à la caméra et que l'on ne voit donc pas ;

L’occlusion culling :
technique par laquelle le programmeur va éliminer du rendu les faces ou meshes cachées par d'autres, et donc invisibles à l'écran ;

Le contribution culling :
technique par laquelle le programmeur va éliminer du rendu les objets qui apparaissent de manière minuscule à l’écran (généralement parce qu’ils sont trop éloignés)

Les imposteurs

Comme vous avez pu le remarquer, en 3D temps réel, il faut continuellement s’efforcer d’obtenir une grande complexité visuelle avec le moins de polygones possible. Pour ce faire, un ensemble de méthodes, regroupées sous le terme d’imposteurs, utilisent une image pré-rendue, appliquée sur une face (seulement deux triangles) ou un ensemble de faces positionné au sein de la scène. De cette manière, à la au place processeur graphique un mesh complexe, on affiche simplement son image : son imposteur.

Par exemple, le rendu réaliste d’un arbre n’est pas facile à obtenir, particulièrement en temps réel. Leur complexité géométrique est particulièrement élevée. En effet, les arbres peuvent être composés de centaines de branches, et plus encore, de milliers de feuilles. La technique standard qui utilise les triangles pour représenter les feuilles ne peut pas être envisagée en temps réel. Car même si seulement deux triangles sont utilisés pour représenter chaque feuille, le nombre de triangles qui devront être rendus sera de l’ordre des 20000-30000, et cela pour un arbre seulement ! Il ne pourrait donc pas être possible d'atteindre des performances acceptables en tempsréel avec quelques arbres, encore moins pour une forêt de plusieurs centaines d'arbres…

La technique du « billboarding »

L’imposteur le plus simple à réaliser est bien sûr le célèbre « billboard » : cette technique consiste simplement créer une face (deux triangles) sur laquelle est plaquée une texture. Cette face, à l’aide de la programmation, va suivre les mouvements de la caméra afin de toujours rester face à elle et donc, face à l’utilisateur.

On utilisera généralement 2 textures, à savoir la texture diffuse (un arbre, une plante ou un nuage par exemple) et sa texture d’opacité. Cependant, il est aussi possible d’utiliser des formats tels que le PNG, TGA ou DDS car ce type de fichier gère la transparence (les différents formats de texture seront décrits plus loin).

Il peut être utile de savoir qu’il existe des sites qui permettent le téléchargement de textures d’arbres déjà détourés et même des logiciels permettant de générer de la végétation et de l’exporter sous forme de « billboards » (par exemple, le logiciel NatFX):

Les « sprites »

Contrairement aux « billboards » qui sont des plans 3D (affichés grâce à Direct3D), sont des rectangles 2D (affichés grâce à DirectDraw) appliqués directement à l’écran.

 

L’emploi des « skyboxes »

Il existe différentes méthodes pour représenter un décor lointain dans une scène 3D temps-réel. Par exemple, les jeux se déroulant en intérieur tels que « Descent » remplissent complètement l'écran grâce au scénario du jeu et évitent ainsi l'affichage d'un décor éloigné. Aussi, le brouillard est souvent utilisé pour faire disparaître les objets lointains, le décor à l’horizon n'étant qu'une seule couleur, celle du brouillard…

Les créateurs de jeux de course, quant à eux, peuvent tricher en utilisant une seule image bitmap qui se déplace de gauche à droite, de bas en haut au fur et à mesure que le joueur se déplace dans le jeu. Cela fonctionne très bien, car l'utilisateur suit un parcours déterminé, sans avoir l'occasion de regarder dans d'autres directions que devant lui... Il ne regardera jamais en direction du ciel. Ces différentes techniques permettent à la scène de sembler moins bidimensionnelle, moins claustrophobique. Mais, si vous désirez créer un jeu ou un univers dans lequel l'utilisateur puisse faire des mouvements sans aucune restriction comme s'il se trouvait dans un monde 3D illimité, vous devez alors créer un fond en 3 dimensions, généralement appelé « skybox ».

Je vous décris ci-dessous la démarche pour créer une « skybox » pour vos environnements 3D temps-réel. Une « skybox » est un cube comportant six images qui entourent le joueur. Les « skybox » sont aussi connues sous le nom de « textures d'environnement ». Le joueur se trouve au centre de cette boite, et il peut voyager librement car il apercevra toujours au loin une partie de cette boite.

Les « skybox » donnent un bon résultat si elles sont créées convenablement. Elles donnent l'illusion à l'utilisateur d'être dans un monde sans limites.Mais cette illusion sera rapidement gâchée si les extrémités de la « skybox » ne coïncident pas correctement ou si vous créez une image avec une mauvaise perspective.

Remarque :

Gardez à l’esprit que seuls les objets que le joueur ne pourra jamais atteindre, tels que le ciel ou des montagnes éloignées sembleront corrects

Les logiciels de modélisation 3D sont une excellente source de « skybox ». Vous pouvez y créer le décor que vous souhaitez avec votre package 3D préféré. Afin de créer la « skybox », il suffit de faire 6 images de cette scène à partir d'un point unique dans l'espace : arrière, gauche, avant, droite, bas, haut. Les images résultantes devraient s'adapter correctement lorsqu'elles sont placées l'une à côté de l'autre dans Adobe Photoshop ou vues dans le moteur 3D. Evidemment, ces six images doivent être de même résolution, par exemple 256x256 pixels. Les limitations du moteur 3D et/ou de la plateforme cible vont déterminer la résolution maximum de la « skybox ». Bien sur, les « skybox » de résolution plus élevée auront meilleure apparence, jusqu'à un certain point, déterminé par la résolution de l'écran de la plateforme cible.

 

Portail du temps-réel
portail de la 3D Temps Réel et Interactive
www.3d-test.com/
All3D
portail de la 3D Temps Réel et Interactive
www.all3D.com/
Gamasutra
The art & business of making games
www.gamasutra.com/
TDT3D
Computer graphics and 3D realtime
www.tdt3d.com/

Copyright © 2007 gogol.ad All rights reserved. Visiteurs uniques:. Pages vues:.
3D temps-réel web3D realtime real time temps réel reel 3DRT 3DTR RT TR directX programmation jeux games 3Dgames exporter exportation skinner rig texturer real-time tps-reel tps reel programmation download liens 3DFX microsoft direct x .x exportation export deep panda exporter opengl acteur virtuel 3DMarkMobile mesh binaire aimation fichier animation bones rigging FFD 3DS max 3DSMAX formats textures pg png tiff tga dds dxtc dxt1 dxt2 dxt3 dxt4 dxt5 SDK mipmapping antialiasing anti-aliasing mip mapping supersamling multisampling multi-sampling filtrage bilinéaire trilinéaire tri-lineaire anisorope aniotrope anisotrope rendu lod statique lod dynamique frustrum backface contribution occlusion culing culling billboard billboarding imposteur skybox skyboxes morphing résolution tileable set alpha sous-objet multi sousobjet sous objet DXT facial rig pré-calculée précalculée biped bones