Babylon.js · Animasyon
Animation blending: iki pozun ortasında durmak
Karışım, aynı iskelete bağlı iki veya daha fazla animasyon çıktısının aynı karede birleştirilmesidir — yürürken duraksama, koşudan yürüyüşe yumuşak geçiş, üst gövdeyi nişan alırken bacakların başka bir klibi sürmesi gibi. Bu, klibi «aynı anda başlatıp hızları eşitlemek» ( Animation group) değildir; burada soru ağırlıklı poz birleşimidir.
Holodepth Three.js tarafında benzer düşünce AnimationMixer ve eylem ( action) ağırlıklarıyla anlatılır; Babylon.js tarafında da soyutlama «hangi klip ne kadar etki ediyor?» sorusuna indirgenir — matematik ( lerp / slerp) ortaktır, isimler projeden projeye değişir.
Özet: dört ayırım
| Başlık | Soru | Belirti |
|---|---|---|
| Temel karışım | İki klip aynı anda ne kadar? | Ani poz sıçraması veya «yarı yürüyen» ara poz. |
| Geçiş süresi | Çapraz solma kaç saniye? | Kısa → sert; uzun → süzülür gibi his. |
| Kemik maskesi | Karışım hangi eklemleri etkiler? | Bacak doğru, üst gövde yanlış kayar. |
| Katman | Ek klip taban pozun üstüne mi eklenir? | Additive taşma veya çift sayım. |
Ağırlık: iki klip arasında doğrusal köprü
İki klip arasında en okunaklı köprü, tek bir karışım parametresi α ∈ [0, 1] ile yapılan konveks birleştirmedir: α = 0 iken tamamen A, α = 1 iken tamamen B görürsünüz; ara değerler her iki pozun da «içinde» kalır. Üç veya daha fazla klip aynı anda açıldığında ise yalnızca α yetmez; ağırlıkların toplamının normalize edilip edilmeyeceği, katmanların sabit mi yoksa rekabetçi mi olduğu motor ve proje kuralınıza bağlıdır. Toplam 1’den sapma veya aynı kemik için çelişen iki tam pozun yanlışlıkla üst üste binmesi «uzayan kol», iç içe geçmiş eklem veya belirsiz duruş üretir. Bu bölüm α'nın zamanla nasıl süreceğini (bölüm 2) veya dönüşün nasıl yumuşatılacağını (bölüm 4) açmaz; yalnızca tek anlık ağırlık cebirini sabitler.
Çapraz geçiş: zamanla değişen α
Çapraz solma ( crossfade), bölüm 1'deki α değerinin kullanıcı komutuyla aniden sıçraması değil, belirlenen bir süre boyunca sürekli kaydırılmasıdır; böylece yürüyüşten duruşa veya hafif vuruştan ağır vuruşa geçiş birkaç yüz milisaniyede yumuşar. Süre çok kısaysa hâlâ mekanik kesik duyulur; çok uzunsa girdi gecikmiş hissi verir — bu ayar oyun hissiyle birlikte ayarlanmalıdır. Süreyi doğru seçseniz bile, kaynak ve hedef klibin fazı birbirinden kopuksa sonuç yine sert kalır; bu yüzden geçişi Keyframe animation zaman çizgeleriyle birlikte planlayın. Bu bölüm kemik maskesi (bölüm 3) veya quaternion slerp (bölüm 4) ayrıntısına girmez; yalnızca α'nın zamana göre haritalanmasıdır.
Senkron ipucu
Üretimde çoğu ekip, çapraz geçişi «aynı fazda» iki klibe bağlar: örneğin her iki döngüde sol ayak yere değen kareler hizalanır veya geçiş komutu yalnızca bu hizaya yakın bir pencerede kabul edilir. Böylece bacaklar yerdeyken üst gövde blend'i daha az titrer. Bu kutu çoklu klip toplamını (bölüm 1) yeniden tanımlamaz; yalnızca faz eşleştirmesi ipucudur.
Kemik maskesi ve kısmi karışım
Ağırlık her zaman tüm iskelete yayılmak zorunda değildir: yalnızca kol zinciri, göğüs veya baş için maske tanımlayıp bacakları koşu klibinde bırakmak yaygın bir üretim desenidir. Maske, hangi kemiklerin hangi klip çiftinin karışımına gireceğini seçer; yanlış sınır «belden kopuk» üst gövde, iki kez sayılmış omuz veya bir eklemin hem tabanda hem üst katmanda oynatılması gibi hatalara yol açar. Bu yüzden maske kümeleri sürüm kontrolünde isimlendirilmeli ve dokümante edilmelidir. Bu bölüm α'nın skaler tanımını (bölüm 1) veya konum için lerp (bölüm 4) seçimini değiştirmez; yalnızca hangi kemiklerin hangi karışıma tabi olduğu politikasını sabitler.
- Tam gövde: tek maske ve tek karışım kuralı en sade yoldur; hata ayıklama maliyeti düşük.
- Üst / alt: bel veya gövde kökünü paylaşan iki maske çakıştığında aynı kemik hem üst hem alt ağırlığını alabilir; çakışma çözümünü (öncelik, ek ağırlık, devre dışı bırakma) baştan yazın.
Konum ve dönüş: lerp ile slerp
Konum ve ölçek gibi doğrusal uzayda iyi davranan bileşenler çoğu zaman lerp ile karıştırılır; kullanıcı için beklenen «A ile B arasında düz çizgi» hissidir. Dönüş için ise Euler açılarını doğrudan lerp etmek ara karelerde eksen sıçraması ve eklem patlaması riskini artırır; bu yüzden üretimde uzun dönüş karışımlarında dörtlü ( quaternion) temsil ve slerp tercih edilir ( Keyframe · Euler uyarısı). Maske veya çapraz geçiş (bölüm 2–3) doğru olsa bile yanlış dönüş interpolasyonu sonucu bozar; bu bölüm eklemeli katmanları (bölüm 5) veya çoklu klip toplamını (bölüm 1) ele almaz.
Katman ve eklemeli hareket
Eklemeli ( additive) katman, taban duruşun üzerine ikinci bir klibin farkını ( nefes, titreme, isabet tepkisi) yükler; bu, bölüm 1–2'deki konveks karışımdan farklı bir toplama modelidir. Taban ve ekleme aynı kemik için iki kez tam mutlak pozu toplarsanız ölçek şişer veya iç içe geçme oluşur; bu yüzden eklemeli içerik DCC tarafında genelde göreli ( relative) olarak üretilir veya motorun ayrı eklemeli moduna kilitleilir. Maske (bölüm 3) olmadan üst gövdeye eklemeli ateş eklemek, alt gövde koşusuyla çakışan ikinci bir tam poz katmanına dönüşebilir; katmanları tasarlarken hangi kemiklerin hangi modda işlendiğini tabloya dökün.
Three.js ile üst üste okuma
Çakışmayı önleyen çerçeve
Three.js tarafında AnimationMixer altında birden fazla AnimationAction için weight, crossFadeTo veya benzeri süre parametreli geçişler aynı kullanıcı sorununu taşır; Babylon.js tarafında da eylem ağırlığı ve geçiş penceresi aynı matematiği farklı API yüzeyinde sunar. Önceki bölümler sorunu parçalara ayırır: anlık α ve toplam kuralları (1), zamana yayılmış çapraz geçiş (2), kemik maskesi (3), lerp / slerp (4), eklemeli katman (5). Kütüphane değişse de «hangi eylem ne kadar ağırlıkta, hangi kemikte, hangi interpolasyonla birleşiyor?» sorusunun yanıtı ortaktır; yalnızca sınıf adları ve sahne grafiğine asılma yolu değişir.
Sıradaki: animasyon grubu
Karışım kurallarını netleştirdikten sonra aynı zaman çizelgesinde birden fazla klibi koordine etmek için Animation group sayfasına geçebilirsiniz. Bu başlık Holodepth Babylon Z-Axis hattının animasyon girişidir; önceki adım ana içerik haritası.