En 3D une Ressource graphique est un élément contenant des données permettant le rendu d’une scène ou d’un objet.
Ces ressources peuvent être :
Mesh : C’est le format du modèle 3D écrit sous la forme de polygones ou points qui définissent son enveloppe visuelle.
Matériau : C’est l’ensemble des propriétés concernant l’aspect visuel d’un objet (réaction à la lumière, couleur, apparence ...)
Le photoréalisme d’un objet 3D est possible grâce à l’utilisation de texture
Texture : C’est un ensemble de pixels 2D que l'on va appliquer sur une surface ou un volume 3D. En simplifiant, on peut l'assimiler à un papier peint très plastique et déformable que l'on applique en 3D en spécifiant la transformation géométrique que subit chaque pixel du papier pour s'appliquer sur l'élément 3D. Le pixel ainsi manipulé en 3D est appelé texel.
Une texture peut être définie de façon analytique par un algorithme (texture procédurale) ou être constituée d'un tableau de pixels (une image bitmap par exemple)
Dans le moteur 3D SCOL, un groupe de ressources correspond à un ensemble de ressources graphiques permettant l’intégration dans une scène d’un groupe d’objets.
Ici "1.appart" est un groupe de ressources contenant toutes les ressources graphiques permettant l’affichage de l’appartement.
Ensemble de meshes constituant un objet
Exemple :
Sur cette image, 72.évier est constitué des mesh : 73.porte_placard_evier , 74.porte_placard_evier et 75.meuble_cuisine_cote.
Un arbre de scène est une structure de données couramment utilisés des applications modernes et les jeux d'ordinateur. La scène graphique est une structure qui organise la logique et la représentation spatiale de la scène graphique.
Un arbre de scène est une collection de noeuds d'un graphe ou d'arbre de structure. Un noeud peut avoir de nombreux enfants, mais un seul parent.
Si une transformation est appliquée au parent alors elle se répercute sur l’ensemble de la hiérarchie en dessous de lui.
Exemple :
Un noeud de scène est un élément de la hiérarchie d’un arbre de scene il peut être un groupe, un objet, une lumière, une caméra ou encore la scène elle-même (la scène le noeud principal de l’arbre).
C’est un noeud de scène vierge c'est-à-dire un repère dans la 3D sur lequel il est parfois pratique de placer d’autres noeuds afin de contrôler en dynamique le graphe de scène.
Ici, le groupe sélectionné dans le Scene Tree est :
Dans l’onglet « Group Resources » on retrouvera ainsi l’ensemble de ses ressources qui pourront ensuite être manipulées.
Ici, le groupe sélectionné dans le Scene Tree est :
Dans l’onglet « Group Meshes» on retrouvera ainsi l’ensemble de ses meshes.
Comme expliqué précédemment, le moteur 3D doit connaître tous les chemins relatifs à la partition SCOL pour pouvoir chargé les différentes ressources nécessaires à l’affichage dans la scène des différents objets 3D composant le groupe.
Il peut arriver dans la construction de la scène 3D de vouloir importer directement un objet sans passer par un XML de scène Ogre.
Ainsi, pour cela il faut savoir que Ogre Max permet d’exporter des fichiers .mesh et des ressources de matériaux (.material)
Pour importer ces données dans la scène 3D ou dans un groupe allez dans l'onglet « arbre de scène » et faites un clic droit sur la scène ou le groupe dans lequel vous souhaitez ajouter l’objet. La procédure d’ajout d’une ressource comporte plusieurs étapes nécessaires et qui doivent être suivies pour le bon déroulement de l’import de l’objet.
1 / Le moteur 3D Ogre doit connaître ou se trouve les ressources qu’il devra charger
Ainsi, dans l’onglet "Resources Directories" il est nécessaire d’ajouter TOUS les chemins (relatifs à la partition SCOL) ou se trouveront les différentes ressources graphiques (.program, .material, textures…)
2 / L’étape suivante consiste à ajouter les ressources graphiques (.program et .material)
Cet outil ouvre la fenêtre de dialogue :
C’est ici que nous devons choisir les différentes ressources (.material, .program)
3 / La dernière étape consiste à ajouter tout simplement le fichier .mesh correspondant à l’objet que l’on souhaite charger dans la scène ou le groupe
Les ressources graphiques ayant été au préalable chargées avec les étapes 1 et 2, l’objet 3D s’affichera au centre de la scène avec toutes ses données material, program et textures.
N.B : Il est possible en affichant l’onglet log de voir si aucun message d’erreur n’a été émis
N.B 2 : Les onglets « Group ressources » et « mesh ressources » permettent de vérifier si nos ressources ont bien été chargées dans le groupe souhaité.
Cette fonctionnalité s’avère importante lorsque l’on souhaite développer un projet conséquent faisant intervenir plusieurs personnes. Ainsi, il est possible d’exporter un group c'est-à-dire l’ensemble des objets 3D et des ressources le constituant mais également l’ensemble des PlugIT et fonctionnalités de ce groupe.
Ainsi, à partir d’une autre scène on pourra importer le groupe directement via l’ajout du .xos correspondant à ce groupe. (cf. Import to Scene)
En 3D, une lumière sert à illuminer la scène.
Une lumière ambiante et unique est définie au niveau de la scène (c’est une intensité globale lumineuse)
Ensuite d’autres type de lumières existent et auront un comportement différent sur le rendu de la scène.
- Les lumières omnidirectionnelles ou ponctuelles :
Ces lumières sont représentables par un point qui permet à l’intensité lumineuse de diffuser dans toutes les directions.
Leur représentation dans le monde physique peut-être l’exemple de l’ampoule.
- Les Lumières directionnelles :
Ces lumières sont représentables par un vecteur définissant leur direction, ainsi une lumière directionnelle est souvent assimilée au soleil car elle correspond à une source lumineuse située à l’infini dont l’intensité nous parvient avec une direction donnée.
- Les Lumières Spot :
Comme leur nom l’indique ces lumières peuvent être assimilées à des ampoules « Spot ».
Ainsi plusieurs paramètres les caractérisent :
1 - Leur ouverture ou spot size qui correspond à un angle de diffusion (le type de lumière omnidirectionnelle est un cas particulier des spots avec une ouverture de 360°)
2 - Leur far clip ou Range est la distance d’éclairement de la lumière. Cette valeur permet de définir la distance à partir de laquelle la lumière n’éclaire plus.
L’atténuation des lumières en 3D est la manière dont l’intensité lumineuse va décroitre en fonction de la distance.
Cette donnée est définie suivant la formule suivante :
Avec d : distance à la lumière
kc : coefficient d'atténuation constant
kl : coefficient d'atténuation linéaire
kq : coefficient d'atténuation quadratique
Par conséquent, suivant la variation de la distance les coefficients seront plus ou moins influents (sauf pour kc qui est une atténuation constante qui définit par conséquent la puissance de l’intensité lumineuse)
"Paramètres d'édition" des lumières dans l'éditeur OpenSpace3D :
Paramètres |
|
1 |
Type de lumière utilisé |
2 |
Couleur diffuse. |
3 |
Couleur spéculaire. |
4 |
Distance jusqu’à laquelle la lumière éclaire. |
5 |
Coefficients d’atténuations Constante de la lumière. |
6 |
Coefficients d’atténuations Linéairede la lumière. |
7 |
Coefficients d’atténuations Quadratique de la lumière. |
8 |
Puissance de la lumière. Cette variable n’est active que si le HDR est activé sur la scène. |
9 |
Ouverture angulaire interne des spots. |
10 |
Ouverture angulaire externe des spots. |
11 |
Active/Désactive l'ombre portée. |
En 3D, une camera est une représentation virtuelle d’une caméra réelle avec des paramètres identiques à une caméra physique.
Ainsi, une caméra 3D est l’oeil de l’utilisateur permettant l’observation et la projection du monde 3D sur un plan 2D représentant l’image observée.
La représentation usuelle s’appelle le « pin hole camera model »
Focal length : La distance Focale d’un objet est définie par la mesure de sa puissance de convergence, elle est liée au système optique car elle définit la puissance de convergence ou de divergence de la lentille du modèle de caméra.
Ainsi, la variation de la distance focale provoque une déformation de l’environnement 3D.
Near Clip and Far clip : Ces deux paramètres correspondent à la zone dans laquelle la camera fera le rendu (Ils définissent le frustrum)
Si un Objet, se trouve au-delà de la distance far clip alors il ne sera pas rendu sur l’image.
De même, si un objet se trouve avant la distance near clip elle ne sera pas rendu sur l’image finale.
Fov Y : Pour Field Of View, qui définit l’angle de vue de la caméra comme indiqué sur le schéma du dessus.
"Paramètres d'édition" des caméras dans l'éditeur OpenSpace3D :
Dans l’edit setting des caméras, on retrouve les différents paramètres permettant de définir le modèle de la caméra utilisée.
Les ombres et l'ombrage représentent un domaine particulièrement actif dans la 3D. L'ombrage est au coeur du réalisme d'une scène 3D. Les ombres résultent d'une interaction entre la lumière et les objets.
Suivant l’environnement et le type de lumière on utilisera l’une ou l’autre des techniques de projection d’ombres.
Les principales méthodes de projection des ombres sont :
- Stencil Shadow Method
Dans le fonctionnement global des stencils Shadow volumes, trois acteurs interviennent:
La lumière
Le Shadow-caster
Le Shadow-receiver
La lumière est en général une source de lumière de type positionnelle ou OMNI. Le Shadow-caster est le lanceur d'ombre: c'est l'objet qui va bloquer la lumière et créer l'ombre proprement dite. Le Shadow-receiver est un objet qui "reçoit" l'ombre, ou plus précisément c'est l'objet (tout ou une partie seulement) qui est privé de lumière.
Les ombres sont dites volumiques tout simplement parce que le Shadow-caster va créer un volume d'ombre dans lequel les objets s'y trouvant ne recevront pas de lumière.
- Texture Shadow Method :
Le principe est assez simple et naturel. En effet qu'est-ce qui fait qu'il y a une ombre sur un objet ?
La réponse est évidente il y a un autre objet (ou lui-même) qui empêche la lumière d'attendre la partie ombrée. Autrement dit, il y a une ombre sur une zone s’il y a un autre objet plus proche de la lumière et qui se trouve sur le chemin du rayon qui aurait dû illuminer notre zone.
Le principe est donc simple et très logique. Au pixel shader on va regarder s'il y a un objet qui se trouve sur le chemin du rayon de lumière et si c'est cas alors la zone est ombrée.
L'algorithme de base va donc se faire en deux étapes.
La première consiste à rendre la scène dans une texture (render target) en prenant pour caméra la lumière. Si on a plusieurs lumières, il faut le faire pour chacune d'entre elles. Lors de se rendu nous ne stockerons en sortie que se dont nous avons besoin à savoir la profondeur.
Dans le cas d'une lumière omnidirectionnelle, tout ceci se complique, il faut passer par un cube map pour avoir la profondeur de tout ce qui est éclairé par la lumière.
La deuxième étape consiste à afficher la scène normalement et de s'occuper de l'ombre au pixel shader.
Le pixel shader a besoin des coordonnées du point dans le repère de la lumière. On a alors tous ce qu'il faut pour savoir si le pixel en cours est ombré ou non. En effet si la profondeur se trouvant dans la texture de profondeur aux coordonnées du pixel en cours est plus petite que celle (dans le repère de la lumière) du pixel en cours alors le pixel est ombré.
"Paramètres d'édition" des ombres dans l'éditeur OpenSpace3D :
Paramètres |
|
1 |
Permet de Choisir le type de technique de la méthode d’ombres (stencil ou texture) |
2 |
Option pour le cas des textures Shadow, permettant une optimisation du calcul des ombres ainsi qu’une plus grand efficacité du calcul d’ombre. |
3 |
Plan d’optimisation X |
4 |
Plan d’optimisation Y |
5 |
Plan d’optimisation Z |
6 |
Plan d’optimisation D |
7 |
Permet de définir la couleur des ombres projetées. |
8 |
Permet de définir une distance à partir de laquelle les objets ne projetteront plus d’ombres (distance Camera/Objet) cela permet d’optimiser les scènes en ne faisant pas de calcul de projection au delà d’une distance donnée. |
9 |
Permet de définir le nombre de texture Shadow qui seront utilisées |
10 |
Définit la résolution de la texture d’ombres donc la résolution de la qualité des ombres. |
11 |
Définit un offset sur le rendu (un offset est un décalage de la texture d’ombre) |
12/13 |
ces paramètres vont définir l’atténuation de l’ombre sur les bords à partir du fade Start jusqu’au fade End ou la projection s’arrêtera. |
14 |
Active l'auto-ombrage. |
15 |
|
16 |
|
N.B : Suivant le type de lumière de la scène la qualité des ombres sera plus ou mieux bien rendu. En effet par exemple, les stencils Shadow fonctionnent très bien avec des lumières de types directionnelles alors que les textures shadow vont bien réagir sur des lumières de types omnidirectionnelles ou spot.
N.B 2 : Il est impossible de définir plusieurs méthodes d’ombres pour une scène
Les fichiers de scène chargés dans openSpace 3d, exportés via Ogre Max sont des fichiers XML comportant les balises de définition des objets, des groupes d’objets mais également des variables de type environnement.
Ces environnements définissent par exemple le type de méthode d’ombres dans la scène ou encore les paramètres de Fog, la couleur de background…
Tout ce qui fait référence à la scène directement.
Ainsi, les skies ou les ciels sont également de ces variables.
Il existe dans Ogre 3 types de Skies :
- Les SkyBoxes : Pour ce type de Sky, le ciel est représenté sous la forme d’une boîte englobant la scène
- Les SkyDomes : Pour ce type de Sky, le ciel est représenté par un dôme
- Les SkyPlanes : Pour ce type de ciel, le ciel est représenté par un plan situé au dessus de la scène 3d.
Le moteur physique utilisé par OpenSpace3D est le moteur Newton.
Une rapide description de ce moteur est disponible en français sur wikipedia :
http://fr.wikipedia.org/wiki/Newton_Game_Dynamics
L’intégration du moteur physique Newton dans OpenSpace3D n’a été que partiellement réalisée. Des fonctionnalités plus avancées arriveront dans une prochaine version d’OpenSpace3D.
Cependant, actuellement OpenSpace3D gère les bases fondamentales permettant de faire de la physique réaliste sur les environnements développés.
World : Il correspond au monde physique associé à une scène (il a une taille et des options de bases telles que la constante gravitationnelle)
Body : Enveloppe physique appliquée sur un objet afin d’optimiser le calcul de collision
Shape : Enveloppe Physique optimisée pour les objets complexes
Collision Tree : Enveloppe de collision exacte sur les objets considérés comme statiques (pas de forces ) mais sensibles à la collision (ex : Murs d’une maison, sol..)
Architecture model : Niveau de précision du modèle qui sera utilisé par le moteur physique pour le calcul de la simulation
Solver model : Niveau de précision pour le calcul du résultat de l’application de force physique sur un objet
Friction model : Niveau de précision pour le calcul du résultat relatif à la friction entre objets.
FrameRate : Rapidité d’actualisation des phénomènes physiques.
Physic material : Matériaux physiques associés à un body. Ex : bois, fer…
Angular Damping : Notion relative au centre de gravité d’un objet.
Contact : Phénomène se produisant lorsque deux objets (associé à des matériaux physiques) se collisionnent entre eux.
N.B : Les valeurs de réactions (élasticity, softness, friction…) à la collision de deux body correspondent à la résultantes du contact entre deux matériaux physiques.
Elasicity : Coefficient d’élasticité entre deux matériaux.
Softness : Coefficient correspondant à l’amortissement du contact.
Thickness : Coefficient correspondant à l’épaisseur du contact.
Static friction : Coefficient de friction statique
Kinetic friction : Coefficient de friction dynamique c'est-à-dire dépendant de la vitesse des objets au moment du contact.
Au niveau de la scène :
Par un clic droit sur la scène (dans le scene Tree) on accède aux configurations générales de la physique au niveau de la scène
Paramètres |
|
1/2/3 |
Options de calcul du moteur physique (cf. Rappels et Définitions) |
1 |
Modèle d'architecture |
2 |
Modèle de solutions |
3 |
Modèle de friction |
4 |
Taille du monde Physique |
5 |
Taux de rafraichissement du monde physique |
6 |
Valeur de la constante gravitationnelle (sur Terre : 9.81) |
7 |
Activation de la physique dans l'application. |
Au niveau des objets :
Par un clic droit un objet de l’arbre de scène : (set Physic) on accède à l a configuration physique d’un objet :
Paramètres |
|
1 |
Type de body appliqué à l’objet |
2 |
Gestion des matériaux physiques : on choisit soit par le menu déroulant des matériaux présents dans la scène ou par un ajout direct par le nom sur quel material physique on applique notre objet |
3 |
Permet d'ajouter un nouveau matériau physique |
4/5 |
Valeurs initiales de la physique sur l’objet : Damping (cf. Rappels et Définitions) |
4 |
Damping angulaire |
5 |
Damping linéaire |
6 |
Masse de l’objet en kg |
7 |
Collision continue |
8 |
Active/désactive la prise en compte de l'objet quand il trouve une équilibre. (Force la physique) |
9 |
Si coché, attente d'un contact avant d'appliquer la physique. |