REPRESENTATION VIRTUELLE REALISTE ET ANIMEE

DU SYSTEME SOLAIRE EN VRML


GARCIA Jean-Sébastien

POUGET Laurent

DESS Ingénierie de l'image 1999-2000

 

Présentation

Le système solaire est un espace immense en comparaison à la taille des objets qui le composent. Si nous l'avions modélisé en utilisant une échelle réelle (c'est-à-dire des proportions linéaires), nous n'aurions vu que du noir, avec peut-être pour seul repère le soleil. Les planètes, quant à elles, seraient réduites -- au mieux -- à de simples pixels.

Aussi avons nous décidé d'utiliser une échelle logarithmique. Les Astres sont ainsi tous bien visibles. Nous avons utilisé la formule :

SPSD = SESD x log (10 x PSD / ESD)

où :

* SPSD = distance planète-Soleil avec un facteur d'échelle

* SESD = distance Terre-Soleil à l'échelle (20)

* PSD = distance planète-Soleil réelle

* ESD = distance Terre-Soleil réelle = 1 Unité Astronomique (UA)

Seulement un problème apparaît alors : les trajectoires des satellites entre les planètes adjacentes se croisent. Nous avons donc dû encore une fois utiliser un facteur d'échelle adaptatif (logarithmique également).

Cependant le fait d'utiliser le même facteur d'échelle pour toutes les planètes est aussi problématique, dans le sens où ce sont parfois les satellites d'une même planète qui se touchent. Le facteur dépend donc des dimensions des planètes, ce qui permet de se rapprocher (très grossièrement) les proportions des satellites.

Au fur et à mesure de la modélisation du système solaire, nous nous sommes rendus compte que l'affichage devenait de plus en plus lent et saccadé. Pour avoir un résultat satisfaisant sur les machines de base, nous avons donc choisi de ne modéliser que les satellites principaux (les plus gros) pour chaque planète. De plus compte tenue de la taille relativement petite des satellites conservés, les satellites supplémentaires auraient été difficilement visibles.

Nous avons quand même essayé de représenter un système assez réaliste. Pour cela nous avons tenu compte d’un certain nombre de paramètres physiques réels :

  • inclinaison des orbites par rapport à l'écliptique
  • inclinaison des orbites des satellites par rapport au plan équatorial de leur planète
  • inclinaison des axes de rotation sur elles mêmes des planètes
  • périodes de révolution solaire réelles
  • périodes de rotation des satellites autour de leur planète réelles
  • périodes de révolution planétaires réelles
  • le Soleil parait plus orange quand on s'en approche
  • illumination de l'ensemble par le soleil

Réalisation

Nous avons choisi comme unités de référence celles liées à la Terre :

1 UA = 20 unités de distance VRML

1 jour = 1 unité de temps VRML

Les données physiques ont étés trouvées sur le web [2]

Voici une copie du tableau Excel que nous avons utilisé pour faire nos conversions :

 

Planètes

Rayon réel (km)

Rayon virtuel

UA réel

UA virtuel

année

jour

angle orbite (rad)

angle rotation (rad)

Mercure

2440

0,146

0,39

11,821

88

58,65

0,122

0,000

Venus

6052

0,244

0,72

17,147

225

-243

0,059

3,096

Terre

6378

0,250

1

20,000

365,25

1

0,000

0,409

Mars

3397

0,182

1,5

23,522

687

1,026

0,032

0,440

Jupiter

71492

0,512

5,2

34,320

4330

0,41

0,023

0,055

Saturne

60268

0,494

9,5

39,554

10760

0,45

0,043

0,467

Uranus

25559

0,401

19

45,575

30690

-0,72

0,013

1,708

Neptune

24766

0,397

30

49,542

60200

0,67

0,031

0,517

Pluton

1137

0,063

39

51,821

90800

-6,39

0,299

2,138

Soleil

695000

1,104

0

24,6

Satellites

rayon réel

rayon virtuel

dist. Centre Planète (km)

dist. Virtuelle

révolution (jour)

angle orbite/pl. (°)

en rad

Lune

3476

0,136

390378

0,697

28

5,140

0,090

(Mars)

Phobos

22,2

0,012

12397

0,284

0,32

1,000

0,017

Deimos

6,3

0,003

26397

0,343

1,26

1,800

0,031

(Jupiter)

Io

1821

0,032

493 492

1,021

1,77

0,040

0,001

Europe

1565

0,012

742 000

1,128

3,55

0,470

0,008

Ganymède

2634

0,080

1141000

1,242

7,15

0,190

0,003

Callisto

2403

0,068

1954000

1,383

16,69

0,280

0,005

(Saturne)

{Enceladus}

249

-0,095

298000

0,899

1,37

0,02

0,000

Tethys

530

0,027

355000

0,944

1,89

1,09

0,019

Dione

560

0,033

437000

0,997

2,74

0,02

0,000

Rhea

764

0,063

587000

1,072

4,52

0,35

0,006

Titan

2575

0,183

1282000

1,270

15,95

0,33

0,006

Iapetus

718

0,057

3621000

1,533

79,33

