Cara umum menghidupkan 'gerakan' untuk animasi siklus berjalan


13

Saya baru saja memposting ini di forum artis Blender sebelum menyadari bahwa saya mungkin akan mendapatkan respons yang lebih baik dari audiens yang lebih spesifik dengan pengembangan game, jadi permintaan maaf untuk posting silang! Itu untuk alasan yang tepat :)

Saya seorang programmer mencoba menghidupkan karakter berjalan untuk proyek game, menggunakan Ogre. Saya telah membuat siklus berjalan yang sangat sederhana di Blender dan mengekspornya ke Ogre, dan itu berfungsi dengan baik. Baik, maksud saya itu berhasil, tapi ada yang mengerikan meluncur. Ini karena saya hanya menghidupkan jalan di tempat (di tempat asal) di Blender, dan tentu saja saya tidak tahu "kecepatan jalan" apa yang sesuai, jadi ketika saya memindahkan karakter dalam permainan, gerakannya tidak t tentu cocok dengan gerakan kaki dalam animasi.

Jadi pertanyaan saya adalah: apa pendekatan normal untuk hal semacam ini? Di tempat kerja kita menggunakan Maya, dan animator menganimasikan simpul khusus 'moveTrans' yang mewakili "posisi" karakter (atau meminta eksportir membuatkannya untuk mereka dari pergerakan simpul akar), lalu permainan dapat membaca ini untuk mengetahui seberapa cepat animasi menggerakkan karakter. Jadi dalam file Maya, karakter akan berjalan maju untuk satu siklus dan simpul tambahan ini akan mengikuti mereka dengan kaki mereka. Saya belum pernah melihat yang seperti ini di tanah sumber terbuka, dan tentu saja tidak ada ketentuan untuk itu dalam skrip Eksportir Ogre. Apa yang biasanya Anda lakukan untuk ini?


1
Inilah diskusi dengan beberapa penjelasan konsep yang fantastis: blog.wolfire.com/2011/08/...
Ben Hymers

Jawaban:


10

Ada dua cara untuk melakukannya: gerakan root atau "dalam kode".

Dengan gerakan root, pada dasarnya Anda memiliki apa yang Anda sarankan dengan simpul "moveTrans". Anda menggunakan gerakan objek itu untuk menentukan seberapa cepat memutar siklus jalan. Anda mungkin dapat melakukan semacam pencarian terbalik untuk mengetahui bahwa jika Anda ingin berada pada posisi X bingkai apa yang Anda butuhkan. Tetapi keuntungan nyata dari gerakan root adalah untuk mendapatkan animasi yang benar-benar realistis, Anda perlu memperhitungkan fakta bahwa gerakan itu bukan jalur linier sejati. Orang sungguhan bergerak dengan kecepatan variabel dari waktu ke waktu, atau mungkin mereka bergerak sedikit ke kiri dan ke kanan, atau apa pun.

Mixamo melakukan contoh yang baik dengan kontrol gerakan root menggunakan Unity. Ada video di sini: http://vimeo.com/12052874

Sekarang gerakan root memang memiliki kekurangannya. Ini bisa menjadi rumit dengan hal-hal seperti mencoba untuk mendapatkan "berjalan" animasi untuk bekerja di tangga (idealnya Anda akan memiliki tangga / tangga memanjat anim yang berbeda dan melakukan semua gerakan untuk itu dalam animasi juga). Saya juga tidak begitu yakin bagaimana IK benar-benar berperan dalam hal itu.

Sekarang melakukannya "dalam kode" jauh lebih mudah dari sisi pemrograman. Yang saya sarankan lakukan adalah pertama-tama memastikan semua unit Anda konsisten. Misalnya, 1 unit di Maya dan gim Anda 1 meter. Kemudian Anda membuat artis Anda menggerakkan karakter berjalan (lengkap dengan gerakan maju). Gunakan itu untuk mengetahui kecepatan animasi, dan ekspor animasi tanpa kecepatan maju. Gunakan itu untuk mengetahui seberapa cepat untuk memutar ulang animasi. Jadi jika animasi berjalan pada kecepatan 1x adalah 5 m / s, dan Anda ingin agar pemain berjalan pada 7 m / s, Anda cukup memutar ulang pada 7/5 = kecepatan 1,4x. Jika model Anda diskalakan ke atas atau ke bawah, gandakan laju pemutaran animasi dengan kebalikan skala. Bung setengah tinggi harus berjalan dua kali lebih cepat untuk bergerak dengan kecepatan yang sama dengan pria berskala 1x.


Saya belum pernah melihat Root Motion Computer dari Mixamo, saya juga belum pernah mendengarnya, jadi terima kasih untuk tautan dan penjelasannya! Jadi pada dasarnya seperti yang saya pikirkan, baik menghidupkannya secara eksplisit atau menghasilkan secara otomatis, dan baik pada saat membangun atau saat runtime. Saya kira saya harus membuat kode ini sendiri di skrip eksportir. Satu hal yang saya bingung tentang adalah gerakan yang berubah selama satu siklus - bagaimana Anda bisa mengendarainya dari gameplay? "Bergerak dengan kecepatan 5 m / s" sekarang berarti sesuatu yang lain ... Dan perubahan arah akan menjadi mimpi buruk bagi AI! Mungkin lebih baik menggunakan gerakan agerage?
Ben Hymers

Kehabisan karakter; Saya akan menunggu sedikit sebelum menandai ini sebagai diterima untuk mendapatkan lebih banyak pendapat. Terima kasih atas jawaban anda!
Ben Hymers

Untuk gerakan root, Anda tidak mengontrol kecepatan pemain secara langsung. Anda hanya memiliki kendali, benar-benar, dari pemutaran laju animasi dan kemudian Anda membiarkan animasi berada dalam kendali langsung dari nilai forward z. Contoh 5m / s yang saya berikan adalah cara tradisional untuk menyelesaikan geser kaki, yaitu mencoba menyesuaikan tingkat pemutaran dengan seberapa cepat Anda bergerak dan dengan asumsi kecepatan konstan.
Tetrad

Sebagai seorang programmer gameplay, itu terdengar seperti mimpi buruk yang lengkap :) Menempatkan animator mengendalikan sesuatu yang sama pentingnya dengan kecepatan gerakan apa pun yang dianimasikan? Tidak, terima kasih! Saya lebih suka mengekstraksi informasi sehingga saya bisa membalikkannya dan mengatur kecepatan putar animasi berdasarkan kecepatan gerakan, daripada sebaliknya. Itu sebabnya gerakan nonlinear membingungkan saya, dan mungkin itu alasan yang baik untuk melakukannya sebaliknya.
Ben Hymers

Gah, kutukan Bursa Stack karena memasukkan komentar pada mencoba memulai baris baru ... Aku akan mengatakan, bahkan jika Anda membiarkan animasi mendorong gerakan, itu masih akan menjadi masalah untuk misalnya karakter AI. Bagaimana jika mereka mencoba untuk sampai ke suatu titik tetapi animasi gerakan mereka meluncur dari sisi ke sisi (katakanlah, itu adalah animasi sempoyongan mabuk)? Bagaimana mereka bisa tahu ke arah mana harus menghadap?
Ben Hymers
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.