Grafik Status Animasi

Hai Kami di Playrix memutuskan untuk membuat Unity3D kami . Dan ada Animator. Dalam artikel ini saya akan memberi tahu Anda bagaimana kami membuatnya di rumah dan cara kerjanya.


Ketika kami mulai mendesain arsitektur grafik animasi kami, tentu saja kami melihat analog lain, khususnya di Unity Animator. Namun, kami ingin membuat solusi yang lebih universal. Tidak seperti Unity yang sama, kami memiliki penyesuaian status animasi melalui antarmuka pengontrol. Tapi pertama-tama, ada baiknya mencari tahu apa itu grafik keadaan animasi. Jika Anda sudah menemukan ini, masuk akal untuk melewati bagian pengantar dan beralih ke fitur implementasi.

Jadi apa sebenarnya grafik keadaan animasi ini?



Grafik status animasi memungkinkan Anda untuk mewakili transisi grafis antara berbagai kondisi animasi.

Ambil, misalnya, animasi karakter:


Kami memiliki model pria tiga dimensi dan ada beberapa animasinya:

  • diam - diam;
  • berjalan - maju;
  • duduk
  • halo - melambaikan tangan.

Pendekatan klasik untuk mengelola animasi adalah sebagai berikut: jika Anda ingin objek berdiri - hidupkan menganggur, berjalan - jalan, duduk - duduk. Tetapi ada kesulitan tertentu dengan ini.

Pertama, Anda perlu mengontrol durasi dan urutan animasi secara manual. Misalnya, agar seseorang dapat duduk, pertama-tama Anda harus memainkan animasi, bagaimana ia duduk, dan kemudian mulai memutar animasi yang dilingkarkan, di mana orang tersebut sudah duduk. Menyesuaikan sendi animasi ini dalam kode sulit dan tidak nyaman.

Kedua, sambungan antara animasi menjadi nyata jika ujung animasi tidak cocok, atau kita perlu memasukkan animasi lain di tengah yang sekarang. Dalam hal ini, sangat tidak mungkin untuk mencocokkan animasi dengan sempurna. Ingat game lama di mana animasi karakter berubah secara instan.

Grafik animasi dirancang untuk mengatasi masalah ini. Dengannya Anda tidak perlu mengoperasikan animasi secara manual, sekarang Anda beroperasi dengan status. Bagaimana sebuah objek akan dianimasikan untuk mencapai keadaan ini adalah karya animator dan desainer. Sekarang programmer tidak berpikir tentang waktu dan urutan animasi, dia hanya menunjukkan apa yang harus dimasukkan ke objek.

Juga, dengan grafik animasi, masalah bergabung dengan animasi menghilang. Dalam transisi antar negara, kita dapat membuat transisi yang mulus dari satu animasi ke animasi lainnya. Ini dilakukan dengan menggunakan bobot. Bobot adalah faktor pencampuran dari 0 hingga 1, di mana 0 berarti animasi tidak memengaruhi objek dengan cara apa pun, dan 1 sepenuhnya memengaruhinya.

Sebagai contoh, transisi antara berjalan (idle) dan berdiri (idle) sangat menuntut pengaturan proses. Kapan saja dalam animasi berjalan, karakter dapat berhenti. Oleh karena itu, transisi tidak dilakukan secara instan, tetapi untuk beberapa periode waktu kecil. Pada saat ini, berat berjalan berkurang dari 1 menjadi 0, dan berat berdiri meningkat dari 0 menjadi 1. Penting bahwa jumlah bobot sama dengan satu, jika tidak, artefak dapat muncul.

Bagaimana cara kerjanya?



Grafik terdiri dari status dan transisi. State adalah seperangkat pengontrol animasi, yang masing-masing dapat memainkan beberapa jenis animasi pada suatu objek atau menjalankan beberapa jenis logika. Kontroler memiliki titik masuk dan keluar - ini adalah saat-saat ketika grafik menyala negara dengan controller ini dan mematikannya sesuai. Pengontrol juga memiliki fungsi pembaruan, di mana, selain interval waktu dari bingkai terakhir, bobot transisi datang. Untuk mencampur animasi, itu harus diperhitungkan.

Pengendali memiliki satu antarmuka. Selain itu, pengembang dapat menambahkan pengontrol mereka. Misalnya, Anda bisa membuat pengontrol yang mengeksekusi semacam logika atau menetapkan teks pada sembulan, dll. Kustomisasi sederhana ini memungkinkan Anda untuk menggunakan grafik animasi dengan sangat fleksibel.

Kami juga memiliki variabel. Variabel-variabel ini dapat diatur secara eksternal, termasuk dari kode, dan kemudian membacanya di controller. Jadi, misalnya, Anda dapat mengganti beberapa jenis animasi untuk karakter dengan status yang sama. Secara umum, Anda bahkan dapat mengulangi paradigma transisi antar negara melalui variabel dan kondisi, seperti Unity. Dalam hubungannya dengan pengontrol yang dapat disesuaikan ternyata cukup nyaman.

Transisi dapat berupa angka apa saja. Banyak transisi dapat muncul dan keluar dengan cara yang sama tanpa batas. Transisi menentukan kemungkinan mencapai negara. Misalnya, jika tidak ada transisi langsung antara keadaan A dan F, tetapi ada rantai A → B → C → D → E → F, maka ketika Anda meminta transisi dari A ke F, grafik itu sendiri akan mengerti bahwa ia harus melalui negara perantara B, C, D , dan E.


