Dasar-dasar Pencampuran Animasi

23

Katakanlah saya memiliki kerangka kerja dengan karakter yang dapat berlari dan berjalan dan tentu saja, diam.

Apakah saya benar dalam berpikir bahwa pencampuran animasi adalah proses transisi dengan lancar antara ini dengan menghasilkan animasi dinamis saat runtime?

Jika demikian, apa teori dasar tentang bagaimana ini bekerja, dan bagaimana saya akan menerapkannya?

SirYakalot
sumber
1
Saya percaya itu hanya interpolasi linier antara masing-masing tulang dari frame terakhir dari satu animasi ke frame pertama yang lain.
anonim
Atau interpolasi linier dengan smoothstep, jika Anda ingin rata-rata tertimbang (:
Gustavo Maciel
@ Gustavo-Gtoknu dapatkah Anda menjelaskan lebih banyak tentang apa yang baru saja Anda katakan?
SirYakalot
Anda melakukan interpolasi linier dalam alpha dari kedua frame yang akan dicampur, pada kebalikan dari yang lain. keduanya dalam fungsi waktu. Anda dapat memuluskan langkah atau menggunakan rata-rata tertimbang dalam interpolasi untuk memiliki efek yang berbeda.
Gustavo Maciel

Jawaban:

18

Campuran animasi karakter lebih umum dan dapat digunakan untuk:

  • Menghitung transisi yang mulus antara 2 klip;
  • Membuat animasi yang sama sekali baru dari yang sudah ada (berpotensi lebih dari 2 sekaligus);
  • Mencapai perilaku seperti IK;
  • dll.

Ide dasarnya adalah bahwa untuk dua kerangka identik dengan klip animasi yang berbeda, untuk setiap rotasi sambungan, Anda menghitung nilai di antaranya. Klip animasi direpresentasikan dengan rotasi. Jadi interpolasi linier bukan yang harus Anda gunakan jika Anda ingin hasil yang akurat (bahkan jika Anda menggunakan sudut Euler). Anda dapat menggunakan slerp misalnya tetapi ada solusi yang lebih kompleks.

Ini adalah masalah kompleks dengan solusi kompleks. Pada dasarnya, jika Anda memiliki dua klip animasi A dan B:

  • Jika A dan B benar-benar berbeda (blending jump dan swim), maka kemungkinan Anda akan mendapatkan hasil yang aneh / lucu;
  • Jika A dan B serupa (dua klip animasi berjalan), maka, Anda harus terlebih dahulu menyinkronkannya untuk berbaur ketika kedua kaki kiri berada di tanah misalnya.
  • dll.

Jika Anda tertarik, saya sarankan Anda mulai dengan membaca artikel ini sehingga Anda dapat lebih memahami apa kesulitannya: http://graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf

Ini bukan yang terbaru, tetapi mudah dibaca.

Saya harap ini membantu. Salam Hormat.

Korchkidu
sumber
5

Pertama, saya menganggap Anda berbicara tentang animasi kerangka (terutama grafis 3D) karena animasi campuran cukup banyak hanya berlaku untuk animasi kerangka. Jika Anda berbicara tentang animasi berbasis sprite 2D (Anda tidak menentukan dalam pertanyaan Anda) maka Anda dapat melupakan blending animasi.

Dengan itu keluar dari jalan ...

Apakah saya benar dalam berpikir bahwa pencampuran animasi adalah proses transisi dengan lancar antara ini dengan menghasilkan animasi dinamis saat runtime?

Cukup banyak artinya, ya. Namun demikian, frasa "menghasilkan animasi dinamis" agak menyesatkan; yang mengingatkan animasi prosedural dan itu bukan apa yang Anda lakukan.

"Animation blending" adalah ketika Anda melakukan transisi antara dua klip animasi dengan menggunakan sedikit kedua animasi dengan bobot satu klip naik sementara bobot klip lainnya turun. Ini bekerja paling baik dengan animasi kerangka, sehingga rotasi setiap sambungan diatur ke titik tengah antara animasi sambungan itu dalam dua klip animasi yang berbeda, dengan bobot setiap klip berubah seiring waktu. Artinya, Anda akan menghitung rotasi setiap sendi seperti:

rotCombined = weightA*rotA + weightB*rotB

Sekarang, sementara animasi campuran bekerja paling baik dengan animasi kerangka, Anda juga dapat melakukannya dengan animasi vertex (mis. MD2). Ini lebih merupakan catatan sejarah karena beberapa mesin game modern menggunakan animasi vertex, tetapi Anda dapat mengatur posisi vertex dengan cara yang sama, sebagai pembobotan antara posisi vertex dalam dua animasi yang berbeda. Ini dapat menghasilkan beberapa interpolasi yang tampak aneh (mis. Bagian jala runtuh atau berputar ke dalam) jika kedua animasi terlalu berbeda, sedangkan animasi kerangka memastikan bahwa berbagai bagian jala tetap utuh.

jhocking
sumber
Ketika Anda mengatakan Anda tidak dapat melakukan ini dengan grafis 2D, maksud Anda animasi berbasis sprite? Saya mencoba mencari tahu bagaimana memadukan beberapa animasi 2D yang dibuat di mecanim berdasarkan posisi & rotasi setiap bagian tubuh, tetapi saya tidak mengerti mengapa itu tidak mungkin hanya karena mereka 2D.
mallardz
Karena tidak ada cara untuk menghasilkan bingkai baru dalam animasi sprite. Dalam animasi 3D, gambar individual tidak dibuat sebelumnya.
jhocking
Saya mengerti, tetapi animasi 2D tidak harus semata-mata didasarkan pada perubahan seluruh sprite. Anda dapat membuat objek dari beberapa sprite dan menghidupkan rotasi dan posisi mereka, dll. Saya mencoba mencari tahu bagaimana melakukan ini ketika saya membaca jawaban Anda, dan baris pertama Anda membuat saya sedih :(! Tapi untungnya ternyata itu sangat mudah dilakukan di Unity dan saya bayangkan tidak lebih sulit daripada pencampuran 3D bagi mereka yang menggulung mesin mereka sendiri
mallardz
1
ah ya saya maksud animasi berbasis sprite, saya akan mengedit jawaban saya
jhocking