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 spatialesUne 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
|
All3D
|
Gamasutra
|
TDT3D
|
|