Transisi memiliki pengaturan interval dan durasi mulai. Dengan durasinya, semuanya sederhana - inilah saatnya transisi akan dilakukan. Tetapi interval sudah lebih rumit: ini menentukan periode waktu yang dapat diterima untuk animasi ketika transisi dapat dimulai.

Misalnya, agar karakter dapat duduk, pertama-tama Anda harus memainkan animasi saat ia duduk, dan kemudian mulai animasi tempat duduk. Dalam hal ini, interval transisi dari "duduk" ke "duduk" harus di akhir animasi "duduk" sehingga kita dapat melihat bagaimana itu duduk, dan kemudian pada akhirnya dengan cepat tetapi lancar masuk ke animasi kursi.

Contoh lain: karakter sedang berjalan dan dia harus berhenti. Dalam hal ini, interval mulai transisi harus menjadi seluruh panjang animasi, karena karakter dapat berhenti kapan saja.

Grafik animasi melakukan semua pekerjaan terkait:

  • merencanakan cara menuju keadaan yang diperlukan;
  • Memperbarui status yang sedang berjalan
  • membuat transisi antar negara yang mulus;
  • menyesuaikan bobot di dalamnya.

Fitur menarik


Ada banyak jenis animasi di mesin Playrix: model 3D, Spine, Flash, efek partikel, animasi kerangka. Setiap jenis memiliki pengontrol spesifik.

Selain pengontrol animasi sederhana, kami memiliki beberapa yang tambahan. Misalnya, pengontrol acak. Ini mungkin termasuk daftar pengontrol lain dan kemungkinan pilihan mereka. Setiap kali suatu objek memasuki keadaan dengan pengontrol acak seperti itu, pemilihan acak dilakukan dengan mempertimbangkan probabilitas, dan pengontrol yang dipilih mulai berfungsi. Sisanya tidur dan tidak aktif, menunggu saat mereka.

Tapi kadang-kadang di satu negara kita perlu mengganti animasi. Misalnya, jika beberapa karakter memiliki grafik yang sama, dan semuanya memiliki semacam animasi tindakan. Satu karakter perlu mendapatkan sapu dan memulai balas dendamnya, yang lain untuk mengambil kameranya dan mulai mengambil gambar, yang ketiga adalah makan es krim. Untuk situasi seperti itu, ada pengontrol khusus, yang juga berisi daftar pengontrol, tetapi, tidak seperti yang acak, di sini ia memilih pengontrol tergantung pada variabel.

Variabel diatur dalam grafik dan dapat diubah secara eksternal, misalnya dari kode. Dalam contoh ini, tipe string digunakan, dan setiap tipe tindakan sesuai dengan nilai variabel tertentu. Ketika sebuah karakter dibuat dalam game, variabel ini diatur untuknya tergantung pada perilaku yang diinginkan.

Kami juga memiliki pengontrol yang dapat mencampur banyak animasi. Misalnya, Anda dapat mencampur animasi berjalan, kiri, kanan, dan maju. Dengan demikian, saat menikung, Anda dapat mengatur bobot di antara mereka sehingga kaki karakter tidak terpeleset dan berjalan tampak alami.

Kita harus masuk lebih dalam



Ada banyak keuntungan dari kenyataan bahwa kita membuat Persatuan kita. Salah satunya adalah bahwa kita dapat melakukan apa yang kita inginkan dan apa yang kita inginkan. Dan kami ingin kesempatan tak terbatas untuk memperluas grafik animasi.

Kami memiliki antarmuka pengontrol, ada beberapa pengontrol "out of the box" dan ada kemampuan untuk mengimplementasikan antarmuka dan melakukan apa pun di dalamnya (dan belum tentu animasi):

  • ubah teks pada tombol;
  • berinteraksi dengan objek lain dalam hierarki;
  • dan bahkan mengelola grafik animasi lain.

Kami menggunakan pendekatan ini di pengunjung ke kebun binatang di game Wildscapes. Setiap pengunjung memiliki dua grafik: satu untuk menjiwai model, yang lain untuk menjiwai perilaku.

Grafik pertama cukup sederhana, ini mengontrol berjalan, dapat memainkan beberapa animasi karakter terpisah.

Grafik kedua jauh lebih rumit dan memiliki beberapa skenario perilaku. Misalnya, pertama-tama karakter berjalan, lalu duduk di bangku, menyapa seseorang, mengambil gambar dan melanjutkan. Ini adalah cabang negara bagian yang terpisah.

Logika ini dapat ditempatkan pada kolom pertama, tetapi kemudian animasi akan digandakan berkali-kali. Tetapi dengan dua grafik, semuanya jauh lebih sederhana. Grafik kontrol berisi rantai status, termasuk status dari grafik pertama, yang berjalan secara paralel.


Apa selanjutnya


Grafik kami sudah tahu banyak, tetapi masih ada banyak ruang untuk pengembangan. Rencana membuat pengelompokan beberapa negara bagian, dengan bersarang. Ini akan sangat menyederhanakan kolom pencarian. Rencana tersebut juga mencakup pekerjaan untuk meningkatkan tampilan grafik dan tautan. Sekarang koneksi pada grafik besar menyerupai spaghetti (bahkan warnanya mirip), dan kadang-kadang mudah untuk bingung.

Source: https://habr.com/ru/post/id471956/


All Articles