Si tikus masih belum mau berkedip
Oleh Oleg Sidorkin, CTO dan Co-Founder Cinevva
Kami telah mencurahkan banyak pekerjaan pada berbagai alat yang menghidupkan model Anda di Cinevva: memasang rig, menerapkan animasi, dan memperbaiki detail-detail janggal yang muncul saat model mulai bergerak. Pekerjaan itu membawa kami menghadapi kaki yang tidak mau menekuk, transfer animasi, dan ekor tanpa tulang untuk menggerakkannya.
Sekarang saya ingin memberikan emosi kepada karakter-karakter tersebut. Karakter seharusnya dapat terlihat terkejut, kesal, atau senang, bukan sekadar berjalan melintasi sebuah adegan. Artinya, wajahnya harus bisa bergerak: kelopak mata, alis, pipi, dan mulut yang mampu melakukan lebih dari sekadar mempertahankan pose istirahatnya.
Kami mulai mempelajari riset terbaru tentang rigging wajah untuk mengetahui sejauh mana kami dapat mengubah mesh yang sudah ada menjadi ekspresi yang dapat digunakan. Ini adalah laporan pertama dari pekerjaan tersebut: apa yang benar-benar dapat kami jalankan, bagaimana kami menyiapkan karakternya, dan apa yang terjadi ketika kami mencobanya.
Subjek pengujian kami adalah tikus dari eksperimen ekor sebelumnya. Tikus ini sudah memiliki rig tubuh dan enam klip animasi. Ia dapat berjalan, melompat, dan berlari cepat, tetapi wajahnya tetap kaku di sepanjang semua animasi itu.
Kami mencoba NFR, sebuah implementasi riset yang mentransfer ekspresi ke mesh wajah yang diberikan. Hasil pertamanya berupa lembaran pose berlabel rahang terbuka, tersenyum, berkedip, mengerucutkan bibir, dan mengangkat alis. Saya tidak melihat banyak animasi yang berguna di dalamnya. Rahangnya menarik moncong ke sana kemari; sebagian besar gambar lainnya terlihat nyaris sama.
Ada masalah persiapan yang perlu diperbaiki sebelum kami menilai hasilnya. Kami telah memotong sebagian besar tepian mata tikus saat membuat mesh masukan. Jadi, kami mengulangi pemotongannya, menjalankan prosesnya lagi, lalu merender kedua percobaan dalam gerakan. Berikut hasilnya.
Apa yang dimasukkan ke NFR
Karakter lengkapnya memiliki 22.744 vertex hasil ekspor dan 30 joint, tetapi tidak memiliki blendshape wajah maupun tulang khusus untuk rahang dan mata. Kami perlu menambahkan kontrol wajah tanpa mengganggu rig yang sudah ada.
Persyaratan masukan NFR menjelaskan mengapa kami tidak dapat begitu saja memberikan berkas GLB kepadanya. NFR mengharapkan permukaan wajah dengan bagian mata dan mulut yang telah dilubangi, tanpa struktur internal dan bola mata, serta mesh yang kurang lebih disejajarkan dengan contoh-contohnya. Kami menghapus bagian belakang kepala, telinga, dan leher, membuat bukaan, lalu mempertahankan bagian terhubung yang paling besar. Hasilnya menyisakan 777 vertex dan 1.296 segitiga.
Setiap vertex dalam potongan ini masih berkorespondensi dengan sebuah posisi pada karakter asli. Setelah inferensi, kami mengurangi setiap ekspresi hasil prediksi dengan wajah netral hasil prediksi, mengonversi offset kembali ke skala tikus, lalu menerapkannya pada vertex asli yang sesuai. Gerakannya dibuat memudar di dekat tepi potongan agar tidak berhenti secara mendadak di tempat wajah bertemu dengan bagian kepala lainnya.
Proses ini menghasilkan sembilan blendshape: offset vertex tersimpan yang dapat dipadukan oleh slider ke dalam mesh netral. Mengatur semua slider ke nol akan mengembalikan tikus ke bentuk aslinya. Kami mempertahankan kerangka, tekstur, dan enam klip animasi tubuhnya, lalu menambahkan klip pengujian terpisah untuk setiap ekspresi.
Proses inferensinya sendiri memerlukan waktu sekitar tujuh detik pada T4 setelah checkpoint dan masukan dimuat. Mendapatkan ekspresi yang dapat digunakan ternyata akan memerlukan waktu lebih lama.
Kami telah memotong bagian-bagian yang dibutuhkan
Potongan mata pertama kami berbentuk elips lebar. Pada wajah ini, bentuk tersebut menghilangkan sebagian besar tepian di sekeliling setiap mata. Potongan mulutnya berada di bawah garis bibir yang terlihat. Kedua kesalahan tersebut tidak tampak jelas dari angka-angka yang mendeskripsikan mesh: koordinatnya terbatas, tanpa segitiga terdegenerasi, dan tanpa tepi nonmanifold.
Namun, jika Anda melihat potongannya, masalahnya cukup jelas. Kami meminta gerakan kelopak mata setelah membuang sebagian besar permukaan yang mungkin dapat membentuk gerakan itu.
Untuk percobaan kedua, kami merender kepala dari depan dan dari dua sudut miring. Saya menggunakan pemahaman gambar dari asisten untuk membantu menandai bukaan mata, tepian mata, garis mulut, moncong, hidung, alis, dan kumis. Garis-garis tersebut diproyeksikan ke segitiga yang terlihat pada mesh asli. Dengan mempertahankan data proyeksi dan ID segitiga, kami dapat memeriksa bagian wajah sebenarnya yang bertahan dari setiap pemotongan.

