animation-system.html 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <!DOCTYPE html><html lang="fr"><head>
  2. <meta charset="utf-8">
  3. <title>Système d'Animation</title>
  4. <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  5. <meta name="twitter:card" content="summary_large_image">
  6. <meta name="twitter:site" content="@threejs">
  7. <meta name="twitter:title" content="Three.js – Système d'Animation">
  8. <meta property="og:image" content="https://threejs.org/files/share.png">
  9. <link rel="shortcut icon" href="../../files/favicon_white.ico" media="(prefers-color-scheme: dark)">
  10. <link rel="shortcut icon" href="../../files/favicon.ico" media="(prefers-color-scheme: light)">
  11. <link rel="stylesheet" href="../resources/lesson.css">
  12. <link rel="stylesheet" href="../resources/lang.css">
  13. <script type="importmap">
  14. {
  15. "imports": {
  16. "three": "../../build/three.module.js"
  17. }
  18. }
  19. </script>
  20. </head>
  21. <body>
  22. <div class="container">
  23. <div class="lesson-title">
  24. <h1>Système d'Animation</h1>
  25. </div>
  26. <div class="lesson">
  27. <div class="lesson-main">
  28. <h2>Vue d'ensemble</h2>
  29. <p class="desc">
  30. Au sein du système d'animation de three.js, vous pouvez animer diverses propriétés de vos modèles :
  31. les os d'un modèle skinné et riggé, les morph targets, différentes propriétés de matériaux
  32. (couleurs, opacité, booléens), la visibilité et les transformations. Les propriétés animées peuvent être introduites en fondu,
  33. dissoutes en fondu, fondues enchaînées et déformées. L'influence (weight) et l'échelle temporelle (time scales) de différentes animations simultanées
  34. sur le même objet ainsi que sur différents objets peuvent être modifiées
  35. indépendamment. Diverses animations sur le même objet et sur différents objets peuvent être
  36. synchronisées.<br /><br />
  37. Pour atteindre tout cela dans un seul système homogène, le système d'animation de three.js
  38. [link:https://github.com/mrdoob/three.js/issues/6881 a complètement changé en 2015]
  39. (méfiez-vous des informations obsolètes !), et il a maintenant une architecture similaire à
  40. Unity/Unreal Engine 4. Cette page donne un bref aperçu des principaux composants du
  41. système et de leur fonctionnement ensemble.
  42. </p>
  43. <h3>Clips d'Animation</h3>
  44. <p class="desc">
  45. Si vous avez importé avec succès un objet 3D animé (peu importe qu'il ait des
  46. os, des morph targets, ou les deux) — par exemple en l'exportant depuis Blender avec l'
  47. [link:https://github.com/KhronosGroup/glTF-Blender-IO exportateur glTF pour Blender] et
  48. en le chargeant dans une scène three.js à l'aide de `GLTFLoader` — l'un des champs de réponse
  49. devrait être un tableau nommé "animations", contenant les clips d'animation
  50. pour ce modèle (voir une liste des chargeurs possibles ci-dessous).<br /><br />
  51. Chaque `AnimationClip` contient généralement les données pour une certaine activité de l'objet. Si le
  52. mesh est un personnage, par exemple, il peut y avoir un AnimationClip pour un cycle de marche, un second
  53. pour un saut, un troisième pour un pas de côté, et ainsi de suite.
  54. </p>
  55. <h3>Pistes d'Images Clés</h3>
  56. <p class="desc">
  57. À l'intérieur d'un tel `AnimationClip`, les données pour chaque propriété animée sont stockées dans une
  58. `KeyframeTrack` séparée. En supposant qu'un objet personnage a un squelette,
  59. une piste d'images clés pourrait stocker les données des changements de position de l'os de l'avant-bras
  60. au fil du temps, une piste différente les données des changements de rotation du même os, une troisième
  61. la position, la rotation ou l'échelle d'un autre os, et ainsi de suite. Il devrait être clair
  62. qu'un AnimationClip peut être composé de nombreuses pistes de ce type.<br /><br />
  63. En supposant que le modèle a des morph targets (par exemple un morph
  64. target montrant un visage amical et un autre montrant un visage en colère), chaque piste contient les
  65. informations sur la manière dont l'influence d'un certain morph target change pendant la performance
  66. du clip.
  67. </p>
  68. <h3>Mixeur d'Animation</h3>
  69. <p class="desc">
  70. Les données stockées ne forment que la base des animations - la lecture réelle est contrôlée par le
  71. `AnimationMixer`. Vous pouvez l'imaginer non seulement comme un lecteur d'animations, mais
  72. comme une simulation d'un matériel comme une véritable console de mixage, qui peut contrôler plusieurs animations
  73. simultanément, en les mélangeant et en les fusionnant.
  74. </p>
  75. <h3>Actions d'Animation</h3>
  76. <p class="desc">
  77. Le `AnimationMixer` lui-même n'a que très peu de propriétés et de méthodes (générales), car il
  78. peut être contrôlé par les actions d'animation. En configurant une
  79. `AnimationAction`, vous pouvez déterminer quand un certain `AnimationClip` doit être lu, mis en pause
  80. ou arrêté sur l'un des mixeurs, si et combien de fois le clip doit être répété, s'il
  81. doit être exécuté avec un fondu ou une échelle temporelle, et quelques éléments supplémentaires, tels que le fondu enchaîné
  82. ou la synchronisation.
  83. </p>
  84. <h3>Groupes d'Objets d'Animation</h3>
  85. <p class="desc">
  86. Si vous souhaitez qu'un groupe d'objets reçoive un état d'animation partagé, vous pouvez utiliser un
  87. `AnimationObjectGroup`.
  88. </p>
  89. <h3>Formats et Chargeurs Pris en Charge</h3>
  90. <p class="desc">
  91. Notez que tous les formats de modèle n'incluent pas l'animation (OBJ notamment ne le fait pas), et que seuls certains
  92. chargeurs three.js supportent les séquences `AnimationClip`. Plusieurs qui <i>supportent</i>
  93. ce type d'animation :
  94. </p>
  95. <ul>
  96. <li>THREE.ObjectLoader</li>
  97. <li>THREE.BVHLoader</li>
  98. <li>THREE.ColladaLoader</li>
  99. <li>THREE.FBXLoader</li>
  100. <li>THREE.GLTFLoader</li>
  101. </ul>
  102. <p class="desc">
  103. Notez que 3ds max et Maya ne peuvent actuellement pas exporter plusieurs animations (c'est-à-dire des animations qui ne sont pas
  104. sur la même ligne de temps) directement dans un seul fichier.
  105. </p>
  106. <h2>Exemple</h2>
  107. <pre class="prettyprint notranslate lang-js" translate="no">
  108. let mesh;
  109. // Créer un AnimationMixer, et obtenir la liste des instances de AnimationClip
  110. const mixer = new THREE.AnimationMixer( mesh );
  111. const clips = mesh.animations;
  112. // Mettre à jour le mixeur à chaque image
  113. function update () {
  114. mixer.update( deltaSeconds );
  115. }
  116. // Jouer une animation spécifique
  117. const clip = THREE.AnimationClip.findByName( clips, 'dance' );
  118. const action = mixer.clipAction( clip );
  119. action.play();
  120. // Jouer toutes les animations
  121. clips.forEach( function ( clip ) {
  122. mixer.clipAction( clip ).play();
  123. } );
  124. </pre>
  125. </div>
  126. </div>
  127. </div>
  128. <script src="../resources/prettify.js"></script>
  129. <script src="../resources/lesson.js"></script>
  130. </body></html>
粤ICP备19079148号