14,72

0,257

(Uranus)

Miranda

236

0,005

155559

0,866

1,41

4,22

0,074

Ariel

581

0,082

216559

0,948

2,52

0

0,000

Umbriel

585

0,083

291559

1,022

4,14

0

0,000

Titania

789

0,108

461559

1,137

8,71

0

0,000

Oberon

761

0,105

608559

1,206

13,46

0

0,000

(Neptune)

Proteus

209

0,024

142766

0,755

1,12

0

0,000

Triton

1353

0,170

379766

0,955

-5,88

157

2,740

Nereid

170

0,007

5537766

1,502

360,13

29

0,506

(Pluton)

Charon

586

0,045

21137

0,142

6,39

98,8

1,724

 

Le schéma qui suit est un graphe de scène, illustrant la hiérarchie entre les différents composant de la scène VRML. Il n'est pas exhaustif, car le graphe complet serait beaucoup trop gros ! Nous ne montrons donc ici que la partie haute du graphe, pour la planète Mars, et pour le vaisseau.

 

 

Utilisation

Le fichier servant à lancer la scène complète est SOLAIRE.WRL, mais nous avons fait différentes versions. Il est donc plus intéressant d'utiliser le lien en bas de cette page.

 

Commentaires

Planètes :

Bien que dans la réalité les planètes soient un peu écrasées au pôles, nous avons modélisé tous les astres par les sphères primitives que propose le VRML. Nous leur avons appliqué des textures photographiques, parfois recolorisée et modifiées par nos soins. La plupart ont été trouvées sur Internet [1].

Les planètes sont toutes calquées sur le même modèle définit par un Prototype (fichier Planete.wrl). Il en est de même pour les satellites (fichier satellite.wrl). Nous avons tout de même un fichier par planète car toutes n'ont pas le même nombre de satellites, et il a fallu les attacher "manuellement".

Une planète est particulière : Saturne. Pour modéliser ses anneaux, nous avons plaqué une texture au format GIF au niveau de son équateur, en utilisant un cube très fortement aplatit (un carré donc) perpendiculaire à l’axe de rotation. Ce format de fichier est intéressant car il permet de rendre des zones transparentes. Ainsi les parties de la texture ne correspondant pas aux anneaux ne sont pas visibles, et on ne voit pas le cube écrasé sur lequel est appliquée la texture.

Nous avons affiché son nom au dessus de chaque planète afin que l'on puisse les reconnaître d'assez loin. Le texte reste constamment horizontal face à l'utilisateur. Pour cela, nous avons utilisé un "Billboard" avec un "axisOfRotation" à "0 0 0" . Comme nous ne voulions pas que le texte soit affecté par l'illumination de la scène, nous lui avons donné une émission propre maximale.

Il est possible de désactiver l'affichage du texte indépendamment pour chaque planète. Pour cela, il suffit de cliquer sur la planète ou sur son nom. Un script Vrml est alors invoqué. Ce dernier joue en fait le rôle d'une bascule, et permet de faire réapparaître le nom de la planète lorsqu'on clique à nouveau dessus.

 

L'une des premières choses que l'on remarque sont les grands cercles concentriques. Ils matérialisent les trajectoires des astres autour du Soleil.

Notre première idée a été de dessiner ces orbites à l'aide de cylindres écrasés dont nous avons ôté les faces supérieures et inférieures. Cependant trois problèmes se sont posés. D'une part le niveau de résolution des primitives VRML est assez faible, et on voyait nettement les droites formant les côtés du cylindre. D'autre part, un cylindre a une hauteur : et on la voit quand on s'approche trop, et si on la choisi très petite, on ne voit plus la trajectoire de loin... Et finalement, le problème le plus grave, c'est que les facettes du cylindre sont orientées, et que seules celles situées vers la caméra sont visibles. Nous avions des "arcs de cylindres".

Nous avons donc décidé de dessiner des cercles avec un "IndexedLineSet". A l'aide d'un tableur, 128 points on étés calculés, correspondant à un cercle de rayon 1. Pour obtenir les différentes orbites, il nous suffit alors de faire un "scale" de la valeur du rayon de cette orbite.

Les orbites des planètes sont tracées d'une couleur plus claire que celle de leur satellites. Le PROTO définissant le cercle (voir fichier cercle.wrl) prend donc en paramètre une couleur.

Afin de faciliter l'observation, une caméra ("Viewpoint") à été "attachée" à chaque planète. Elle est positionné de la même façon par rapport à chaque planète, et nous avons donc utilisé un PROTO, dont le seul paramètre est le nom de la vue à afficher dans le menu 'view' de la visionneuse VRML. (voir fichier Vue.wrl)

Pour réaliser cela, nous avons utilisé le même "TimeSensor" et le même "OrientationInterpolator" que celui servant à faire orbiter la planète à suivre. Une simple translation et une rotation permettent alors de positionner la caméra par rapport au centre de l'astre à suivre. Les déplacements manuels de l'utilisateur gardent alors le mouvement de la planète, et il faut choisir une vue statique si l'on veut pouvoir explorer à sa guise le reste du système.

