You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					148 lines
				
				5.7 KiB
			
		
		
			
		
	
	
					148 lines
				
				5.7 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								<!DOCTYPE html>
							 | 
						||
| 
								 | 
							
								<html lang="fr">
							 | 
						||
| 
								 | 
							
									<head>
							 | 
						||
| 
								 | 
							
										<meta charset="utf-8" />
							 | 
						||
| 
								 | 
							
										<base href="../../../" />
							 | 
						||
| 
								 | 
							
										<script src="page.js"></script>
							 | 
						||
| 
								 | 
							
										<link type="text/css" rel="stylesheet" href="page.css" />
							 | 
						||
| 
								 | 
							
									</head>
							 | 
						||
| 
								 | 
							
									<body>
							 | 
						||
| 
								 | 
							
										<h1>Système d'animation ([name])</h1>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<h2>Aperçu</h2>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<p class="desc">
							 | 
						||
| 
								 | 
							
											Dans le système d'animation de three.js vous pouvez animer différentes propriétés de vos modèles:
							 | 
						||
| 
								 | 
							
											les os d'un [page:SkinnedMesh skinned and rigged model], les morph targets, les différentes propriétés des matériaux
							 | 
						||
| 
								 | 
							
											(couleurs, opacité, booléens), la visibilité et les transformations. Les propriétés animées peuvent avoir différentes animations comme un fade-in,
							 | 
						||
| 
								 | 
							
											un fade-out, un fondu ou un warp. Le poids et l'échelle temporelle des différentes animations simultanées
							 | 
						||
| 
								 | 
							
											sur le même objet peuvent également être changées indépendamment.
							 | 
						||
| 
								 | 
							
											Différentes animations sur le même objet peuvent-être
							 | 
						||
| 
								 | 
							
											synchronisées.<br /><br />
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											Pour effectuer tout cela dans un système homogène, le système d'animation three.js 
							 | 
						||
