Abi, şaka gibi. Bir karakter customisation sistemi yazıyorum. Kullanıcı burun, dudak, kaş, çene... her şeyi ayarlayabilsin istiyoruz. "Hadi" dedim, "her özellik için birkaç Blend Shape (Morph Target) yeter." Meğerse hiç de öyle değilmiş!
İşi parçalara ayırdım. Sadece burun için: uzunluk, genişlik, kemer yüksekliği, uç kalkıklığı, delik genişliği... Her biri ayrı bir blend shape. Dudaklar ayrı dert, kaşlar ayrı. Sonra "ya, bunların kombinasyonları da olmalı" dedim. Mesela hem burun kalkık hem geniş olsun. O zaman da blend shape'leri karıştırmak (blending) gerekiyor.
Kodda şöyle bir şeyle karşılaştım:
C#:
float finalMeshWeight = Mathf.Clamp01(noseLengthWeight + noseWidthWeight 0.5f);
// Ve bu, sadece iki parametrenin basit bir kombinasyonu!
Hadi hesaplayalım. Diyelim 10 ana yüz özelliğin var (burun, dudak, çene, elmacık kemiği vs.). Her biri için ortalama 5 ayarlanabilir parametre (boyut, genişlik, yükseklik, açı, pozisyon...). Bu, 50 tane temel blend shape demek. AMA durun, bitmedi! Bu parametrelerin birbiriyle etkileşimi de var. Gerçekçi bir yüz için, sadece dudak kenarını kaldırmak, yanaktaki kası da hafif etkilemeli. Bu da ya ekstra kombinasyon blend shape'leri, ya da daha kompleks bir skinning ve blend ağacı gerektiriyor.
Profesyonel karakterlerde (AAA oyunlar, filmler) bu sayının yüzlerce, hatta bazı ultra detaylı modellerde binleri bulduğunu okudum. Kafayı yedim resmen. Benim basit projemde bile potansiyel 100+ blend shape çıktı. Performans? Draw Call? Animasyon? Hepsi ayrı dert.
Şu an düşündüğüm, blend shape'leri kategorilere ayırıp, aynı anda sadece belirli bir kategorinin (örn. sadece ağız bölgesi) aktif olmasını sağlamak. Ya da bazı şeyleri texture veya vertex color ile çözmeye çalışmak. Ama o "pürüzsüz", gerçekçi geçişi yakalamak blend shape'siz çok zor.
Siz hiç böyle bir blend shape sınırı/optimizasyonu krizi yaşadınız mı? Özellikle mobilde çalışanlar, bu kadar çok morph target'ı nasıl yönetiyorsunuz? Yoksa "procedural generation" falan mı kullanmak gerekiyor bu işin sonu? Fikirlerinizi bekliyorum, yoksa bu blend shape'ler beni blend edecek!