Kami menandai 131 segitiga yang terlihat sebagai bagian dari kedua tepian mata. Potongan pertama hanya mempertahankan 25 di antaranya. Potongan baru mempertahankan 123. Ini merupakan peningkatan yang berguna pada masukan, meskipun pengukuran retensinya didasarkan pada anotasi kami sendiri, bukan akurasi segmentasi independen.
Kami juga mengubah penyelarasannya. Alih-alih mencocokkan cakupan referensi sebelumnya, kami menggunakan landmark wajah yang berkorespondensi untuk menentukan skala dan posisi yang seragam. Potongan baru memiliki 586 vertex dan 952 segitiga. Potongan tersebut masih memiliki celah dan batas terbuka; proses ini hanya memilih geometri yang sudah ada, bukan membuat kelopak mata baru atau bagian dalam mulut.
Lebih banyak gerakan, lebih banyak peregangan
Proses kedua menggunakan bobot dan sembilan kontrol ekspresi yang sama. Kali ini saya ingin melihat seluruh gerakannya, jadi kami merender tingkat kekuatan antara pose netral dan setiap ekspresi penuh, lalu kembali ke posisi netral. Video di bagian atas memperlihatkan kedua versi dengan pencahayaan yang identik.
Matanya masih tetap terbuka. Kontrol rahang mengubah bentuk moncong tanpa menghasilkan bukaan mulut yang meyakinkan. Beberapa kontrol mulut menghasilkan lebih banyak gerakan daripada sebelumnya, khususnya bentuk corong, tetapi permukaannya ikut terdistorsi.
Kami memeriksa panjang tepi untuk mengukur distorsi tersebut. Untuk setiap tepi pada mesh karakter, kami membagi panjangnya saat ekspresi penuh dengan panjangnya dalam keadaan netral, lalu menghitung tepi yang memanjang lebih dari dua kali lipat.
| Kontrol | Potongan pertama: tepi di atas 2× | Potongan revisi: tepi di atas 2× | Peregangan terburuk pada revisi |
|---|---|---|---|
| Rahang terbuka | 13 | 44 | 5,27× |
| Senyum kiri | 0 | 30 | 5,53× |
| Mulut berbentuk corong | 0 | 89 | 11,29× |
Tepi yang pendek dapat menghasilkan rasio besar, jadi saya tidak akan menggunakan angka ini saja untuk menilai rig wajah. Dalam kasus ini, hasilnya sesuai dengan yang terlihat pada render. Mulut versi revisi bergerak lebih banyak, dan sebagian gerakan tersebut berupa peregangan yang tidak kami inginkan.
Kami mengubah tiga hal sekaligus: potongan, penyelarasan, dan efek pemudaran pada batas luar. Perbandingan ini tidak dapat memberi tahu kami perubahan mana yang menyebabkan setiap artefak. Namun, hasilnya menunjukkan bahwa persiapan yang direvisi secara keseluruhan masih belum menyelesaikan masalah wajah pada karakter ini.
Mengapa kami menggunakan NFR
Kami mempelajari implementasi lain sebelum menjalankan eksperimen ini. GNM Head dari Google dapat dimuat dan menghasilkan ekspresi pada mesh kepala manusianya sendiri. Untuk memindahkan ekspresi tersebut ke tikus kami, diperlukan langkah fitting dan transfer terpisah. Example-Based Facial Rigging memerlukan contoh ekspresi yang berkorespondensi, sedangkan karakter kami tidak memilikinya.
RigAnyFace dan OmniFaceRig juga relevan, tetapi hingga 11 September 2026, kami belum menemukan kode inferensi publik beserta bobot yang dapat kami jalankan untuk keduanya. Tautan dataset OmniFaceRig masih bertuliskan “Segera Hadir.” NFR memiliki checkpoint yang telah dirilis dan alur untuk mesh khusus, jadi itulah yang kami lanjutkan hingga menghasilkan tikus beranimasi.
Kelima implementasi ini tidak menjalani pengujian yang setara. Kami menguji NFR pada permukaan wajah kami, memeriksa GNM pada kepala bawaannya, dan berhenti pada keterbatasan masukan atau ketersediaan untuk implementasi lainnya.
Percobaan berikutnya membutuhkan kelopak mata
Potongan pertama kami memang buruk, dan memperbaikinya layak dilakukan. Namun, mempertahankan tepian mata tidak otomatis memberinya cukup geometri atau gerakan yang tepat untuk menutupi mata. Mulutnya menghadapi masalah serupa: kami dapat menarik moncongnya, tetapi eksperimen ini belum membentuk bukaan dan bagian dalam yang diperlukan oleh pose tersebut.
Berikutnya, saya akan menangani satu gerakan berkedip dan satu gerakan membuka rahang. Berikan kelopak mata bentuk yang dapat menutup mata, siapkan bibir dan bagian dalam mulut, lalu lakukan fitting atau buat corrective shape untuk kedua gerakan tersebut. Periksa hasilnya dari samping maupun depan sebelum menambahkan kontrol lainnya.
Kami menyimpan kedua percobaan, termasuk prediksi mentah dan potongan persisnya, sehingga kami dapat membandingkan pekerjaan berikutnya dengan hasil ini. Untuk saat ini, rig tubuh dan animasinya tetap utuh. Bentuk-bentuk wajah tersebut masih berupa eksperimen; saya tidak akan menggunakannya pada karakter final.