Fare hâlâ gözünü kırpmıyor
Cinevva CTO’su ve Kurucu Ortağı Oleg Sidorkin tarafından
Cinevva’da modellerinize hayat veren araçlar için çok emek harcadık: onları riglemek, animasyonları üzerlerine aktarmak ve hareket etmeye başladıklarında ortaya çıkan sorunlu ayrıntıları düzeltmek. Bu çalışmalar bizi bükülmeyen bacaklardan animasyon aktarımına ve hareket ettirecek kemiği olmayan kuyruklara kadar götürdü.
Şimdi bu karakterlere biraz duygu katmak istiyorum. Bir karakter, sahnede yürüyebilmesinin yanı sıra şaşırmış, sinirlenmiş veya memnun görünebilmeli. Bunun için yüzün hareket etmesi gerekiyor: göz kapakları, kaşlar, yanaklar ve yalnızca dinlenme pozunda durmaktan fazlasını yapabilen bir ağız.
Mevcut bir mesh’ten kullanılabilir ifadelere ne kadar yaklaşabileceğimizi görmek için son dönemdeki yüz rigleme araştırmalarını incelemeye başladık. Bu, çalışmalarımızın ilk dökümü: gerçekte neleri çalıştırabildiğimiz, karakteri nasıl hazırladığımız ve denediğimizde neler olduğu.
Test karakterimiz, kuyruk çalışmasındaki fareydi. Zaten bir gövde rig’ine ve altı animasyon klibine sahipti. Yürüyebiliyor, zıplayabiliyor ve depar atabiliyordu ama tüm bunlar sırasında yüzü sabit kalıyordu.
Verilen bir yüz mesh’ine ifadeler aktaran bir araştırma uygulaması olan NFR’yi denedik. İlk çıktı; çene açma, gülümseme, göz kırpma, dudak büzme ve kaş kaldırma olarak etiketlenmiş pozlardan oluşan bir sayfaydı. Burada işe yarar pek bir animasyon göremedim. Çene, burnu ve ağız çevresini çekip bozmuştu; diğer görsellerin çoğuysa neredeyse aynı görünüyordu.
Sonucu değerlendirmeden önce çözülmesi gereken bir hazırlık sorunu vardı. Girdi mesh’ini hazırlarken farenin göz kenarlarının büyük kısmını kesip atmıştık. Bu yüzden kırpma işlemini yeniden yaptık, modeli tekrar çalıştırdık ve iki denemeyi de hareket hâlinde render ettik. Sonuçlar burada.
NFR’ye neler girdi?
Karakterin tamamında dışa aktarılmış 22.744 vertex ve 30 eklem bulunuyor ancak yüz blendshape’leri veya çene ve gözlere özel kemikler yok. Mevcut rig’i bozmadan yüz kontrollerini eklememiz gerekiyordu.
NFR’nin girdi gereksinimleri, neden GLB dosyasını olduğu gibi veremediğimizi açıklıyor. Gözleri ve ağzı kesilerek açılmış, iç yapıları ve göz küreleri çıkarılmış ve kabaca örnekleriyle hizalanmış bir yüzey bekliyor. Kafanın arkasını, kulakları ve boynu kaldırdık; açıklıkları oluşturduk ve bağlantılı en büyük parçayı koruduk. Geriye 777 vertex ve 1.296 üçgen kaldı.
Bu kırpmadaki her vertex hâlâ orijinal karakterdeki bir konuma karşılık geliyordu. Çıkarımdan sonra, öngörülen her ifadeden öngörülen nötr yüzü çıkardık, ofsetleri tekrar farenin ölçeğine dönüştürdük ve orijinalde eşleşen vertex’lere uyguladık. Yüzün başın geri kalanıyla birleştiği yerde hareketin aniden kesilmemesi için kırpmanın kenarına doğru hareketi kademeli olarak azalttık.
Böylece dokuz blendshape elde ettik: bir kaydırıcının nötr mesh’e karıştırabildiği, saklanmış vertex ofsetleri. Tüm kaydırıcıları sıfıra getirdiğimizde orijinal fare geri geliyordu. İskeletini, dokularını ve altı gövde klibini koruduk; ardından her ifade için ayrı bir test klibi ekledik.
Checkpoint ve girdi yüklendikten sonra çıkarım işlemi bir T4 üzerinde yaklaşık yedi saniye sürdü. Kullanılabilir bir ifade elde etmekse daha uzun sürecekti.
İhtiyacımız olan parçaları kesip atmıştık
İlk göz kesiklerimiz geniş elipslerdi. Bu yüzde, her gözün çevresindeki kenarın büyük kısmını kaldırmışlardı. Ağız kesiği ise görünür dudak çizgisinin altındaydı. Mesh’i tanımlayan sayılara bakıldığında iki hata da belli değildi: koordinatları sonluydu, bozuk üçgenleri yoktu ve manifold olmayan kenar içermiyordu.
Ancak kırpmaya bakınca sorun oldukça açık hâle geliyor. Göz kapağı hareketini sağlayabilecek yüzeyin büyük kısmını atmışken bunu üretmesini istiyorduk.
İkinci deneme için kafayı önden ve iki çapraz açıdan render ettik. Göz açıklıklarını, göz kenarlarını, ağız çizgisini, ağız-burun bölgesini, burnu, kaşları ve bıyıkları işaretlemeye yardımcı olması için asistanın görüntü anlama yeteneğini kullandım. Bu ana hatlar, orijinal mesh’in görünür üçgenlerine yansıtıldı. Yansıtma verilerini ve üçgen kimliklerini korumak, her kesimden sonra yüzün gerçekte hangi parçalarının kaldığını kontrol etmemizi sağladı.