Lors des tests de mise en place des caméras, nous avions accéléré l'année pour bien mettre en évidence le déplacement. Là, tout marchait parfaitement. Cependant, lorsque nous avons remis les paramètres de temps réels, nous avons observé un décalage gauche-droite de la caméra par rapport à la planète. Nous supposons que c'est un bug VRML ...

Si vous regardez bien (ou si vous écoutez bien ...) vous trouverez un vaisseau spatial extraterrestre en perdition dans notre système solaire, qui virevolte autour du soleil tel un insecte fou... Il est énorme car ses occupants viennent d'une planète à très faible gravité, et ils sont de véritables géants ! :o)

Bon, plus sérieusement, si nous l'avions mis à échelle humaine, personne n'aurait pu le voir.

Le modèle du vaisseau a été récupéré sur le web dans une banque de modèles 3D libres de droits [3]. Nous l'avons converti de son format 3DStudio Max original en un modèle VRML avec 3DSmax v3. Il est assez détaillé, aussi ralentit-il la scène globale de façon sensible. Pour éviter cela, nous aurions pu utiliser des niveaux de détails (LOD) qui peuvent être facilement obtenus avec les fonctions de réduction de polygones que l'on trouve dans de nombreux logiciels de modélisation 3D. Cela aurait été une bonne chose, d'autant plus qu'on est souvent très loin du vaisseau. Cependant nous ne l'avons pas fait car nous avons constaté que lorsqu'on éloignait le point de vue de l'engin, l'animation devenait plus fluide. Cela veut dire que OpenGL, ou Direct3D, intègrent certainement une telle fonction de simplification à leur niveau.

Le déplacement du vaisseau est une combinaison de trois interpolateurs d'orientation, et d'un de position. En choisissant bien les cycles de temps pour chacun d'entre eux, on donne l'apparence d'un mouvement chaotique. Si nous avions déterminé des points clefs d'une trajectoire, celle si aurait été trop répétitive, et de plus, on aurait pas eu l'impression que le vaisseau se déplace dans le sens de sa longueur, mais avec des translations latérales étranges (autrement dit, l'avant ne se trouverait pas toujours devant )

Le bruit des réacteurs venant de la navette à été fait à la bouche ! (normalement il n'y a pas de son dans l'espace, mais ce vaisseau extra-terrestre perd une telle quantité de carburant que la densité des particules perdues porte le son autour de l'engin) C'est donc un son échantillonné, au format WAV. Il est assez court, et est joué en boucle. Comme le permet le VRML, il est également "spatialisé", c'est-à-dire qu'il change en intensité en fonction de la distance de l'observateur, et passe de gauche à droite (ou l'inverse) selon le déplacement.

La musique d'ambiance, quant à elle, est au format MIDI, car c'est le format ayant le meilleur rapport taille / durée. Bien que sa qualité dépende directement du périphérique MIDI de l'utilisateur, c'est le format le plus adapté aux contraintes de temps de transmission sur le web.

 

Problèmes divers rencontrés

Nous avons tenté beaucoup de choses, et certaines n'ont pas marché.

Nous avons par exemple essayé de faire que le nom des planètes n'apparaissent que lorsque le pointeur de la souris se trouve sur la planète. Mais il semble que les scripts VRML aient un comportement étrange, et cela n'a pas fonctionné.

Afin de rendre la navigation d'une planète à l'autre plus agréable, nous avons voulu mettre un frame HTML dans lequel des icônes des planètes contenaient des liens vers les différents ViewPoints VRML. La documentation de CosmoPlayer précise qu'il est tout a fait possible de faire ça, en utilisant le système des ancres HTML, et donne même un exemple. Malgré tous nos efforts, cela n'a pas marché ("page introuvable").

Nous avons alors essayé de créer une applet JAVA contenant des boutons avec les dessins des planètes, qui permettraient de se rendre à celle-ci directement (mais sans animation malheureusement). Cela a très bien marché pour une scène simple, mais des bugs sont apparus lorsque nous avons chargé le système solaire dans son intégralité. En fait, la scène semble être trop lourde a charger, et l'applet, qui cherche a établir un lien, n'y parvient pas. Lorsque par la suite nous ouvrons un nouvelle fenêtre contenant cette même applet, il est arrivé que ça soit celle-ci qui prenne le contrôle de la scène VRML...

Nous avons là, sans aucun doute, affaire à un bug de CosmoPlayer.

De plus, notons que les applets JAVA écrites sont spécifiques à CosmoPlayer. Et nous n'avons aucune garantie quant au fait que l'utilisateur utilise ou pas cette visionneuse. Il faudrait donc un script qui teste le modèle de visionneuse présent, et lancer une applet adaptée à celle-ci ! C'est lourd ...


Références

[1] www.nationalgeographic.com (pour les idées générales)

[2] www.seds.org/nineplanets/nineplanets/ (pour les données physiques)

[3] avalon1.viewpoint.com (pour le vaisseau)


 

Voila à peu près l'essentiel pour les descriptions.....

Maintenant il est temps de passer aux tests

La belle mécanique céleste...