Chenille de char souple (la chenille, pas le char)
Transcription
Chenille de char souple (la chenille, pas le char)
Chenille de char souple (la chenille, pas le char) Comme beaucoup de gens, j’ai un tas d’idées 3D dans la tête, et la plupart du temps je commence directement de modéliser quelque chose dans Blender. Et comme beaucoup de gens, je sais que ce n’est pas vraiment une bonne méthode, mais je le fais fréquement parce que je suis trop paresseux pour attaquer mes projets plus méthodiquement. Il y a deux semaines, j’étais en week-end wellness avec ma copine. Trois jours sans ordinateur, enfer ou paradis ? Bon, sans ordinateur, mais pas vraiment sans Blender, parce que je ne pouvais pas me sortir certaines idées de la tête. Donc j’avais juste à laisser mon corps se détendre et mon esprit choisir entre “ne penser à rien” et “B…2.48a”. Devinez la suite, … j’ai pris un crayon, une feuille de papier, et j’ai commencé à faire quelques croquis. La meilleure partie de cette histoire, c’est que j’avais beaucoup de temps pour développer le projet, avant de pouvoir finalement construire les premiers objets dans Blender. Les idées étaient nombreuses et grandissantes chaque minute. J’avais déjà une liste de problèmes, quelques solutions, des alternatives et autres options. Une fois retour à la maison, j'ai testé certains points critiques dans Blender et j'ai soumis les questions insolubles à la légendaire et célèbre communauté francophone du BlenderClan (http://blenderclan.tuxfamily.org). Note pour les débutants (comme moi, parfois) : Essayez de réduire votre problème à son état le plus simple pour trouver des solutions. Ouvrez un nouveau fichier Blender, ajoutez juste le strict minimum dont vous avez besoin pour attaquer le problème et expérimenter avec ça. Si vous ne parvenez pas à trouver une solution, vous pouvez poster une demande précise sur un forum (comme http://blenderartists.org), expliquez la situation et donnez éventuellement le fichier. Avec un peu de chance, vous recevrez un grand nombre de suggestions. Veillez à ne pas poser trop de questions en même temps, car les réponses risquent d’être plus vagues et moins nombreuses. Définitions : Voici encore quelques définitions fondamentales qui devraient vous aider à comprendre le principe général qui a guidé à ce projet. • • Créer des animations avec un seul et unique IPO (The "One Ipo Research Attitude" ou OIRA, terme anglais que j’ai pondu pour l’occasion, et qu’on pourrait traduire par "La méthode de recherche de l’IPO unique". Bref, autant en anglais je trouvais ça rigolo, autant en français, ça sent un peu le… bouffon. Quand un IPO unique n’est pas possible, alors, aussi peu d’IPO que possible ou AFAPIRA ("As Few As Possible Ipo Research Attitude") Dans la série “OIRA or AFAPIRA”, on commence par : • Utiliser des contraintes pour que les roues d’un véhicule restent sur le sol (Mesh) • Créer une chenille de char souple, avec une inertie dynamique, en d’autres termes un objet Curve Path souple mais non élastique (donc à longueur constante) • Aucune addition de script Python, je ne suis pas encore assez intime avec le Python (mais les PyDrivers sont autorisés) • Utiliser les Modifiers and Constraints de Blender 2.48a Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 1 / 39 Alain Mathez 1) Layer 1 : le sol (floor) Ouvrez un nouveau fichier Blender, effacez tous les objets, affichez seulement le Layer 1 (1), passez en vue de dessus (Numpad 7), ajoutez un Mesh Plane (Space, Mesh, Plane), en Edit Mode (Tab) sélectionnez (RMB, Shift+RMB) et effacez (X, 1) les deux Vertices du haut, sélectionnez l’arête restante (A) grossissez la de 20x (S, 20, Enter), subdivisez la 21x (W, 2, Number of cuts :21). Img-00050t.PNG Sélectionnez les Vertices sur la partie positive de l’axe X (B, LMB+BougerSouris), et cachez les (H). Img-00100t.PNG Passez en vue de face (Numpad 1) sélectionnez les deux Vertices du centre, enclenchez le Proportional Edit Tool (O), sélectionnez Random Falloff, bougez les Vertices de 1BU (Unités Blender) le long de l’axe Z, en ayant tous les Vertices dans le cercle de sélection (G, Z, MoletteSouris) Img-00150t.PNG Img-00200t.PNG Passez en vue de dessus (Numpad 7), affichez les Vertices invisibles (Alt+H), sélectionnez tous les Vertices (A, A), extrudez 2BU le long de l’axe Y (E, 1, Y, 2, Enter). Img-00250t.PNG Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 2 / 39 Alain Mathez Sélectionnez tous les Vertices (A, A), recalculez les normales (Ctrl+N), passez en Object Mode (Tab), ajoutez un Modifier Subsurf (Ctrl+2). Img-00300t1.PNG Img-00300t2.PNG Renommez le Plane en Floor et cochez SetSmooth. Img-00350tm.PNG 2) Layer 2 : Les projections affichez seulement le Layer 2 (2), passez en vue de dessus, ajoutez un Mesh Plane and modifiez le pour obtenir 10 arêtes de longueur 1BU (Unités Blender) en ligne droite. En mode Object, placez cette ligne à X=5, Y=0, Z=10, donnez-lui le nom de ProjectionFloor et vérifiez la position du centre par rapport aux Vertices ! Img-00400t.PNG Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc Img-00450t.PNG page 3 / 39 Alain Mathez En Edit Mode, ouvrez le panneau “Link and Material” (F9), ajoutez un Vertex Group (New), nommez le Pr1, sélectionnez seulement le premier Vertex sur la gauche, pressez Assign. Ajoutez un Vertex Group (New), nommez le Pr1b, assignez à ce groupe seulement le second Vertex, et ainsi de suite pour Pr2, Pr2b, Pr3, Pr3b, … Pr6. Img-00500tm.PNG 3) Layer 3 : les (beaux) parents Laissez le Layer 2 activé, affichez aussi le Layer 3 (Shift+3), passez en vue de face, ajoutez un Empty (Space, Empty), nommez le Pr1, placez le exactement à la même place que le premier Vertex de ProjectionFloor, en utilisant la touche Ctrl pour "coller" à la grille (G, Ctrl+MouseMove). Si l’Empty n’a pas son axe Z pointant vers le haut, vérifiez dans les User Preferences que le bouton “Aligned to View” ne soit pas enclenché. Img-00550tm.PNG Ajoutez un Empty, collez le à la grille à la même position que le deuxième Vertex, nommez le Pr1b. Faites de même avec Pr2, Pr2b, … Pr6. Vérifiez en vue de dessus que la position des Empties soit correcte aussi sur l’axe Y. Dans le panneau “Draw” (F7), affichez le nom des différents objets des Layers 2 et 3. Img-00600t1.PNG Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 4 / 39 Alain Mathez Img-00650t.PNG Img-00600t2.PNG Sélectionnez le Mesh ProjectionFloor (RMB), passez en Edit Mode (Tab), sélectionnez seulement le premier Vertex sur la gauche (RMB). Toujours en Edit Mode, sélectionnez l’Empty correspondent Pr1 (Ctrl+RMB) et définissez le Vertex comme Parent de l’Empty (Ctrl+P). Img-00700t.PNG Ensuite sélectionnez le deuxième Vertex (RMB) et le deuxième Empty (Ctrl+RMB), "parentez" les (Ctrl+P), et ainsi de suite jusqu’au dernier Empty. Quand vous avez fini, si vous bougez un Vertex (G+MouseMove), l’Empty correspondant doit suivre. Img-00750t.PNG Bon, c’était juste pour s’assurer que la méthode fonctionne, ne moment (Esc). Maintenant, la première astuce. Passez en vue affichez aussi le premier Layer (Shift+1) pour voir le Mesh Floor, ProjectionFloor, allez dans le panneau “Modifiers”, ajoutez un définissez les paramètres comme ci-dessous et vérifiez le résultat. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 5 / 39 bougez rien pour le de face (Numpad1), sélectionnez le Mesh Modifier Shrinkwrap, Alain Mathez Img-00800t1m.PNG Img-00800t2.PNG Devinez quoi, vous devez faire la même chose pour tous les Vertex Groups, … mais pas de panique, si vous cliquez sur le bouton “Copy” à droite du Modifier, vous obtenez sans effort une copie complète, dans laquelle l’unique changement à effectuer est le champ VGroup : Pr1b, Pr2, Pr2b, …Pr6. Maintenant si vous bougez le Mesh le long de l’axe X, vous devez voir les Empties coller au sol. Plutôt marrant non ? Img-00850t.PNG 4) Layer 4 : la chenille Affichez seulement le Layer 4 (4), vue de face (Numpad1) ajoutez quelques Curves Bezier comme repères pour positionner la Curve NURBS Circle qui servira de chemin pour la chenille. Nous n’avons pas besoin de Curves 3D, donc il faut pivoter la Curve (en mode Object) autour de son axe X. allez dans le panneau “Transform Properties” ajustez la rotation de RotX. Et n’oubliez pas de nommer tous vos objets. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 6 / 39 Alain Mathez Img-00900t1m.PNG Img-00900t2.PNG Note pour les paresseux (comme moi, parfois) : Essayez de coller le plus possible les points de contrôle du chemin PathCaterpillar sur la grille (zoomez si nécessaire) parce que vous aurez bientôt à aligner des Bones et des Empties sur chacun de ces points. Il sera donc plus facile de le faire avec une extrême précision si chaque objet peut être lui aussi collé à la grille. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 7 / 39 Alain Mathez Img-00950tm.PNG Note pour tout le monde (comme moi, parfois) : lorsque vous avez défini la forme de votre chemin, vérifiez qu’il a une longueur "ronde". En effet, les maillons seront ainsi plus faciles à adapter (par exemple 50 maillons de largeur 1BU sur un chemin de longueur 50). Img-00950t2m.PNG Sélectionnez tous les Vertices, allez dans le panneau “Curve Tools” (F9 quand la Curve est en Edit Mode), mettez le Order U à 3, et attribuez à tous les Vertices un poids de 1. Img-00950t3m.PNG Note pour les gens pressés (comme moi, parfois) : il est important de donner au chemin PathCaterpillar une forme de corde détendue, parce que lorsque nous lui donnerons un mouvement, la chenille va se tendre. Mais rappelez-vous, ce n’est pas élastique, donc la longueur doit rester constante. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 8 / 39 Alain Mathez Img-01000t.PNG Au repos le chemin doit ressembler à une corde détendue, parce que bientôt du mouvement devra tendre tout cela. Img-01050t.PNG 5) Layer 5 : les contraintes Nous allons configurer plusieurs contraintes sur des Empties. Ce système va nous aider à positionner le châssis du véhicule, et à déformer la future Armature qui contrôlera notre actuelle Curve PathCaterpillar. Affichez les Layer 3, 4 and 5 (3, Shift+4; Shift+5), ajoutez un Empty, nommez le PositionFrame1, réglez sa taille à 0.5 dans le panneau “Links and Material”, donnez lui l’Empty Pr1 comme Parent (RMB on PositionFrame1, Shift+RMB on Pr1, Ctrl+P, Enter), et déplacez le de 1BU au dessus de Pr1. Faites de même pour PositionFrame2 (Parent = Pr3b), et PositionFrame3 (Parent = Pr6). Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 9 / 39 Alain Mathez Img-01100t1.PNG Img-01100t3.PNG Img-01100t3.PNG Ajoutez un Mesh Plane, nommez le AverageFrame modifiez le pour obtenir trois Vertices en ligne droite sur les positions de PositionFrame1, PositionFrame2 and PositionFrame3. Ajoutez une contrainte Hook à chaque Vertex pour l’Empty correspondant. Img-01150t1.PNG Img-01150t2.PNG Passez en Object Mode, ajoutez un Empty, nommez le OrientateFrame, placez le sur PositionFrame2, sélectionnez l’Empty OrientateFrame (RMB) et le Mesh AverageFrame Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 10 / 39 Alain Mathez (Shift+RMB), passez en Edit Mode (Tab), sélectionnez les trois Vertices (A), et définissez les (ensemble) comme Parent de l’Empty (Ctrl+P, Enter). Img-01200t.PNG Maintenant affichez aussi le Layer 2 (Shift+2). Sélectionnez le Mesh ProjectionFloor, et bougez le sur l’axe X, vous devez voir que l’Empty OrientateFrame suit le Mesh AverageFrame. Cependant, quand le Mesh Floor du Layer 1 (actuellement caché) va vers le haut, OrientateFrame bascule la tête en bas. Pour corriger ça, ajoutez lui simplement une contrainte Copy Rotation sur PositionFrame1, Influence 0, et une contrainte TrackTo (Ctrl+T, 1) sur PositionFrame3. Comme ça vous avez deux choix pour tester plus tard. Soit l’un, soit l’autre, voire un peu des deux. Img-01250t.PNG Img-01300t.PNG Passez en vue latérale (Numpad 3), ajoutez un Mesh Plane, nommez le SoftFrame, passez en Edit Mode (Tab) tournez le Plane autour de l’axe Y (R, Y, 90, Enter). Sélectionnez seulement les deux Vertices du haut, fusionnez les (W, 5, 3, Enter), sélectionnez tout (A, A), subdivisez (W, 1) et déplacez l’ensemble de 1BU vers le haut (G, Z, 1, Enter). Définissez les paramètres dans le panneau “Soft Body” (F7, F7) comme cidessous. Img-01350t1.PNG Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc Img-01350t2m.PNG page 11 / 39 Alain Mathez Img-01400t1.PNG Img-01400t2m.PNG Img-01450t2.PNG Cette méthode n’est pas la mienne, vous pouvez obtenir les détails www.blendernation.com, plus précisément ici : http://www.blendernation.com/2008/02/12/automatically-generated-camera-shaking/ Et vous trouverez la description sur http://blenderartists.org, à cette adresse : http://blenderartists.org/forum/showthread.php?t=116699 Merci yoyofargo! sur Ajoutez un Empty à l’origine de SoftFrame, nommez le SoftDynamicFrame donnez lui les trois Vertices centraux comme Parent. Img-01500t.PNG Img-01550t.PNG Grâce à ça, l’Empty SoftDynamicFrame pivotera légèrement en fonction du mouvement de SoftFrame. L’angle résultant sera utilisé pour déformer la future Armature. Ajoutez un Empty AngleFrame 2BU au-dessus de OrientateFrame, définissez OrientateFrame comme Parent de AngleFrame. Ajoutez une contrainte Copy Rotation à AngleFrame sur SoftDynamicFrame, laissez seulement Y et Influence à 0.1. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 12 / 39 Alain Mathez Img-01600t2m.PNG Img-01600t1.PNG Sélectionnez la Curve PathCaterpillar et donnez-lui AngleFrame comme Parent. Si vous déplacez le Mesh ProjectionFloor, alors PathCaterpillar doit suivre la pente du Mesh Floor. Si vous tournez l’Empty SoftDynamicFrame autour de l’axe Y, PathCaterpillar doit suivre cette rotation. Ouaow, respirez un bon coup et allez prendre une boisson fraîche, vous n’êtes pas encore arrivés à la moitié !. Prêts ? Ajoutez un Empty CenterMidWheel, dont le Parent doit être AngleFrame, ajoutez un Empty IKTargetMidLeft et un Empty IKTargetMidRight, les deux ayant pour Parent CenterMidWheel. IKTargetMidLeft et IKTargetMidRight doivent être placés sur les Vertices correspondants de PathCaterpillar. Img-01650t.PNG Ajoutez un Empty CenterFrontWheel, avec pour Parent AngleFrame. Tournez-le de -90° autour de l’axe Z (R, Z, -90, Enter). Cette orientation particulière sera utile pour une future contrainte IK. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 13 / 39 Alain Mathez Img-01700t.PNG Cet Empty devra tourner dans le sens inverse de AngleFrame. Pour réaliser ce tour de magie, nous avons besoin d’un autre Empty PivotFrontWheel, dont le Parent est AngleFrame. Ajoutez une contrainte Transformation à PivotFrontWheel. La cible (Target) de cette contrainte est SoftDynamicFrame. Img-01750t1.PNG Ensuite CenterFrontWheel PivotFrontWheel. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc Img-01750t2m.PNG va recevoir page 14 / 39 une contrainte Copy Rotation sur Alain Mathez Img-01800tm.PNG Si vous tournez SoftDynamicFrame, vous devriez voir quelque chose comme ça. Img-01850t.PNG Pas trop le mal de mer ? Alors faire la même chose pour le côté droit. Img-01900t1.PNG Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc Img-01900t2.PNG page 15 / 39 Alain Mathez Img-01950t1.PNG Img-01950t2.PNG 6) Layer 5 : l’Armature Ajoutez une Armature sur le Layer 6. Notez que chaque os (Bone) commence et fini sur un point de contrôle de la Curve PathCaterpillar, à l’exceptions de quelques uns que vous pouvez voir ci-dessous. L’origine de l’Armature est sur la position de OrientateFrame, et le Parent de l’Armature est également OrientateFrame. Img-02000t.PNG Quand l’Armature est définie, en Edit Mode sélectionnez tous les Bones (A) et recalculez l’angle de roulis (Ctrl+N, 1). Il est temps d’ajouter les contraintes IK. L’Armature est en Object Mode. Sélectionnez l’Empty CenterFrontWheel (RMB), sélectionnez l’Armature (Shift+RMB), passez l’Armature en Pose Mode (Ctrl+Tab), sélectionnez le Bone qui pointe déjà vers l’ Empty, ajoutez la contrainte à l’objet actif (Shift+I, 1) Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 16 / 39 Alain Mathez Img-02050t1.PNG Img-02050t2m.PNG N’oubliez pas de désactiver le bouton Stretch, rappelez-vous que notre chemin n’est pas élastique. L’option Rot permet au Bone de suivre la rotation de la cible, et vous, petits veinards, avez déjà ajusté l’orientation de la cible CenterFrontWheel dans le chapitre 5, n’est-ce pas ? Img-02100t.PNG Img-02100t2m.PNG Quoi d’autre? La contrainte IK de la roue du milieu. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 17 / 39 Alain Mathez Img-02150t1.PNG Img-02150t2.PNG Et finalement les contraintes pour le sol. Img-02200t1.PNG Img-02200t2.PNG Img-02250t1.PNG Img-02200t2.PNG Z’avez pigé ? Ah, au fait, il vous faut ajouter, dans le Layer 3, un Empty PrePr1 dont le Parent est Pr1, et un Empty PostPr6 dont le Parent est Pr6. Voir ci-dessous. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 18 / 39 Alain Mathez Img-02300t1.PNG Img-02300t2.PNG Img-02350t1.PNG Img-02350t2.PNG Img-02400t1.PNG Img-02400t2.PNG Affichez les Layers 5 et 6, tournez l’Empty SoftDynamicFrame (+ et -90°), que constatezvous ? L’Armature est déformée mais pas étirée ? Bingo, but atteint ! Bon, en fait pas complètement. La contrainte IK pour la roue du milieu subit un léger étirement en cas de déformation extrême. Img-02450t.PNG Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 19 / 39 Alain Mathez Note pour les experts (comme moi, un jour… peut-être) : Si vous trouvez une meilleure façon d'utiliser la contrainte IK, sans aucun étirement, avec une longueur parfaitement constante pour la chaîne complète, veuillez partager avec les ignorants tels que moi quelques conseils sur votre manière de faire ! 7) Layer 7 : les Hooks Ce chapitre n’est que pur bonheur, réalisé par gourmandise. Sur chaque Vertex de la Curve PathCaterpillar, placez un Empty. Nommez-les HookPath… HookPath.0XX. Ô joie de nos amis francophones, les noms sur l’image ci-dessous sont encore en français. La traduction simultanée n’étant pas encore un Plug-In disponible pour Gimp, je vous prie de croire en ma sincérité lorsque je vous dit que HookChenille = HookPath. Sélectionnez l’Armature, passez en Pose Mode (Ctrl+Tab), sélectionnez un Empty (Ctrl+RMB), sélectionnez le Bone correspondant (Shift+RMB), définissez le Bone comme Parent de l’Empty (Ctrl+P, 1) Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 20 / 39 Alain Mathez Img-02550t.PNG Dois-je préciser qu’il est nécessaire de le faire pour chaque Empty ? Lorsque vous avez fini, affichez les Layers 3 et 7, sélectionnez la Curve PathCaterpillar, passez en Edit Mode, sélectionnez un Vertex (RMB), sélectionnez l’Empty correspondant (Ctrl+RMB), définissez le Hook (Ctrl + H, 2). Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 21 / 39 Alain Mathez Img-02600t.PNG Et une fois encore, j’ai bien peur que se soit nécessaire pour chaque Empty. Mais si vous êtes un bon pianiste, cela ne vous prendra pas plus d’une poignée de secondes. Maintenant on commence une étape particulière : contraindre les maillons à suivre le chemin de la chenille. Je n’ai é ce jour rien de mieux à vous proposer que des approximations. Pourquoi ? Parce que je ne connais que deux méthodes, et qu’aucune d’elle n’est "réelle". Première méthode : l’origine est au centre des maillons, par conséquent les jointures s’éloignent dans les petites courbes. Img-02650t.PNG Img-02700t.PNG Seconde méthode : l’origine est au centre de la première jointure, l’orientation des maillons est corrigée avec une contrainte TrackTo vers le maillon suivant, par conséquent les jointures se rapprochent dans les petites courbes. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 22 / 39 Alain Mathez Img-02750t.PNG Img-02800t.PNG Ok, la première méthode semble être moins précise, mais plus rapide à configurer. On prendra celle-ci pour l'instant. Avec des maillons étroits, l'illusion devrait suffire. 8) Layer 8 : les maillons Modélisez un maillon simple d’environ 1BU en X, 2BU en Y and 0.5BU en Z. Vous pouvez simplement déformer un cube, ou faire, comme moi, quelque chose d’un peu plus épicé. Img-02850t.PNG Img-02950t.PNG Img-02900t.PNG Img-03000t.PNG Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc Img-03050t.PNG page 23 / 39 Alain Mathez Sélectionnez le maillon (RMB), sélectionnez la Curve PathCaterpillar (Shift+RMB), obligez le maillon à suivre la Curve (Ctrl+P, 2). Annulez la rotation du maillon (Alt+R, Enter) et son origine (Alt+O, Enter). Si nécessaire, réorientez le maillon (R) afin de l’aligner sur la Curve. Vérifiez que la Curve est configurée avec “CurvePath”, “CurveFollow” and “PathDist Offs” dans le panneau “Curve and Surface”. Img-03100t1.PNG Img-03100t2m.PNG Si le maillon n’est pas sur une portion de ligne droite de la Curve, selectionnez la Curve, passez en Edit Mode, sélectionnez tout. La seul arête non sélectionnée en jaune est probablement ailleurs que sur la ligne droite. Img-03150t.PNG Pour corriger cela, sélectionnez une arête au milieu en bas et effacez-là (X, 2), le problème devrait être résolu. Si la Curve est ouverte, fermez-là (C). Quittez l’Edit Mode de la Curve. Sélectionnez le maillon, faite une copie liée (Alt+T), donnez lui un TimeOffset de 1.00 dans le panneau “Anim settings” (F7) Img-03200t1.PNG Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc Img-03200t2m.PNG page 24 / 39 Alain Mathez L’avantage de la copie liée (Alt+A au lieu de Shift+A) c’est que vous pouvez modifier un seul maillon, et obtenir en même temps les corrections sur tous les autres. Vous pouvez ainsi faire vos essais avec un cube aplatit (histoire de travailler "léger") et modifier en dernier le Mesh pour lui donner une allure de maillon respectable. Note pour les gens malins (comme moi parfois, mais pas assez pour cette fois) : il y a peut-être un truc magique avec un Array Modifier ou quelque chose dans ce genre pour ajouter tous les maillons grâce à quelques cliques. Si vous trouvez, dites le moi, svp. Vous vous rappelez la longueur de la Curve PathCaterpillar ? C’était environ 50, mais les maillons ont une largeur de 1BU, donc il vous reste à refaire la manipulation 48 fois, Alt+A, TimeOffset: 2.00, Alt+A, TimeOffset: 3.00, … Img-03250t.PNG 9) Layer 9 : the wheels Je vous laisse ce chapitre comme un exercice libre. Vous pouvez vous inspirez des images ci-dessous comme exemple. J'ai commencé avec la roue supérieure gauche, et les autres sont des copies modifiés et mises à l'échelle. Img-03300t.PNG Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 25 / 39 Alain Mathez Img-03350t.PNG Les Parent des roues sont sur les Layers 3 and 5. FrontWheel à comme Parent CenterFrontWheel, MiddleWheel à comme Parent CenterMidWheel, RearWheel à comme Parent CenterRearWheel, FloorWheel1 à comme Parent Pr1, FloorWheel2 à comme Parent Pr2, …, FloorWheel6 à comme Parent Pr6. 10) Layer 10 : le Maître et le Guide Sur le Layer 10 ajoutez deux Empties. Le premier, Master, doit être placé à 0 en X, 0 en Y et 20 en Z. Le second, Guide, doit être placé à 0 en X, 0 en Y et 10 en Z. Guide doit ensuite recevoir une contrainte Copy Location de Master, seulement sur l’axe X. Img-03400t1.PNG Img-03400t2m.PNG Guide est le Parent du Mesh ProjectionFloor sur le Layer 2. Guide est également le Parent du Mesh SoftFrame sur le Layer 5 Maintenant, si vous déplacez l’Empty Master le long de l’axe X en restant au-dessus du Mesh Floor, vous devriez voir l’ensemble suivre et coller à la surface de Floor. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 26 / 39 Alain Mathez Img-03450t.PNG Glisser ne vous suffit pas ? N’abandonnez pas, vous avez déjà fait l’essentiel. Allez dans le Screen Layout “Animation” (Ctrl+) à l’aide des flèches du clavier ou du menu. Img-03500tm.PNG Sélectionnez la Curve PathCaterpillar (sur le Layer 4), dans la fenêtre “Ipo Curve Editor” sélectionnez le type Path. Img-03550tm.PNG S’il n’y a pas de courbe IPO dans la fenêtre, ajoutez un point de contrôle près de l’origine des axes, (Ctrl+LMB) et un autre un peu plus loin (Ctrl+LMB). Spécifiez le mode d’interpolation Linear (T, 2), le mode d’extension Cyclic (E, 3). Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 27 / 39 Alain Mathez Img-03600t.PNG Img-03650t.PNG Img-03700t.PNG Ouvrez la boîte “Transform Properties” (N), éditez la courbe IPO (Tab), sélectionnez le premier point de contrôle (RMB) spécifiez les coordonnées. Img-03750tm.PNG Img-03800tm.PNG Donnez au second point de contrôle la coordonnées X : 50 ce qui correspond à la longueur de la Curve PathCaterpillar. Si vous ne choisissez pas Cyclic, les maillons feront une seule fois le tour de la chenille et s’arrêteront. Au tour des mystérieux et miraculeux PyDriver. Cliquez sur Add Driver, cliquez sur le petit serpent, écrivez “Blender.Object.Get('Master').LocX *(-1)”et…Tadaaam! Img-03850tm.PNG Img-03900tm.PNG Img-03950tm.PNG Si les maillons bougent dans la mauvaise direction, vous pouvez inverser la courbe IPO (en lui donnant une inclinaison comme “\ \ \” et non comme “/ / /”), ou ajouter un facteur *(1) à la fin de la formule du PyDriver (comme ci-dessus). Avec uniquement les Layers 8 and 10 activés, sélectionnez l’Empty Master et déplacez-le sur l’axe X axis. Impressionné ? Attendez de voir les roues ! Sélectionnez la roue FrontWheel, sélectionnez le type d’IPO Object, sélectionnez RotY (LMB), cliquez sur le bouton “Add Driver” dans la boîte “Transform Properties”, cliquez sur le serpent et écrivez “Blender.Object.Get('Master').LocX *(3.05)”. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 28 / 39 Alain Mathez Note pour les mathématiciens (pas comme moi, apparemment) : Je n’ai absolument aucune idée pourquoi ce facteur est de 3.05. Je l’ai trouvé par tâtonnements successifs. Il doit dépendre de la taille de la roue, et du nombre de dents, mais bon… ça fonctionne, je m’en contente pour l’instant. Arrangez vous pour trouver les valeurs acceptables pour les autres roues. Vous pouvez bien sûr réutiliser le PyDriver de FrontWheel pour la roue arrière RearWheel, un seul autre vous suffira pour les six FloorWheels, et un dernier pour la roue centrale MiddleWheel, si son diamètre est différent des FloorWheels. Img-04000t.PNG Vous vous rappelez de l’abréviation “OIRA or AFAPIRA” ? Bon, la courbe IPO Speed pour le chemin est une ligne droite et ne compte pas vraiment. Donc le seul objet à animer avec une courbe IPO est l’Empty, Master. A la frame 1 (Shift+) sélectionnez Master, insérez une Keyframe Location (I, 1), allez à la Frame 51 (), déplacez Master sur l’axe X, et ajoutez une Keyframe Location (I, 1). Dans la fenêtre des IPO vous pouvez sélectionner puis effacer les IPO LocY et LocZ, et ensuite éditer et ajuster la courbe IPO LocX. Img-04050t.PNG Si le Mesh SoftFrame réagit bizarrement, allez dans le panneau “Collision” et cliquez sur “Free Cache” Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 29 / 39 Alain Mathez Img-04100t1.PNG Img-04100t2m.PNG Soyez attentifs à la valeur du paramètre End dans le même panneau si votre animation dure plus de 250 frames. Si le Mesh ProjectionFloor réagit bizarrement, éditez the Mesh Floor, selectionnez tout, et extrudez un mini tout petit peu (E, 1, Z, -0.01). Si vous n’obtenez pas de résultat, essayez d’éliminer le Modifier Subsurf ou appliquez le. Img-04150t.PNG Note pour les pisteurs de bug (peut-être comme moi, allez savoir) : Si vous trouvez pourquoi le Modifier Shrinkwrap fait parfois des sauts inattendus, faites-le moi savoir svp. Rappelez-vous que vous pouvez effectuer les réglages fins avec le paramètre Influence des contraintes Copy Rotation de CenterFrontWheel, AngleFrame et CenterRearWheel. Vous pouvez également choisir entre Copy Rotation et TrackTo pour OrientateFrame. 11) Layer 11-13 : les amortisseurs Il nous faut un piston, un soufflet et un ressort. On commence par ajouter une Armature sur le Layer 11. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 30 / 39 Alain Mathez Img-04200t.PNG Img-04250t1m.PNG Img-04300t1m.PNG Img-04300t2.PNG Img-04350t1m.PNG Img-04350t2.PNG Img-04250t2m.PNG Saupoudrez d’Empties sur le Layer 12, faites cuir à feu doux si vous souhaitez les utiliser comme cibles de contraintes IK ou passez au four pour servir des contraintes TrackTo croustillantes et dorées (oui, il est tard, et je dévie un peu). Sur le Layer 13, on décorera avec les objets. En premier le piston, BlockHigh reçoit un TrackTo en direction de BlockLow et BlockLow reçoit un TrackTo en direction d’un Empty placé au même endroit que BlockHigh. Notez que deux objets ayant un TrackTo réciproque (A vers B et B vers A) fonctionnent (presque), mais donnent une erreur "Dependency cycle" dans la console de Blender. Il semble que de telles erreurs puissent nuire lors de l’utilisation d’une Render Farm. Donc, à éviter, bien que j’aie commis cette erreur, et que je ne m’étais aperçu de rien. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 31 / 39 Alain Mathez Img-04400t1.PNG Img-04400t2.PNG Img-04450t1.PNG Img-04450t2.PNG Maintenant, au tour du soufflet. BlockLeft et BlockRight s’orientent réciproquement l’un vers l’autre, de même que les différentes parties du piston. On va ajouter une contrainte Stretch to au soufflet. Img-04500t1.PNG Img-04500t2.PNG L’effet est simple, mais l’illusion est parfaite… Img-04550t.PNG Img-04600t.PNG …aussi longtemps que vous ne passez pas en vue latérale. Si el soufflet est déformé (ne me demandez pas pourquoi) ajustez simplement la taille en Z (S, Z, BougeSouris). Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 32 / 39 Alain Mathez Img-04650t.PNG Img-04660t.PNG Si l’orientation du soufflet est mauvaise, affichez ses axes dans le panneau "Draw". Sélectionnez et pivotez tous les Vertices en Edit Modem, avec le curseur placé à l’origine de l’objet et avec le mode de pivot sur "Around the Cursor". Pour finir, occupons nous du ressort. Celui-ci sera vertical, la contrainte TrackTo nécessite un axe pointant vers le haut, ce qui provoquera un conflit entre la direction de la cible et cet axe. Une possibilité serait d’utiliser une contrainte Locked Track, ou alors un Bone avec un contrainte IK pour orienter les blocs hauts et bas, à l’aide de contraintes Copy Rotation. Presque aussi facile que pour le piston. Comment modéliser un ressort ? Fastoche, mais attention, le but sera de l’animer ! Ajoutez un Plane et modifiez-le. En vue de face laissez seulement une arête et un Vertex. Sélectionnez tout et pressez Screw dans le panneau “Mesh Tools”. Img-04700t1.PNG Img-04700t2m.PNG Effacez le cylindre et gardez la spirale. Img-04750t.PNG Sélectionnez tout, allez dans le menu Mesh > Scripts > Edges to Curve. Le script créer une copie du Mesh, et la transforme en objet Curve. Editez cette Curve, sélectionnez tous les points de contrôle, cliquez sur Nurb dans le panneau "Curve Tools", ensuite cliquez Endpoint U, Order U: 3, Weight 1, Set Weight. Nommez-là Spring. Revenez en Object Mode, ajoutez une Curve NURBS Circle, nommez-là SpringBev, réduisez sa taille. Sélectionnez la Curve Spring, (attention, la Curve, pas le Mesh, que vous pouvez d’ailleurs effacer), tapez SpringBev dans le champ Bevel Object du panneau "Curve and Surface". Et là, ô surprise… rien ne se passe (*). Editez la Curve Spring, sélectionnez tout, ajustez le radius à 1 (W, 4, Enter). Un grand merci à Zeauro du BlenderClan pour m’avoir filé ce truc, qui me donnait des cauchemars Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 33 / 39 Alain Mathez (*) En traduisant ce tuto, plus d’une année après avoir écrit l’original, je viens de refaire la manipulation dans Blender 2.49b, et ça fonctionne directement, sans avoir corrigé le radius. Donc suivant votre version, vous en êtes peut-être dispensés. Bien, mais la tige constituant le ressort n’est pas un tube ouvert, nous utiliserons donc un autre Curve NURBS comme Taper Object. Notez que la taille de cette SpringTaper est de 0.1 en Object Mode. Img-04800t.PNG Img-04850t1.PNG Img-04850t2m.PNG Img-04900t.PNG Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 34 / 39 Alain Mathez Redimensionnez un peu les parties hautes et basses du ressort pour obtenir quelque chose comme… euh… un ressort. Note pour les gens fatiqués (comme moi, il est super tard) : désolé, le niveau des blagues descend avec mes paupières. Img-04950t.PNG Construction, de haut en bas. Img-05000t.PNG SpringBlockH, dont le Parent est FixeAbsorber1 (l’Empty principal pour l’amortisseur) reçoit une contrainte Copy Rotation dont la cible est BoneAbsorber2 de l’armature ArmatureAbsorber. Rappelez-vous, une contrainte TrackTo n’est pas possible puisque l’objet est place verticalement (mais une contrainte Locked Track serait également une solution). L’Empty CenterSpringH, dont le Parent est SpringBlockH. Img-05050t.PNG CurveSpring, dont le Parent est CenterSpringH. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 35 / 39 Alain Mathez Img-05100t.PNG L’Empty ScaleSpring dont le Parent est CenterSpringH. Img-05150t.PNG CenterSpringL, dont le Parent est SpringBlockL. Img-05200t.PNG SpringBlockL, dont le Parent est l’Empty CenterWheel2. Img-05250t.PNG BoneSpring de l’armature ArmatureSpring, dont le Parent est CenterSpringH. Img-05300t.PNG BoneSpring reçoit une contrainte IK dont la cible est CenterSpringL et le bouton Stretch activé, sans oublier de monter la valeur de Stretch à 1.0 dans le panneau "Armature Bones". Le haut de BoneSpring est placé exactement au début de la partie déformable du ressort, qui correspond également à la position de l’Empty ScaleSpring. Celui-ci est orienté comme BoneSpring (affichez les axes locaux pour vous en assurer) et reçoit une contrainte Copy Scale (uniquement sur l’axe Y) ciblée sur BoneSpring. Selectionnez tous Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 36 / 39 Alain Mathez les points de contrôle de la partie déformable du ressort, ensuite sélectionnez l’Empty ScaleSpring, et assignez lui la fonction Hook (Ctrl+H, 2). Sélectionnez (les points de contrôle de) la partie basse non déformable du ressort, ensuite sélectionnez l’Empty CenterSpringL, et assignez lui la fonction Hook (Ctrl+H, 2). Comme vous pouvez le constater, effectuer le "rigging" d’un ressort dynamique n’est pas si difficile. Mais une fois encore cette méthode n’est pas la mienne, elle est dérivée de http://blenderunderground.com/2008/01/03/making-a-spring-rig-in-blender/ celle-ci : simplifiée (il me semble) et améliorée (j’espère). Woualâh, c’est fait. Ajoutez quelques éléments mécaniques pour compléter l’amortisseur. Bien entendu, un char d’assaut n’a pas d’amortisseurs aussi visibles et fragile, mais la 3D n’est pas le monde réel, alors… pourquoi pas ? Img-05350t.PNG 12) Le défi Maintenant, si vous voulez réaliser l’animation d’un véhicule à chenilles se déplaçant sur un terrain bosselé, vous aurez à résoudre un autre gros problème. La seconde chenille n’est pas totalement indépendante de la première. La distance entre les deux restent fixes (c’est le véhicule lui-même), et l’inclinaison est commune. Alors, qui peut faire mieux, plus simple et plus rapide ? C’est possible, très certainement, mais je n’ai" pas encore trouvé d’autre solutions. Et n’oubliez pas le principe "OIRA or AFAPIRA". Si vous êtes meilleurs que moi (je suis sûr que c’est possible, puisque je réussi presque tous les jours ;-) et trouvez une meilleure approche, ou si vous avez des questions, remarques, idées, suggestions,… n’hésitez pas à me contacter. [email protected] Ma langue maternelle est le français (puisque je ne peux pas dire le "suisse"), et je suis à peu près capable de décoder l’anglais (please simple words only) et aussi l’allemand (da noch mal bitte nicht zu komplizierte Wörter verwenden). En bonus gratuits (qui n’étaient pas dans le BAM original en anglais) je vous propose une visite chez Philippe Roubal dont certaines recherches sont très similaires à ce tuto, bien que nous n’ayons rien comploté en cachette : http://3d-synthesis.com/tutorialsfrench.html Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 37 / 39 Alain Mathez L’autre bonus, je vous laisse le chercher, il s’agit des chenilles d’un certain Wall-e, qui ont un degrés d’élasticité insoupçonné, parce qu’elle possèdent un système d’articulation supplémentaire entre les maillons principaux. Sur les images de très grande taille c’est bien visible, l’espace entre les maillons n’est pas régulier. Futé Pixar ! Je vous souhaite bien du plaisir ! 13) Fichiers d’exemple Dans le fichier d’exemple "CaterpillarSoftTrack.blend" vous trouverez les objets décrits dans les chapitres 1 à 11, un tank téléchargé sur http://dmi.chez-alice.fr et plusieurs caméras fixées sur chaque partie importante du système de chenille. Certains objets ont un nom français (parce que j’ai fait quelques essais en utilisant des noms français avant de commencer le tuto en anglais, et par manque de temps, il est resté quelques mélanges). Dans le fichier d’exemple "TrackLinkApproximation.blend", vous trouverez les deux méthodes décrites juste avant le chapitre 8 pour contraindre des maillons à suivre un chemin. Si vous avez d’autres idées, exprimez-vous ! Dans le fichier d’exemple "LimitePathPyDriver.blend", vous trouverez plusieurs essais avec les IPO Speed et les PyDrivers, qui pourront peut-être titiller votre inspiration. Dans le dossier FurnitureHinge vous trouverez un supplément que la version anglaise du BAM ne mentionne pas. Il s’agit d’un autre "OIRA or AFAPIRA" : une charnière complexe. Réalisée avec 1 armature, 2 contraintes IK, 1 unique objet à déplacer (l’Empty Master, si vous souhaitez le déplacer manuellement, supprimez son PyDriver), et aucun IPO ! En effet l’animation est obtenue grâce au PyDriver de Master qui utilise la Frame courante. Dans la vidéo, il y a un autre système d’armature et contraintes qui permet de visualiser la compression du piston central, en vue caméra. Vous pouvez constater le changement de couleur en fonction du taux de compression. Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 38 / 39 Alain Mathez 14) Remerciements Au grand merci au BlenderClan, Meltingman (mon maître spirituel), Traven (l’homme qui sait tout ce que j’ignore), Zeauro (j’ai les questions, il a les réponses) et à ma chère concubine qui a dormi et regardé la télé tout seule pendant deux semaine, alors que j’écrivais cet article (et j’ajoute deux jours pour la traduction). Et MERCI à toutes celles et tous ceux qui permettent à Blender d’évoluer. L’animation est disponible sur : http://www.youtube.com/watch?v=l1fsN2oySFg L’animation de la charnière aussi : http://www.youtube.com/watch?v=syyJ_ooSJ-g Tramelan le 13.01.2011 CaterpillarSoftTrack_fr.doc page 39 / 39 Alain Mathez