Animação de cenário

O Sceneform permite importar modelos com animação. É possível usar as APIs Sceneform para reproduzir e controlar a animação e anexar nós a um esqueleto de um modelo.

Por exemplo, o exemplo de Animation (link em inglês) de cenas do cenário inclui arquivos usados para criar modelos do Android, do Android e de um boné de beisebol. O modelo Andy contém dados de animação, enquanto o boné de baseball é um modelo não animado. Quando você executa a amostra, Andy rompe os braços e acena com os braços enquanto o chapéu permanece fixo na cabeça dele usando um nó.

Animação de modelo de cena x animação de propriedade do Android

É importante diferenciar entre a animação de modelos no Sceneform e a animação de propriedade no Android.

  • As animações de modelos são criadas antecipadamente pelos artistas usando softwares de modelagem e animação. Eles contêm dados de animação esquelética. Essas animações precisam ser exportadas como arquivos *.fbx e, em seguida, importadas para um arquivo *.sfb para ser usado no Sceneform.

  • A animação de propriedade é um conceito fundamental do Android e não é específico ao Sceneform. Esse tipo de animação pode alterar qualquer valor mutável em um objeto Java que tenha um getter e um setter. Os valores animados podem ser definidos dinamicamente, mas não podem ser empacotados em um arquivo *.sfb.

    As animações de propriedade e modelo são compatíveis com a API Animator do Android's . Ambos são compatíveis com listeners, controle de reprodução (start/stop/end/pause/cancel), duração e atraso de início.

    Somente a compatibilidade limitada com a reprodução de TimeInterpolators é fornecida nas animações do modelo. A reprodução reversa não é compatível com animações de modelos.

  • Para ver a modelagem de animações do Sceneform em ação, consulte o exemplo de Animação (link em inglês).

  • Para ver a animação de propriedade usando o Sceneform em ação, consulte a amostra do Sistema solar.

Conceitos de animação de modelos

Antes de começar a trabalhar com modelos animados, é uma boa ideia entender conceitos específicos relacionados à animação esquelética, além de restrições e recursos relacionados que se aplicam à forma de cena.

  • Os benefícios. Um modelo animado contém ossos conectados entre si, formando relações pai-filho em uma hierarquia. A animação altera a posição e a orientação dos ossos durante a reprodução.

    Da mesma forma que mover um Node pai no Sceneform faz com que todos os Nodes filhos também se movam, movendo um osso pai no Sceneform move os filhos. Os ossos podem ser movidos por animação ou acessados como um nó pela classe SkeletonNode. Quando os ossos são acessados como Node, as novas posições são substituídas a cada frame por animação, se houver.

  • Esqueleto. O esqueleto compreende todos os ossos juntos, formando uma hierarquia de relações pai-filho.

    Por exemplo, um modelo de um braço humano pode conter ossos, como “quot;cotovelo esquerdo”/quot;, "cotovelo esquerdo, quot; A partir do ombro esquerdo, como pai dessa hierarquia, o braço superior esquerdo é atribuído como filho. Filhos de "esquerdo do braço superior" podem ser o "cotovelo esquerdo" e ossos inferiores. Quando o osso do ombro é girado, o braço, o antebraço, o cotovelo e quaisquer ossos abaixo se moverão juntos.

    O Sceneform não tem uma API para mudar as relações pai-filho entre ossos no esqueleto. Isso precisa ser feito antecipadamente em um pacote de animação e modelagem externo.

    Mesmo modelos que retratam objetos inorgânicos podem usar esqueletos para facilitar o realismo. Por exemplo, um modelo de um sofá pode ter ossos e um esqueleto.

  • Pele. A pele é um peso aplicado à malha de superfície desenhada do modelo. A posição e a forma da malha de pele são calculadas com base nos ossos próximos. Essa conexão de ossos a pele mapeia como o modelo se delimita, proporcionando um movimento mais realista.

    A aparência precisa ser preparada antecipadamente usando um pacote de modelagem e animação. O cenário pode mudar o material da malha de pele para mudar a aparência do modelo.