You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
earthquake_3d_viewer_front/three/manual/fr/animation-system.html

173 lines
6.7 KiB
HTML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html><html lang="fr"><head>
<meta charset="utf-8">
<title>Système d'Animation</title>
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@threejs">
<meta name="twitter:title" content="Three.js Système d'Animation">
<meta property="og:image" content="https://threejs.org/files/share.png">
<link rel="shortcut icon" href="../../files/favicon_white.ico" media="(prefers-color-scheme: dark)">
<link rel="shortcut icon" href="../../files/favicon.ico" media="(prefers-color-scheme: light)">
<link rel="stylesheet" href="../resources/lesson.css">
<link rel="stylesheet" href="../resources/lang.css">
<script type="importmap">
{
"imports": {
"three": "../../build/three.module.js"
}
}
</script>
</head>
<body>
<div class="container">
<div class="lesson-title">
<h1>Système d'Animation</h1>
</div>
<div class="lesson">
<div class="lesson-main">
<h2>Vue d'ensemble</h2>
<p class="desc">
Au sein du système d'animation de three.js, vous pouvez animer diverses propriétés de vos modèles :
les os d'un modèle skinné et riggé, les morph targets, différentes propriétés de matériaux
(couleurs, opacité, booléens), la visibilité et les transformations. Les propriétés animées peuvent être introduites en fondu,
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
sur le même objet ainsi que sur différents objets peuvent être modifiées
indépendamment. Diverses animations sur le même objet et sur différents objets peuvent être
synchronisées.<br /><br />
Pour atteindre tout cela dans un seul système homogène, le système d'animation de three.js
[link:https://github.com/mrdoob/three.js/issues/6881 a complètement changé en 2015]
(méfiez-vous des informations obsolètes !), et il a maintenant une architecture similaire à
Unity/Unreal Engine 4. Cette page donne un bref aperçu des principaux composants du
système et de leur fonctionnement ensemble.
</p>
<h3>Clips d'Animation</h3>
<p class="desc">
Si vous avez importé avec succès un objet 3D animé (peu importe qu'il ait des
os, des morph targets, ou les deux) — par exemple en l'exportant depuis Blender avec l'
[link:https://github.com/KhronosGroup/glTF-Blender-IO exportateur glTF pour Blender] et
en le chargeant dans une scène three.js à l'aide de `GLTFLoader` — l'un des champs de réponse
devrait être un tableau nommé "animations", contenant les clips d'animation
pour ce modèle (voir une liste des chargeurs possibles ci-dessous).<br /><br />
Chaque `AnimationClip` contient généralement les données pour une certaine activité de l'objet. Si le
mesh est un personnage, par exemple, il peut y avoir un AnimationClip pour un cycle de marche, un second
pour un saut, un troisième pour un pas de côté, et ainsi de suite.
</p>
<h3>Pistes d'Images Clés</h3>
<p class="desc">
À l'intérieur d'un tel `AnimationClip`, les données pour chaque propriété animée sont stockées dans une
`KeyframeTrack` séparée. En supposant qu'un objet personnage a un squelette,
une piste d'images clés pourrait stocker les données des changements de position de l'os de l'avant-bras
au fil du temps, une piste différente les données des changements de rotation du même os, une troisième
la position, la rotation ou l'échelle d'un autre os, et ainsi de suite. Il devrait être clair
qu'un AnimationClip peut être composé de nombreuses pistes de ce type.<br /><br />
En supposant que le modèle a des morph targets (par exemple un morph
target montrant un visage amical et un autre montrant un visage en colère), chaque piste contient les
informations sur la manière dont l'influence d'un certain morph target change pendant la performance
du clip.
</p>
<h3>Mixeur d'Animation</h3>
<p class="desc">
Les données stockées ne forment que la base des animations - la lecture réelle est contrôlée par le
`AnimationMixer`. Vous pouvez l'imaginer non seulement comme un lecteur d'animations, mais
comme une simulation d'un matériel comme une véritable console de mixage, qui peut contrôler plusieurs animations
simultanément, en les mélangeant et en les fusionnant.
</p>
<h3>Actions d'Animation</h3>
<p class="desc">
Le `AnimationMixer` lui-même n'a que très peu de propriétés et de méthodes (générales), car il
peut être contrôlé par les actions d'animation. En configurant une
`AnimationAction`, vous pouvez déterminer quand un certain `AnimationClip` doit être lu, mis en pause
ou arrêté sur l'un des mixeurs, si et combien de fois le clip doit être répété, s'il
doit être exécuté avec un fondu ou une échelle temporelle, et quelques éléments supplémentaires, tels que le fondu enchaîné
ou la synchronisation.
</p>
<h3>Groupes d'Objets d'Animation</h3>
<p class="desc">
Si vous souhaitez qu'un groupe d'objets reçoive un état d'animation partagé, vous pouvez utiliser un
`AnimationObjectGroup`.
</p>
<h3>Formats et Chargeurs Pris en Charge</h3>
<p class="desc">
Notez que tous les formats de modèle n'incluent pas l'animation (OBJ notamment ne le fait pas), et que seuls certains
chargeurs three.js supportent les séquences `AnimationClip`. Plusieurs qui <i>supportent</i>
ce type d'animation :
</p>
<ul>
<li>THREE.ObjectLoader</li>
<li>THREE.BVHLoader</li>
<li>THREE.ColladaLoader</li>
<li>THREE.FBXLoader</li>
<li>THREE.GLTFLoader</li>
</ul>
<p class="desc">
Notez que 3ds max et Maya ne peuvent actuellement pas exporter plusieurs animations (c'est-à-dire des animations qui ne sont pas
sur la même ligne de temps) directement dans un seul fichier.
</p>
<h2>Exemple</h2>
<pre class="prettyprint notranslate lang-js" translate="no">
let mesh;
// Créer un AnimationMixer, et obtenir la liste des instances de AnimationClip
const mixer = new THREE.AnimationMixer( mesh );
const clips = mesh.animations;
// Mettre à jour le mixeur à chaque image
function update () {
mixer.update( deltaSeconds );
}
// Jouer une animation spécifique
const clip = THREE.AnimationClip.findByName( clips, 'dance' );
const action = mixer.clipAction( clip );
action.play();
// Jouer toutes les animations
clips.forEach( function ( clip ) {
mixer.clipAction( clip ).play();
} );
</pre>
</div>
</div>
</div>
<script src="../resources/prettify.js"></script>
<script src="../resources/lesson.js"></script>
</body></html>