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?
Jawaban:
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.
sumber