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.
		
		
		
		
		
			
		
			
				
					
					
						
							149 lines
						
					
					
						
							5.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							149 lines
						
					
					
						
							5.6 KiB
						
					
					
				
								<!DOCTYPE html>
							 | 
						|
								<html lang="pt-br">
							 | 
						|
									<head>
							 | 
						|
										<meta charset="utf-8" />
							 | 
						|
										<base href="../../../" />
							 | 
						|
										<script src="page.js"></script>
							 | 
						|
										<link type="text/css" rel="stylesheet" href="page.css" />
							 | 
						|
									</head>
							 | 
						|
									<body>
							 | 
						|
										<h1>Sistema de animação</h1>
							 | 
						|
								
							 | 
						|
										<h2>Visão geral</h2>
							 | 
						|
								
							 | 
						|
										<p class="desc">
							 | 
						|
								
							 | 
						|
											No sistema de animação three.js, você pode animar várias propriedades de seus modelos:
							 | 
						|
											os ossos (bones) de um [page:SkinnedMesh skinned e rigged model], morph targets, 
							 | 
						|
								            diferentes propriedades de material
							 | 
						|
											(cores, opacidade, booleanos), visibilidade e transformações. As propriedades animadas podem ser utilizadas com fade in,
							 | 
						|
											fade out, crossfaded e warped. As escalas de peso e tempo de diferentes
							 | 
						|
											animações no mesmo objeto, bem como em objetos diferentes, podem ser alteradas
							 | 
						|
											independentemente. Várias animações no mesmo objeto e em objetos diferentes podem ser
							 | 
						|
											sincronizadas.<br /><br />
							 | 
						|
								
							 | 
						|
											Para conseguir tudo isso em um sistema homogêneo, o sistema de animação three.js
							 | 
						|
											[link:https://github.com/mrdoob/three.js/issues/6881 mudou completamente em 2015]
							 | 
						|
											(cuidado com informações desatualizadas!), e agora tem uma arquitetura semelhante à
							 | 
						|
											Unity/Unreal Engine 4. Esta página fornece uma breve visão geral dos principais componentes do
							 | 
						|
											sistema e como eles trabalham juntos.
							 | 
						|
										
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>Clipes de animação (Animation Clips)</h3>
							 | 
						|
								
							 | 
						|
										<p class="desc">
							 | 
						|
								
							 | 
						|
											Se você importou com sucesso um objeto 3D animado (não importa se
							 | 
						|
											bones ou morph targets ou ambos) — por exemplo, exportando-o do Blender com o
							 | 
						|
											[link:https://github.com/KhronosGroup/glTF-Blender-IO glTF Blender] e
							 | 
						|
											carregando-o em uma cena three.js usando [page:GLTFLoader] — um dos campos da resposta
							 | 
						|
											deve ser um array chamado "animations", contendo o [page:AnimationClip AnimationClips]
							 | 
						|
											para este modelo (veja uma lista de carregadores possíveis abaixo).<br /><br />
							 | 
						|
								
							 | 
						|
											Cada `AnimationClip` geralmente contém os dados de uma determinada atividade do objeto. Se o
							 | 
						|
											mesh é um personagem, por exemplo, pode haver um AnimationClip para caminhar, um segundo
							 | 
						|
											para salto, um terceiro para contornar e assim por diante.
							 | 
						|
										
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>Keyframe Tracks</h3>
							 | 
						|
								
							 | 
						|
										<p class="desc">
							 | 
						|
								
							 | 
						|
											Dentro de tal 'AnimationClip' os dados para cada propriedade animada são armazenados em um
							 | 
						|
											[page:KeyframeTrack] separado. Supondo que um objeto de personagem tenha um [page:Skeleton esqueleto] (skeleton),
							 | 
						|
											uma keyframe track pode armazenar os dados para as mudanças de posição do osso do antebraço
							 | 
						|
											ao longo do tempo, uma faixa diferente dos dados para as mudanças de rotação do mesmo osso, uma terceira
							 | 
						|
											a posição da pista, rotação ou dimensionamento de outro osso, e assim por diante. Deve ficar claro,
							 | 
						|
											que um AnimationClip pode ser composto de muitas dessas tracks.<br /><br />
							 | 
						|
								
							 | 
						|
											Supondo que o modelo tenha morph targets (por exemplo, um
							 | 
						|
											morph target mostrando um rosto amigável e outro mostrando um rosto irritado), cada track contém as
							 | 
						|
											informações sobre como a [page:Mesh.morphTargetInfluences influence] de um certo morph target
							 | 
						|
											muda durante a execução do clipe.
							 | 
						|
								
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>Animation Mixer</h3>
							 | 
						|
								
							 | 
						|
										<p class="desc">
							 | 
						|
								
							 | 
						|
											Os dados armazenados formam apenas a base para as animações - a reprodução real é controlada pelo 
							 | 
						|
											[page:AnimationMixer]. Você pode imaginar isso não apenas como um player de animações, mas
							 | 
						|
											como uma simulação de um hardware como um mixer real, que pode controlar várias animações
							 | 
						|
											simultaneamente, misturando-os e fundindo-os.
							 | 
						|
								
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>Ações de animação (Animation Actions)</h3>
							 | 
						|
								
							 | 
						|
										<p class="desc">
							 | 
						|
								
							 | 
						|
											O próprio `AnimationMixer` tem muito poucas propriedades e métodos (gerais), porque
							 | 
						|
											pode ser controlado por [page:AnimationAction AnimationActions]. Ao configurar um
							 | 
						|
											`AnimationAction` você pode determinar quando um certo `AnimationClip` deve ser reproduzido, pausado
							 | 
						|
											ou parado em um dos mixers, se e com que frequência o clipe deve ser repetido, seja
							 | 
						|
											executado com um fade ou uma escala de tempo, e algumas coisas adicionais, como crossfading
							 | 
						|
											ou sincronização.
							 | 
						|
								
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>Animação de Grupos de Objetos</h3>
							 | 
						|
								
							 | 
						|
										<p class="desc">
							 | 
						|
								
							 | 
						|
											Se você quiser que um grupo de objetos receba um estado de animação compartilhado, você pode usar um
							 | 
						|
											[page:AnimationObjectGroup].
							 | 
						|
								
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>Formatos e Loaders suportados</h3>
							 | 
						|
								
							 | 
						|
										<p class="desc">
							 | 
						|
											Observe que nem todos os formatos de modelo incluem animação (notadamente o OBJ não inclui), e que apenas alguns
							 | 
						|
											loaders do three.js suportam sequências [page:AnimationClip AnimationClip]. Vários que <i>tem</i>
							 | 
						|
											suporte para este tipo de animação:
							 | 
						|
										</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">
							 | 
						|
											Observe que o 3ds max e o Maya atualmente não podem exportar várias animações (ou seja, animações que não estão
							 | 
						|
											na mesma linha do tempo) diretamente para um único arquivo.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h2>Exemplo</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>
							 | 
						|
								
							 |