| 
								 | 
							
											[link:https://github.com/mrdoob/three.js/issues/6881 a complètement changé en 2015]
							 | 
						||
| 
								 | 
							
											(attention aux informations dépassées!), et a maintenant une architecture similaire à
							 | 
						||
| 
								 | 
							
											Unity/Unreal Engine 4. Cette page offre un bref aperçu des principaux composants du système
							 | 
						||
| 
								 | 
							
											et de comment ils fonctionnent ensemble.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<h3>Animation Clips</h3>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<p class="desc">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											Si vous aveez réussi à importer un modèle 3D (peu importe qu'il ait
							 | 
						||
| 
								 | 
							
											des os ou une morph targets ou les deux) — par exemple en l'exportant depuis Blender avec le
							 | 
						||
| 
								 | 
							
											[link:https://github.com/KhronosGroup/glTF-Blender-IO glTF Blender exporter] et
							 | 
						||
| 
								 | 
							
											en le chargeant dans la scène three.js en utilisant [page:GLTFLoader] — un des champs doit-être
							 | 
						||
| 
								 | 
							
											un tableau nommé "animations", contenant les [page:AnimationClip AnimationClips]
							 | 
						||
| 
								 | 
							
											pour ce modèle (voir une liste des loaders possibles ci-dessous).<br /><br />
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											Chaque `AnimationClip` conserve les données d'une certaine activité d'un objet. Si le
							 | 
						||
| 
								 | 
							
											mesh est un personnage, par exemple, il pourrait y avoir un AnimationClip pour une marche, un second
							 | 
						||
| 
								 | 
							
											pour un saut, un troisième pour un pas de côté et ainsi de suite.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<h3>Keyframe Tracks</h3>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<p class="desc">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											A l'intérieur d'un `AnimationClip` les données pour chaque propriétés animées sont stockées
							 | 
						||
| 
								 | 
							
											dans un [page:KeyframeTrack] séparé. En considérant que l'objet personnage a un [page:Skeleton skeleton],
							 | 
						||
| 
								 | 
							
											un keyframe track pourrait stocker les changements de valeur de la position de l'os inférieur d'un bras
							 | 
						||
| 
								 | 
							
											à travers le temps, un track différent stockerait les changements de valeur de la rotation du même bras, un troisème
							 | 
						||
| 
								 | 
							
											pourrait stocker la position, la rotation ou l'échelle d'un autre os, ainsi de suite. Il doit-être clair qu'un,
							 | 
						||
| 
								 | 
							
											AnimationClip peut-être composé de beaucoup de ce genre de tracks.<br /><br />
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											En considérant que le modèle a un morph targets (par exemple un morph
							 | 
						||
| 
								 | 
							
											target pour un visage amical et un autre pour un visage énervé), chaque track conserve
							 | 
						||
| 
								 | 
							
											l'information de comment l'[page:Mesh.morphTargetInfluences influence] d'un certain morph
							 | 
						||
| 
								 | 
							
											change durant l'exécution du clip.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<h3>Mixer d'Animations</h3>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<p class="desc">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											Les informations stockées représentent uniquement la base de l'animation - le playback est en réalité contrôlé par
							 | 
						||
| 
								 | 
							
											l'[page:AnimationMixer]. Vous vous doutez bien que ce n'est pas uniquement un visualiseur d'animations, mais
							 | 
						||
| 
								 | 
							
											une simulation d'un hardware comme une vraie console de mixage , qui peut contrôler plusieurs animations
							 | 
						||
| 
								 | 
							
											simultanément, les mélangeant et les fusionnant.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<h3>Actions d'Animations</h3>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<p class="desc">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											L'`AnimationMixer` en lui-même a seulement quelques propriétés (générales) et méthodes, car il
							 | 
						||
| 
								 | 
							
											peut-être contrôlé par l'[page:AnimationAction AnimationActions]. En configurant un
							 | 
						||
| 
								 | 
							
											`AnimationAction` vous pouvez déterminer qu'un certain `AnimationClip` doit-être joué, mis en pause
							 | 
						||
| 
								 | 
							
											ou stoppé sur un des mixers, si et à quelle fréquence le clip doit-être répeté, si il
							 | 
						||
| 
								 | 
							
											doit-être joué avec un fade, une mise à l'échelle temporelle, et d'autres choses, comme le fondu
							 | 
						||
| 
								 | 
							
											ou la synchronisation.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<h3>Animations de Groupes d'Objets</h3>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<p class="desc">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											Si vous voulez qu'un groupe d'objets reçoive un statut d'animation partagé, vous pouvez utiliser un
							 | 
						||
| 
								 | 
							
											[page:AnimationObjectGroup].
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<h3>Formats et loaders supportés</h3>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<p class="desc">
							 | 
						||
| 
								 | 
							
											Notez que tous les formats de modèles n'incluent pas les animations (notamment OBJ ne les supporte pas), et que seulement certains
							 | 
						||
| 
								 | 
							
											loaders three.js supportent les séquences d'[page:AnimationClip AnimationClip]. Plusieurs autres <i>supportent</i>
							 | 
						||
| 
								 | 
							
											ce type d'animations:
							 | 
						||
| 
								 | 
							
										</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											<ul>
							 | 
						||
| 
								 | 
							
												<li>[page:ObjectLoader THREE.ObjectLoader]</li>
							 | 
						||
| 
								 | 
							
												<li>THREE.BVHLoader</li>
							 | 
						||
| 
								 | 
							
												<li>THREE.ColladaLoader</li>
							 | 
						||
| 
								 | 
							
												<li>THREE.FBXLoader</li>
							 | 
						||
| 
								 | 
							
												<li>[page:GLTFLoader THREE.GLTFLoader]</li>
							 | 
						||
| 
								 | 
							
												<li>THREE.MMDLoader</li>
							 | 
						||
| 
								 | 
							
											</ul>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<p class="desc">
							 | 
						||
| 
								 | 
							
											Notez que 3ds max et Maya ne peuvent actuellement pas exporter plusieurs animations (qui ne sont pas sur
							 | 
						||
| 
								 | 
							
											la même timeline) directement dans un seul fichier.
							 | 
						||
| 
								 | 
							
										</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<h2>Exemple</h2>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										<code>
							 | 
						||
| 
								 | 
							
										let mesh;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Create an AnimationMixer, and get the list of AnimationClip instances
							 | 
						||
| 
								 | 
							
										const mixer = new THREE.AnimationMixer( mesh );
							 | 
						||
| 
								 | 
							
										const clips = mesh.animations;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Update the mixer on each frame
							 | 
						||
| 
								 | 
							
										function update () {
							 | 
						||
| 
								 | 
							
											mixer.update( deltaSeconds );
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Play a specific animation
							 | 
						||
| 
								 | 
							
										const clip = THREE.AnimationClip.findByName( clips, 'dance' );
							 | 
						||
| 
								 | 
							
										const action = mixer.clipAction( clip );
							 | 
						||
| 
								 | 
							
										action.play();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Play all animations
							 | 
						||
| 
								 | 
							
										clips.forEach( function ( clip ) {
							 | 
						||
| 
								 | 
							
											mixer.clipAction( clip ).play();
							 | 
						||
| 
								 | 
							
										} );
							 | 
						||
| 
								 | 
							
										</code>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									</body>
							 | 
						||
| 
								 | 
							
								</html>
							 |