İki göz kenarına ait 131 görünür üçgen işaretledik. İlk kırpma bunların yalnızca 25’ini korumuştu. Yeni kırpma ise 123’ünü korudu. Bu, girdide faydalı bir iyileştirme olsa da ölçümün bağımsız bir segmentasyon doğruluğuna değil, kendi işaretlemelerimize göre yapılan koruma oranına dayandığını belirtmek gerekir.
Hizalamayı da değiştirdik. Önceki referansın kapladığı alanı eşlemek yerine, eşleşen yüz referans noktalarını kullanarak tek tip bir ölçek ve konum belirledik. Yeni kırpmada 586 vertex ve 952 üçgen vardı. Hâlâ boşlukları ve açık sınırları bulunuyordu; bu aşamada yeni göz kapakları veya ağız içi oluşturmak yerine mevcut geometriyi seçtik.
Daha fazla hareket, daha fazla esneme
İkinci çalıştırmada aynı ağırlıkları ve aynı dokuz ifade kontrolünü kullandık. Bu kez hareketin tamamını görmek istediğim için nötr poz ile her tam ifade arasındaki ara şiddetleri render ettik ve ardından tekrar nötr poza döndük. Sayfanın başındaki video, iki sürümü aynı ışıklandırma altında gösteriyor.
Gözler hâlâ açık kalıyor. Çene kontrolü, ikna edici bir ağız açılması üretmeden ağız-burun bölgesini değiştiriyor. Bazı ağız kontrolleri, özellikle huni hareketi, öncekinden daha fazla hareket üretiyor ancak yüzey de onlarla birlikte bozuluyor.
Bu bozulmayı sayısallaştırmak için kenar uzunluklarını kontrol ettik. Karakter mesh’indeki her kenarın tam ifade sırasındaki uzunluğunu nötr hâldeki uzunluğuna böldük ve iki kattan fazla uzayanları saydık.
| Kontrol | İlk kırpma: 2× üzerindeki kenarlar | Düzeltilmiş kırpma: 2× üzerindeki kenarlar | Düzeltilmiş sürümdeki en kötü esneme |
|---|---|---|---|
| Çene açma | 13 | 44 | 5,27× |
| Sola gülümseme | 0 | 30 | 5,53× |
| Ağız hunisi | 0 | 89 | 11,29× |
Kısa bir kenar yüksek bir oran verebilir; bu nedenle yüz rig’ini değerlendirmek için tek başına bu ölçümü kullanmazdım. Ancak bu durumda render’ların gösterdikleriyle örtüşüyor. Düzeltilmiş ağız daha fazla hareket ediyor ve bu hareketin bir kısmı istemediğimiz esnemeden oluşuyor.
Üç şeyi birlikte değiştirdik: kırpmayı, hizalamayı ve dış sınırdaki kademeli azalmayı. Bu karşılaştırma, her artefakta hangi değişikliğin neden olduğunu söyleyemez. Ancak düzeltilmiş hazırlığın bir bütün olarak bu karakterin yüz sorununu çözmediğini gösteriyor.
Neden NFR’yi kullandık?
Bu deneyi çalıştırmadan önce başka uygulamaları da inceledik. Google’ın GNM Head’i yüklendi ve kendi insan kafası mesh’i üzerinde ifadeler üretti. Bu ifadeleri faremize aktarmak için ayrı bir oturtma ve aktarım adımı gerekirdi. Example-Based Facial Rigging ise karakterimizde bulunmayan, birbirine karşılık gelen ifade örnekleri gerektiriyordu.
RigAnyFace ve OmniFaceRig de konuyla ilgiliydi ancak 11 Eylül 2026 itibarıyla ikisi için de çalıştırabileceğimiz herkese açık çıkarım kodu ve ağırlıklar bulamamıştık. OmniFaceRig’in veri kümesi bağlantısında hâlâ “Yakında” yazıyordu. NFR’nin yayımlanmış bir checkpoint’i ve özel mesh’ler için bir çalışma yolu vardı; bu nedenle animasyonlu bir fareye kadar götürdüğümüz seçenek o oldu.
Bunlar birbirleriyle karşılaştırılabilir beş çalıştırma değildi. NFR’yi kendi yüzeyimizde test ettik, GNM’yi kendi yerel kafa modeli üzerinde kontrol ettik ve diğerlerinde girdi ya da erişilebilirlik sınırlarına geldiğimizde durduk.
Bir sonraki denemede göz kapağı gerekiyor
Kırpma kötüydü ve bunu düzeltmeye değdi. Ancak göz kenarını korumak, gözü örtecek kadar geometri veya doğru hareketi sağlamıyor. Ağızda da benzer bir sorun var: ağız-burun bölgesini çekebiliyoruz ama bu deney, pozun gerektirdiği açıklığı ve iç kısmı oluşturmadı.
Bir sonraki adımda tek bir göz kırpma ve tek bir çene açma hareketini ele alırdım. Göz kapağına gözün üzerine kapanabilecek bir şekil verip dudakları ve ağız içini hazırladıktan sonra bu iki hareket için düzeltici şekilleri oturtmak veya elle oluşturmak gerekir. Kontrollerin geri kalanını eklemeden önce bunları önden olduğu kadar yandan da kontrol etmek gerekir.
Bu çalışmayı mevcut sonuçla karşılaştırabilmek için ham tahminler ve kullanılan tam kırpmalar dâhil olmak üzere iki denemeyi de sakladık. Şimdilik gövde rig’i ve animasyonları sağlam durumda. Yüz şekilleri ise deney aşamasında; bunları tamamlanmış bir karakterde kullanmazdım.