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