Babylon.js · Animasyon
Animation group: çok animasyon, tek oynatıcı
Animasyon grubu, birkaç bağımsız klibi veya izi aynı oynatıcı zamanına bağlayarak birlikte çalıştırmanın soyutlamasıdır — kapı animasyonu ile karakter kolunun salınımı aynı saniye başlasın, aynı hız çarpanıyla dönsün, tek durakta hepsi dursun isterseniz tek tek klibi yönetmek yerine grubu kontrol edersiniz.
Holodepth Three.js tarafında benzer etki çoğu zaman birden fazla AnimationAction'ı el ile senkron veya saat çalarak yapılır; Babylon.js tarafında bu rol için grup düğümü düşünülür — matematik «aynı anda oyna»dır, sınıf adları motor dokümantasyonundan takip edilir.
Özet: dört tasarım sorusu
| Soru | Kararın etkisi | Belirti |
|---|---|---|
| Kimler çocuk? | Hangi klibler birlikte? | Biri eksik kalır veya fazladan tetiklenir. |
| Zaman eşlemesi | Uzun ve kısa klibin süresi nasıl örtüşür? | Biri bitmişken diğeri yarıda «asılı» kalır. |
| Hız ve döngü | Grup tek çarpanla mı yönetiliyor? | Biri iki kat hızlı diğeri normda. |
| Durak / durdur | Oyun durunca hepsi mü? | Karakter dondu kapı hâlâ kapanıyor. |
Grubun amacı: orkestrasyon, karışım değil
Animasyon grubu, iki poz arasında doğrusal karışım ( blend) yapan katman değildir; bu iş Animation blending konusunda kalır. Grubun işi orkestrasyon: birden fazla oynatıcıyı aynı mantıksal zaman çizelgesi ( clock) üzerinde birlikte başlatmak, duraklatmak, hız çarpanını değiştirmek ve döngü politikasını uygulamaktır. İki klip aynı anda sahneye yazılıyor fakat aralarında α yoksa kullanıcı «blend eksik» değil, «kimin kazanacağı belirsiz» hisseder — bu da sıkça grup ile karışımın birbirine karıştırılmasından kaynaklanır. Bu bölüm süreleri [0, 1] aralığına nasıl yayacağınızı (bölüm 2) veya duraklat / durdur ayrımını (bölüm 4) açmaz; yalnızca grubun sorumluluk alanını çizer.
Normalize zaman ve süre eşlemesi
Çocuk kliplerin süreleri farklıysa grup genelde soyut bir [0, 1] «grup oynatıcı aralığı» üzerinden okur ve her çocuğu kendi yerel süresine haritalar: uzun klip aynı aralıkta daha yavaş ilerler, kısa klip sonuna yaklaşır, gerekirse son kısım kırpılır veya döngüye sokulur — hangi kuralın geçerli olduğu motor ve proje tercihidir. Harita belirsizse kapı animasyonu ile ses veya parçacık tetikleri arasında ince kayma oluşur; izleyici «görsel henüz bitmedi ama ses geldi» der. Bu bölüm grubun «ne işe yaramadığını» (bölüm 1) veya aynı özelliğe çifte yazımı (bölüm 3) çözmez; yalnızca normalize zamanın neden kritik olduğunu sabitler.
Pratik kontrol
Grup başına tek hız çarpanı varken çocukların iç süreleri yine farklı kalır; «hepsi aynı anda bitsin» beklentisi yalnızca haritayla gelmez, çoğu zaman DCC tarafında süreleri yakınlaştırmayı veya kısa klibi kasıtlı olarak uzatmayı gerektirir. Aksi halde aynı hız çarpanıyla bile biri biterken diğeri yarıda kalır. Bu kutu çocukların hedef düğümlerini (bölüm 3) veya duraklat semantiğini (bölüm 4) değiştirmez.
Çocuk hedefleri ve özellik çakışması
Aynı grup altında bir çocuk kapı menteşesine, diğeri karakter köküne yazarken üçüncüsü yalnızca ışık yoğunluğuna dokunabilir — bu, grubun gücüdür: farklı hedefler aynı zamanda ilerler. Tehlike, iki çocuğun aynı düğümün aynı özelliğine (ör. aynı TRS izine) bağımsız yazmasıdır; motor «son yazan kazanır» veya belirsiz sıra ile davranabilir; grup soyutlaması bu yarışı çözmez. Keyframe animation sayfasındaki iz hedefi disiplinini burada tekrarlayın: çakışmayı önlemek tasarım ve isimlendirme meselesidir. Bu bölüm normalize süre haritasını (bölüm 2) veya karışım ağırlıklarını yeniden tanımlamaz.
Başlat, duraklat, durdur: semantik fark
Duraklat ( pause) çoğu motorde grubun ve çocukların zamanını dondurur; sahne grafiği olduğu gibi kalır, kaldığınız yerden devam etmek doğaldır. Durdur ( stop) ise çoğu kurulumda oynatıcı durumunu sıfırlar, «bitti» olaylarını tetikler veya zamanı başa sarar — hangi alt davranışın geçerli olduğu API sözleşmesine bağlıdır. Menü açıldığında biri duraklatılmış diğeri sessizce durdurulmuş karakterler «yarı donmuş» görünür; bu yüzden oyun genelinde tek bir politika seçin ve aynı yardımcıdan çağırın. Bu bölüm süre eşlemesini (bölüm 2) veya hedef çakışmasını (bölüm 3) ele almaz.
- Duraklat: zaman ve olay akışı bekler; devamda kaldığı kareyle sürdürülür — kesme veya başa sarma genelde ayrı bir çağrıdır.
- Durdur: projeye göre başa sarar, tamponları temizler veya tamamen devre dışı bırakır; ses ve alt yazı gibi yan sistemlerin «durdu» sinyaliyle hizalayın.
- Sahne dondurma: yalnızca animasyonu değil, gerekiyorsa fizik ve GUI girdi yönlendirmesini aynı anahtarla kilitleyin ( Control system); aksi halde sahne donarken arayüz hâlâ etkileşim alır.
Three.js ile üst üste okuma
Çakışmayı önleyen çerçeve
Three.js tarafında benzer orkestrasyon çoğu zaman AnimationMixer altında birden fazla AnimationAction için ortak zaman ilerletme veya elle yazılmış senkron kodla kurulur; Babylon.js'te grup soyutlaması aynı ihtiyacı tek nesne altında toplamayı hedefler. Taşınan fikir «aynı mantıksal oynatıcı zamanı»dır; API satırı bire bir kopyalanmaz. Önceki bölümler sorunu parçalar: orkestrasyon vs blend (1), normalize süre (2), hedef disiplini (3), duraklat / durdur (4). Three öğretisinden geçerken bu sayfayı kontrol listesi olarak kullanın.
Sıradaki: durum makinesi
Grup zamanı netleştikten sonra hangi klibin ne zaman seçileceğini graf olarak sabitlemek için Animation state machine sayfasına geçebilirsiniz. Önceki adım: Animation blending.