Lib ini dirancang untuk memudahkan proses penambahan iFacialMocap oleh Yasushi Emoto ke proyek Unity dengan proses konfigurasi yang disederhanakan melalui Unity Inspector.
Sebuah Thread untuk mendengarkan Paket UDP yang ketika diproses akan ditambahkan ke Antrian. Yang lain mengambil dari Antrean dan mendistribusikannya melalui UnityEvents ke thread utama. Ini menghilangkan kebutuhan untuk melakukan UDP Listens pada pembaruan frame.
Mengimplementasikan protokol komunikasi IFacialMocap ke dalam paket yang lebih bermanfaat tanpa memerlukan aplikasi pendamping IFacialMocap.
Dikembangkan di Unity 2018.4.33f1 Diuji di Unity 2020.3.0.
Impor paket Unity dalam rilis ke proyek Anda.
Tambahkan IFMService ke GameObject Kosong di adegan, dan ikat fungsi pengendali dalam adegan yang memiliki argumen IFMPacket .
Contoh skrip dengan handler akan melakukan hal berikut
public class Example : MonoBehaviour
{
public void OnMessage(IFMPacket packet)
{
//.. Do stuff ..
}
}
Untuk melihat contoh aksi UnityIFMLib, di Example/Scene buka salah satu adegan RiggedExample atau StaticMeshExample . Lihat interaksi antara objek Scene IFMService , CharacterFaceController dan Contoh Avatar yang digunakan dalam Scene.
Daripada menggunakan aplikasi iFacialMocap Companion, iFacialMocap harus terhubung ke aplikasi Unity secara langsung.
Anda dapat melakukannya dengan Membuka aplikasi iFacialMocap, dan menekan roda gigi di sebelah kanan layar. Dari sini Anda dapat mengatur ip tujuan ke host tempat aplikasi dijalankan di jaringan lokal.
Secara default, ketika IFMService diaktifkan, ia akan melakukan polling pada port IFM (default) 49983 setiap 5 detik hingga paket pertama diterima. Jika diterima, ada paket konfirmasi koneksi yang dikirim ke iFacialMocap, dan pemberitahuan konfirmasi akan muncul di sana.
Jika terjadi batas waktu, aplikasi akan mencoba lagi setiap 5 detik dan dialog konfirmasi muncul kembali.
Ketika IFMService dimatikan, mendengarkan port dinonaktifkan.
Paket IFM adalah objek siap diurai yang dibuat dari Pesan UDP
Blendshapes - Berisi Array Objek BlendshapeData .Head , LeftEye , RightEye yang semuanya merupakan Objek IFMTransform .Name yang berupa string, menggunakan nilai ARKit Blendshape. Catatan: singkatan protokol _L atau _R diganti dengan ARKit khusus Left Right masing-masing untuk konsistensi penamaan di seluruh bentuk campuranValue yang merupakan int dari 0 hingga 100. SetBlendshapeForRenderers(SkinnedMeshRenderer[]) - Mengulangi semua Renderer yang disediakan dan menerapkan blendshape jika berlakuPosition - Posisi Vector3 relatif terhadap kamera. Hanya kepala yang memiliki set iniEulerRotation - Vector3 Euler Derajat rotasi objek relatif terhadap kamera.Kelas utilitas dengan pembantu statis untuk pembuatan prototipe atau implementasi yang lebih cepat
ApplyBlendshapes(IFMPacket, SkinnedMeshRenderer[]) - Menerapkan IFMPacket.Blendshapes ke semua SkinnedMeshRenderers yang memiliki Blendshapes yang samaGetBlendshapeIndex(SkinnedMeshRenderer, string) - menjalankan GetBlendShapeIndex pada string, tetapi juga melakukan beberapa tindakan singkat untuk melewatkan seluruh pencarian jika mesh bersama adalah null atau jika blendshapecount kurang dari 1Bersumber dari proyek contoh aplikasi iFacialMocap Companion