Didacticiel Sketchyphysics
par Laurent Lescop
Moteur Physique pour Sketchup
(Page de référence en anglais : http://code.google.com/p/sketchyphysics/wiki/Docs)
Page de téléchargement du moteur physique :
http://code.google.com/p/sketchyphysics/downloads/list.
Avant propos : les moteurs physiques trouvent de plus en plus leur place dans les applications 3D. On les trouvera dans 3Dsmax (reactor), Blender (Bullit) et maintenant ici Sketchup (Newton). L’utilisation du moteur physique permet d’approcher le comportement « réel » des objets soumis à des contraintes de gravité, de déplacements contrôlés ou de chocs et ce en fonction de caractéristiques propres : poids, élasticité, dureté. Le résultat attendu relève de la simulation physique, ce qui peut différer de ce qu’un animateur peut attendre, à savoir une interprétation du mouvement.
Sketchup met toute les qualités de son ergonomie et de sa relative facilité de prise en main pour offrir à l’utilisateur un outil de simulation physique puissant et rapide. En effet, la rapidité de la résolution des solutions mises par l’utilisateur est déterminante pour le confort d’usage.
Partie 1 : les bases
Après installation de l’application SetupSketchyPhysics2b1-Jan14.exe, on trouvera à l’ouverture de Sketchup de nouveaux onglets et menus :
Simulation
Le premier bouton démarre et met en pause les simulations, le second réinitialise les solutions. Le bouton UI lance une boite de dialogue contenant les attributs des objets.
Lors de la simulation, il est possible d’intervenir sur les objets en appuyant sur le bouton gauche (BG) de la souris. MAJ + BG permet de déplacer les objets de bas en haut.
Création
N’importe quelle forme peut devenir un « objet physique » pour peu qu’elle soit assemblée en groupe. Sinon il existe des primitives élémentaires que l’on va trouver ici :
On notera l’importance de la primitive « solid floor » (sol solide) importante pour créer un support sur lequel se dérouleront les simulations. Sans le sol, les objets tombent.
Attention : comme dans toute opération d’animation ou de simulation, le changement d’échelle peut engendrer des erreurs ou des comportements étranges. A éviter.
Par le bouton droit de la souris (BD) il est possible de préciser la géométrie que va calculer le moteur physique, cette géométrie pouvant être différente de la forme propre de l’objet. Ainsi une sphère pourra-t-elle approximée par un cube (pour des résultats plus rapides). L’option « Convex Hull » (coque convexe) permet de « draper » un objet afin d’en approcher la géométrie lorsque celle-ci est complexe.
L’option « Static Mesh » (maillage statique) rend l’objet immobile. Il n’est plus considéré comme un objet dynamique.
Les attributs des objets
Par bouton droit (BD) on peut affecter des attributs à des objets
»Frozen » (gelé), l’objet ne peut pas bouger tant qu’il n’a pas été touché par un autre objet. Cela servira à mettre en place les scènes. « Static » (statique), l’objet ne bougera pas et se comportera comme un objet solide. « Ignore » (ignorer), préserve l’objet des collisions. Un nouvel attribut « NoCollision » verra bientôt le jour apportant des nuances à l’attribut Ignore.
Les joints
Les joints sont les objets non géométriques articulant les géométries entre elles.
On trouvera dans l’ordre de la palette :
« Hinge » (charnière). La charnière est le joint que l’on utilise le plus, il crée les systèmes articulés et les systèmes à rotations, comme les roues.
« Slider » (glissière). La glissière fait bouger un objet comme sur un rail.
« Corkscrew » (Tire-bouchon). Le tire-bouchon est la combinaison de la glissière et de la charnière.
« Spring » (ressort). Le ressort fonctionne comme une glissière, mais l’objet revient à sa position initiale (avec un effet de rebond).
« Universal joint » (jointure universelle). La jointure universelle fonctionne comme deux glissières à angle droit. Les résultats peuvent être instables.
« Ball joint » (joint boule). Le joint boule (comme une boule de caravane) permet à l’objet de bouger librement autour d’un point. Ce joint est également instable s’il est sollicité trop fortement.
Les quatre derniers joints « Servo », « Piston », « Motor » et « Gyro » seront décrits un peu plus loin.
Les joints hinge, Slider, Servo, Piston et Motor sont des joints contrôlables.
Mise en place simple
Mise en place d’un objet géométrique et d’un joint commandant le comportement de cet objet.
Slider
Créer une boite et créer un « slider » sur le dessus de cette boite.
1. Cliquer sur le « joint Connection Tool » (JTC, outil de connexion de joint) . Une fois le JTC activé, cliquer sur la boite
2. Maintenir la touche contrôle (CTRL) enfoncée, cliquer sur le Slider
La boite est connectée au Slider. Le déplacement de la boite est maintenant conditionnée par les paramètres du Slider. Le tester en cliquant sur le bouton « Play/Pause » et pour rétablir l’état d’origine.
En cliquant sur le bouton « UI », on accède à une interface de contrôle des objets de la scène. Cliquer sur le Slider et observer les valeur Min et Max. Elles donnent la valeur de l’amplitude du mouvement. Par defaut c’est la longueur du Slider.
Si l’on place un nom dans la case « controler », on voit apparaitre lors de la simulation un panneau de contrôle doté d’une glissière permettant d’animer le mouvent du cube de façon très précise. Cette fonction servira par la suite constament afin d’avoir un contrôle exact des actions à imprimer aux objets. Il sera même possible de piloter les actions via un joystick.
Charnière entre deux solides
Voici deux façon de lier deux solides entre eux avec une charnière. La première consiste à utiliser un groupe pré-paramétré. Cliquer sur l’icône pour créer un premier block puis recommencer la manœuvre en démarrant scrupuleusement à l’angle de l’objet venant juste d’être créé. On constitue ainsi un petit ensemble articulé (un peu comme un serpent).
On remarque que les solides d’interpénètrent. On retiendra cette méthode pour faire des cordes ou tout objet demandant une grande souplesse.
Créer maintenant deux boites et placer une Charnière « Hinge » à l’intersection.
Lier la première boite à la charnière :
- Cliquer sur le « joint Connection Tool » (JTC, outil de connexion de joint) . Une fois le JTC activé, cliquer sur la boite
2. Maintenir la touche contrôle (CTRL) enfoncée, cliquer sur la charnière -> la première boite pivote maintenant autour de l’axe donné par la charnière
3. Répéter l’opération avec la deuxième boite -> les deux boites pivotent autour de la charnière sans interpénétrations.
4. Si l’on déclare l’une des boites comme « static » elle se comportera comme un pan de mur, alors que l’autre boite se comportera comme une porte.
La question de l’enveloppe de simulation
L’enveloppe de simulation (« shape Physics »)va déterminer la manière dont l’objet va se comporter. Par défaut, l’enveloppe de simulation d’un cube, sera un cube, une sphère pour une spère et un cylindre pour un cylindre. Les choses se compliquent lorsque la forme est convexe ou possède des trous ou un certain nombre de reliefs.
On peut visualiser la forme de l’enveloppe de simulation en cliquant sur la fonction « readback collision geometry », accessible en cliquant sur le modèle avec le bouton droit (BD)
Pour une forme telle que cette sphère munie de picots, l’enveloppe de déformation se présente ainsi : on voit que la sphère englobante ne prend pas toute la forme.
Le logiciel se débrouille pour approcher au mieux l’enveloppe. Une option permet toutefois de disposer autrement. Par exemple, pour des raisons de rapidité de calcul, on pourra préférer envelopper une forme d’une géométrie plus simple afin d’accelérer les calculs.
Par défaut on a « box » (boite), « sphere » (sphère), « cylinder » (cylindre), « cone » (cône), « capsule » (capsule), « chamber » (ventricule) et « convexhull » (coque convexe).
Pour des formes complexes, on va plutôt chercher à les envelopper avec une coque convexe, comme pour le polyèdre ci-dessous.
Les objets creux
Un trou ne sera pas pris en compte dans la simulation, si l’on veux faire une chaine par exemple, les maillons seront pris en compte par rapport à leur enveloppe extéreure et non comme un objet concave (contrairement à ce que l’on peut avoir avec reactor de Havock).
La solution consiste à créer un groupe de groupes.
1. Commencer par créer une brique, en faire un groupe
2. Recommencer et positionner les objets de telle manière à faire un maillon
3. Les grouper.
L’ensemble va fonctionner correctement comme une chaine. Il n’y a pas de notion d’objet creu (contrairement à d’autres moteurs comme celui d’Avock dans 3Dsmax), il faut donc contourner cette difficulté en modélisant des objets groupés.
Construction d’un petit véhicule
Créer un socle, construire une boite. Elever la boite.
Utiliser l’outil « create wheel » (créer roue).
Positionner la première roue. Des lignes d’aide ont été créées afin de positionner la roue avec précision. Répéter l’opération pour chaque roue.
Le véhicule est prêt. Passer en mode « play » pour le faire rouler. L’installer le long d’une pente pour le faire dégringoler tout seul.
Il est toujours possible d’éditer la boite de base pour «sculpter » le véhicule. Faire BD, éditer groupe et modifier à volonté.
Pour faire rouler automatiquement le véhicule, il convient de lui ajouter un moteur. Pour cela, éditer les propriétés de la jointure « hinge », éditer la roue, puis cliquer sur la charnière (hinge) en ayant la palette de UI active (« show UI »).
Dans la case contrôleur ajouter –slider(« roue »)– pour la version 3, juste –roue– pour la version 2.
Un slider apparaitra au moment de jouer l’animation permettant de régler la puissance du moteur.
Les lignes d’aide ont été conservées afin de suivre la vitesse de rotation des roues. Elles seront bien entendu retirées pour une présentation définitive.
Nota : chaque objet constituant l’ensemble doit être individualisé. Il ne faut pas faire de copier/coller des ensembles roues et surtout ne pas faire de copier/coller des joints. Ils sont tous référencés par un numéro. Un copier/coller les ferait tous se comporter de la même manière.
Créer un moteur de poulie.
Dans cet exemple, il sera question de construire un objet concave, de paramétrer un moteur, puis de créer une corde. La corde sera attachée dans la gorge de la poulie, l’ensemble soulèvera une charge.
Mise en place de la poulie
Il faut créer 3 cylindres, qui seront groupés en un seul objet afin de faire reconnaitre la gorge de la poulie (comme pour les maillons de la chaine plus haute). On applique ensuite un joint « servo » dont on aura « labélisé » le controller afin de créer une glissère de contrôle.
Attention : ne pas mettre d’accent ou de signes particuliers dans les contrôleurs.
Pour simplifier la visualisation des actions, seule la partie centrale va être montrée. Dans cette partie centrale va être tracée une gorge. L’ensemble va ensuite être démonté pour obtenir des blocs indépendants, puis, ces blocs vont être associés en groupes. Rappel, SketchyPhysics ne gère pas les formes concaves.
Chaque morceau constituant la gorge de la poulie est visualisé ci-dessus par des couleurs différentes.
Création de la corde.
La corde est un objet simple à créer, mais dont la réalisation demande une très grande attention. Il s’agit tout simplement de lier des « box » avec des joints, « hinge » (charnière) ou « ball » balle. Dans le cas qui suit, ce sera avec des charnières.
Dans un premier temps, la corde est réalisée avec des boites légèrement distantes. Pour que l’espacement des boites soit régulier et que l’ensemble soit rapide à construire, on utilise des petites boites intermédiaires. Ensuite il ne reste plus qu’à faire des « déplacer/copier » (fonction déplacer + CTRL). La corde doit être assez longue.
Le premier maillon de la chaine est marqué d’une couleur rouge. Cela pourra être utile pour la suite.
Placer des charnières (« hinge ») à l’extrémité des boites à partir de la deuxième. Attention, il ne faut pas faire de copier/coller avec les charnières, car les noms seraient identiques et donc la simulation serait faussée. Effectuer la jonction telle que vue précédemment :
- Cliquer sur le « joint Connection Tool » (JTC, outil de connexion de joint) . Une fois le JTC activé, cliquer sur la boite
2. Maintenir la touche contrôle (CTRL) enfoncée, cliquer sur la charnière -> la première boite pivote maintenant autour de l’axe donné par la charnière
Faire ensuite un groupe boite + charnière.
Renouveler l’opérartion pour chaque maillon de la chaine.
Connecter ensuite les maillons entre eux en cliquant sur le joint (accessible même s’il est dans un groupe) et la boite faisant face. Ici, la chaine est dessinée à plat, elle est ensuite redressée.
L’inspector montre ici la logique de connection des différentes entitées.
La flexibilité de la corde est testée, il ne faut pas qu’il y ait de cassures, de blocages ou d’explosion des solides.
Réalisation du moteur de la poulie
Le moteur est réalisé avec un joint « motor » comme pour la voiture.
Dans la version 3 de Sketchyphysics, la case « controler » est alimentée automatiquement, ce qui permet d’avoir un « slider » pour gérer la vitesse de rotation. Dans la version 2, il faut renseigner manuellement la case afin de faire apparaitre un slider de contrôle.
La corde est attaché à la poulie par un emboitement.
Visualisation
L’ensemble fonctionne parfaitement. L’astuce de la gorge de poulie permet de simplifier grandement le travail d’attache de la corde à la poulie.