Yürüme döngüsü animasyonları için 'hareket' canlandırmanın yaygın yolu


13

Bunu daha çok oyun geliştirmeye özgü bir kitleden daha iyi bir yanıt alacağımı fark etmeden önce bunu Blender sanatçılarının forumlarında yayınladım, bu yüzden çapraz gönderme için özür dilerim! Doğru nedenlerden dolayı :)

Ogre'yi kullanarak bir oyun projesi için yürüyen bir karakteri canlandırmaya çalışan bir programcıyım. Blender'da çok basit bir yürüyüş döngüsü yaptım ve Ogre'ye ihraç ettim ve gayet iyi oynuyor. Tamam, demek istediğim işe yarıyor, ama korkunç bir ayak kayması var. Çünkü sadece Blender'daki yerinde (başlangıçta) yürüyüşü canlandırdım ve elbette neye karşılık gelen "yürüme hızının" ne karşılık geldiğini bilmiyorum, bu yüzden oyunda karakteri hareket ettirdiğimde hareket t Animasyondaki ayakların hareketi ile mutlaka eşleşir.

Benim sorum şu: bu tür şeyler için normal yaklaşım nedir? İşyerinde Maya'yı kullanıyoruz ve animatörler ya karakterin "konumunu" temsil eden özel bir 'moveTrans' düğümünü canlandırıyor (ya da ihracatçının kök düğümün hareketinden onlar için üretmesini sağlıyor), o zaman oyun bunu okuyabilir animasyonun karakteri ne kadar hızlı hareket ettirdiğini bilmek. Maya dosyasında, karakter bir döngü boyunca ileriye doğru yürüyecek ve bu ekstra düğüm onları ayaklarıyla takip edecek. Açık kaynaklı topraklarda böyle bir şey görmedim ve Ogre İhracatçı senaryosunda bunun için kesinlikle bir hüküm yok. Ahbaplar bunun için normalde ne yaparsın?


1
İşte kavramın bazı harika açıklamalarıyla bir tartışma: blog.wolfire.com/2011/08/…
Ben Hymers

Yanıtlar:


10

Bunu yapmanın iki yolu vardır: kök hareketi veya "kodda".

Kök hareketi ile temel olarak "moveTrans" düğümü ile önerdiğiniz şeye sahipsiniz. Yürüme döngülerini ne kadar hızlı oynatacağınızı belirlemek için bu nesnenin hareketini kullanırsınız. Eğer X konumunda olmak istiyorsanız hangi karede olmanız gerektiğini anlamak için bir tür ters arama yapabilirsiniz. Ancak kök hareketinin gerçek avantajı, gerçekten gerçekçi animasyonlar elde etmek için hareketin gerçek bir doğrusal yol olmadığı gerçeğini hesaba katmanız gerektiğidir. Gerçek insanlar zaman içinde değişken bir hızda hareket ederler, ya da belki biraz sola ve sağa ya da her neyse karıştırıyorlar.

Mixamo, Unity kullanarak kök hareket kontrolü ile iyi bir örnek oldu. Burada bir video var: http://vimeo.com/12052874

Şimdi kök hareketinin dezavantajları var. Merdivenlerde çalışmak için "yürüyüş" animasyonunu almaya çalışmak gibi şeyler ile zor olabilir (ideal olarak ayrı bir merdiven / merdiven tırmanma anim var ve animasyon için de tüm hareketi yapmak). Ayrıca, eğer IK'nın gerçekten nasıl oynadığından emin değilim.

Şimdi bunu "kod içinde" yapmak şeylerin programlama tarafından çok daha kolay. Yapmayı önerdiğim ilk önce tüm birimlerinizin tutarlı olduğundan emin olmak. Örneğin, Maya'da 1 oyun ve oyununuz 1 metredir. Daha sonra sanatçılarınıza yürüyen bir karakteri canlandırın (ileri hareketle tamamlayın). Animasyonun hızını bulmak ve animasyonu ileri hız olmadan dışa aktarmak için bunu kullanın. Animasyonun ne kadar hızlı oynatılacağını bulmak için bunu kullanın. Yani 1x hızda yürüme animasyonu 5 m / s ise ve oynatıcının 7 m / s'de çalışmasını istiyorsanız, 7/5 = 1.4x hızda oynatırsınız. Modeliniz yukarı veya aşağı ölçeklendirilmişse, animasyon oynatma hızını ölçeğin tersi ile çarpın. Yarım boy bir adam, 1x ölçekli bir adamla aynı hızı hareket ettirmek için iki kat daha hızlı yürümek zorunda kalacak.


Mixamo'dan Root Motion Computer'ı görmedim, ne de buna seslendiğini duymadım, bu yüzden bağlantı ve açıklama için teşekkürler! Temelde düşündüğüm gibi, ya açık bir şekilde canlandırın ya da otomatik olarak oluşturun ve ya derleme zamanında ya da çalışma zamanında. Sanırım bunu ihracatçı betiğinde kendim kodlamak zorunda kalacağım. Şu anda çok karıştığım bir şey, bir döngü boyunca değişen harekettir - bunu dünyada nasıl oynanırsınız? "5m / s'de hareket et" artık başka bir şey ifade ediyor ... Ve yön değişiklikleri yapay zeka için bir kabus olacak! Belki de yaş aralığı hareketini kullanmak en iyisidir?
Ben Hymers

Karakterler bitti; Daha fazla fikir almak için bunu kabul edilmiş olarak işaretlemeden önce biraz bekleyeceğim. Cevabınız için teşekkürler!
Ben Hymers

Kök hareketi için oynatıcının hızını doğrudan kontrol etmezsiniz. Sadece animasyon hızının oynatılması üzerinde kontrolünüz vardır ve animasyonun ileri z değerini doğrudan kontrol etmesine izin vermiş olursunuz. Verdiğim 5m / s örneği, ayak kaymasını çözmenin geleneksel yolu içindi, bu da oynatma hızını ne kadar hızlı hareket ettiğiniz ve sabit bir hız varsaydığınızla eşleştirmeye çalışmaktır.
Tetrad

Bir oyun programcısı olarak, bu tam bir kabus gibi geliyor :) Animasyonlu bir şeyin hareket hızları kadar önemli bir şeyi kontrol etmek mi? Hayır teşekkürler! Bilgileri tersine çevirmeyi tercih ederim, böylece tersine çevirebilir ve animasyon oynatma hızını, diğer taraftan değil, hareket hızına göre ayarlayabilirim. Bu yüzden doğrusal olmayan hareket cehennemi kafamdan karıştırıyor ve belki de bunu ters yönde yapmak için iyi bir neden.
Ben Hymers

Gah, yeni bir satır başlatmaya çalışmak için yorum yazmak için Stack Exchange'i lanetleyin ... Animasyonun harekete geçmesine izin verseniz bile, örneğin AI karakterleri için hala bir sorun olacak. Ya bir noktaya gelmeye çalışıyorlarsa, ancak hareket animasyonları bir yandan diğer yana sallanıyorsa (sarhoş bir sarsıntılı animasyon)? Hangi yöne bakacaklarını nasıl bilebilirler?
Ben Hymers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.