Основи змішування анімації


23

Скажіть, у мене є рамка з персонажами, які можуть бігати і ходити, і, звичайно, стояти на місці.

Чи правильно я думаю, що змішування анімації - це процес плавного переходу між ними, створюючи динамічні анімації під час виконання?

Якщо так, то яка основна теорія того, як це працює, і як би я це здійснив?


1
Я вважаю, що це просто лінійна інтерполяція між кожною з кісток від останнього кадру однієї анімації до першого кадру іншого.
анонімно

Або лінійна інтерполяція з плавним кроком, якщо ви хочете середньозважений (:
Густаво Мацель

@ Gustavo-Gtoknu, чи можете ви пояснити більше того, що ви сказали?
SirYakalot

ви робите лінійну інтерполяцію в альфа обох кадрів, які слід змішати, на зворотному рівні іншого. обидва у функції часу. Ви можете плавно крокувати або використовувати середньозважене середнє значення в інтерполяції, щоб мати різний ефект.
Gustavo Maciel

Відповіді:


18

Змішування анімації символів є більш загальним і може використовуватися для:

  • Обчислення плавних переходів між 2 кліпами;
  • Створення абсолютно нових анімацій із існуючих (потенційно більше 2 одночасно);
  • Досягнення ІК-подібної поведінки;
  • тощо.

Основна ідея полягає в тому, що для двох однакових скелетів з різними анімаційними кліпами для кожного обертання спільного ви обчислюєте значення між ними. Анімаційні кліпи представлені обертаннями. Отже, лінійна інтерполяція - це не те, що слід використовувати, якщо ви хочете точних результатів (навіть якщо ви використовуєте кути Ейлера). Наприклад, ви можете використовувати slerp, але існують більш складні рішення.

Це складна проблема зі складними рішеннями. В основному, якщо у вас є два анімаційні кліпи A і B:

  • Якщо A і B зовсім інші (змішування стрибка і плавання), то, швидше за все, у вас будуть дивні / смішні результати;
  • Якщо A і B схожі (два анімаційні кліпи для ходьби), то спочатку потрібно їх синхронізувати, щоб їх змішати, наприклад, коли обидві ліві ноги опиняються на землі.
  • тощо.

Якщо ви зацікавлені, пропоную вам прочитати цю статтю, щоб ви могли краще зрозуміти, які труднощі: http://graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf

Це не найсучасніший, але його легко читати.

Я сподіваюся, що це допомагає. З повагою.


5

По-перше, я припускаю, що ви говорите про скелетну анімацію (особливо 3D-графіку), оскільки змішування анімації в основному стосується лише скелетної анімації. Якщо ви говорите про 2D-спрайт-анімації (ви не вказали у своєму запитанні), ви можете майже забути про змішування анімації.

З цим не виходить ...

Чи правильно я думаю, що змішування анімації - це процес плавного переходу між ними, створюючи динамічні анімації під час виконання?

Це майже що означає цей термін, так. Ця фраза "створення динамічної анімації" є крихітним оманливим; що враховує процедурну анімацію, і це не зовсім те, що ви робите.

"Змішування анімації" - це коли ви переходите між двома анімаційними кліпами, використовуючи трохи обох анімацій, коли зважування одного кліпу збільшується, а зважування іншого кліпу зменшується. Це найкраще справляється зі скелетною анімацією, так що обертання кожного суглоба встановлюється на середину між анімацією цього спільного у двох різних анімаційних кліпах, при цьому зважування кожного кліпу змінюється з часом. Тобто, ви обчислили б обертання кожного суглоба приблизно так:

rotCombined = weightA*rotA + weightB*rotB

Тепер, хоча змішування анімації найкраще працює зі скелетною анімацією, ви також можете це робити за допомогою вершинної анімації (наприклад, MD2). Це більше історична примітка, оскільки мало сучасних ігрових двигунів використовують вершинну анімацію, але ви можете встановити вершинні позиції таким же чином, як зважування між вершинними положеннями у двох різних анімаціях. Це може призвести до деяких дивних інтерполяцій (наприклад, частини сітки руйнуються або перетворюються назовні), якщо дві анімації будуть занадто різними, тоді як скелетна анімація забезпечує збереження цілих частин сітки.


Коли ви говорите, що не можете цього зробити з двовимірною графікою, ви маєте на увазі спрайт-анімацію? Я намагаюся дізнатися, як поєднувати деякі 2D-анімації, створені в mecanim, на основі положення та обертання окремих частин тіла, але я не бачу, чому це неможливо лише тому, що вони 2D.
mallardz

Тому що немає можливості генерувати нові кадри в анімації спрайту. У 3D-анімації окремі зображення не генеруються достроково.
поштовх

Я розумію, але 2D-анімація не повинна базуватися лише на зміні всього спрайту. Ви можете скласти об'єкт з декількох спрайтів і оживити їх обертання та положення і т. Д. Я намагався дізнатися, як це зробити, коли я прочитав вашу відповідь, і ваш перший рядок розчарував мене :(! Але, на щастя, виявляється, це дуже це легко зробити в Unity, і я думаю, що не складніше, ніж 3D-суміш для тих, хто працює власними двигунами
mallardz

1
ах так, я мав на увазі анімацію на основі спрайту, я відредагую свою відповідь
джак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.