Kesme kolları olan karakter oluşturma (Java / OpenGL'deki Blender modelleri)


10

Çıkarılabilir uzuvlara sahip olmak istiyorsam, karakter animasyonu oluşturmak ve sınıfları oluşturmak için hangi hususları dikkate almalıyım? Sinir sistemine kadar her şeyi tanımlayabilen ayrıntılı bir vücut sistemi geliştirdim. Cüce Kalesi'nde bulunan hasar detay seviyesine benzer bir şey hedefliyorum. Örneğin, bir karakter üst kollarına zarar verdiğinde, tüm kolu devre dışı bırakabilecek sinir hasarı olasılığı vardır. Veya kolunu tamamen kaybedebilirler.

Bunun veri kısmını işlemek için yazılmış bir sistemim var. Her karakterin ekleri ve iç kısımları olan bir gövdesi vardır. Her ekte çocuk ekleri ve iç kısımları da olabilir. Üst ek devre dışı bırakılırsa / kaldırılırsa alt ekler devre dışı bırakılır / kaldırılır. Devre dışı bırakılmış / kaldırılmış uzantılardan veya dahili parçalardan herhangi biri ömür boyu gerekli olursa, karakter yakında ölecektir.

Şimdi üzerinde çalıştığım şey bunun çizim / animasyon kısmı. Vücudun mevcut durumu (eksik kollar / bacaklar vb.) Verildiğinde hangilerine izin verildiğini bilmek için animasyonları nasıl tanımlayabilirim? Çizim sistemini eksik uzuvları çizmeyecek şekilde nasıl ayarlarım? Her uzuv / uzantı kendi modeli olmalı mı (yere kesilmiş uzantılar çizmek istiyorum)?

Geçiş yaptığım basit sistem (sadece test için yazdım) bir animasyonun tüm ana karelerini bir VBO'ya (anahtar karelerin başladığı / durduğu yerdeki köşe sayılarıyla birlikte) tam model olarak alır. Blender'da tanımlanan kemikleri içe aktarmaz veya kullanmaz ve çerçeveler arasında enterpolasyon yapmaz.

Bu muhtemelen oldukça büyük bir soru, bu yüzden beni gitmem gereken yere götürebilecek kaynaklar da arıyorum.

DÜZENLE

Hangi uzuvları canlandırdığını bilen animasyon hakkında soruyorum çünkü gerekli bir uzuv eksikse alternatif bir animasyon yapmak için ayarlanmasını istiyorum. Bunu düşündükten sonra, bir animasyonu etkinleştirmeden önce o kontrolü yapacağımı ve o sırada uygun animasyonu etkinleştireceğimizi hayal ediyorum.

Yanıtlar:


7

Şu anda benzer bir sistem üzerinde çalışıyorum. Prosedürel animasyon + parçalama vb.

Vücudun mevcut durumunu (eksik kollar / bacaklar vb.) Vermek için hangilerine izin verildiğini bilmek için animasyonları nasıl tanımlayabilirim?

Bu biti tam olarak takip etmiyorum, eğer uzuvlar orada değilse, o zaman animasyonlu olup olmadığını kimin umurunda, çünkü görülemez.

Her uzuv / uzantı kendi modeli olmalı mı (yere kesilmiş uzantılar çizmek istiyorum)?

Bunları dinamik olarak tepe kemik ağırlıklarını kullanarak inşa ediyorum. Kalite muhtemelen her uzuvu elle yapmaktan biraz daha düşüktür, ancak bir kez yaptıktan sonra daha az çaba gerektirir, çünkü daha sonra her modele uygulayabilirim.

Aşağıdaki bölümden aklı başında yaklaşım ile, evet, her uzuv kendi modeli olacaktır.

Muhtemelen tüm varlığın tam bir modeline sahip olacaktım ve her bir uzuv kesildi.

Çizim sistemini eksik uzuvları çizmeyecek şekilde nasıl ayarlarım?

2 ana seçenek, en basit yolu sadece uzuvları ayrı ayrı çizmektir ve uzuvların birleştiği yerlerde, uzuvlar çıkarıldığında görünecek olan "ham et" dokuları ile gizlenmiş ek yüzlere sahiptir.

İkinci seçenek, dinamik olarak anında yapmaktır, bu sadece nispeten basit modellerle çalışacaktır. Yaklaşım, temel modeli almak ve parçalamak istediğiniz uzvun ağırlıklı köşelerini bulmaktır. Açık köşeyi bildiğiniz şekilde nelere bağlandıklarını belirterek bu köşeleri kaldırın. Daha sonra "çiğ et" dokusu olan üçgenlerle açık bölümün üzerine dinamik olarak kapanırsınız. Aklı başında bir yazılım geliştiricisinin bakış açısından, bu yaklaşım iyi bir yaklaşım değildir (çalışma zamanı model deformasyonu) ve daha az "düz" performans özellikleri değildir, ama bunu beğendim.

İlk yöntem daha fazla çizim çağrısı üretse de, biraz daha ulaşılabilir.

Ben şahsen ikincisi ile göreceli başarı ile gidiyorum, ama tüm modellerim çok düşük poli, bu yüzden dinamik bir modeli kesmek ve VBO çerçeve içine yeniden yüklemek şimdilik yapılabilir.

Blender'da tanımlanan kemikleri içe aktarmaz veya kullanmaz ve çerçeveler arasında enterpolasyon yapmaz.

Bu, parçalara ayrılmayı prosedürel bir şekilde yapmayı gerçekten zorlaştırır, çünkü hangi köşelerin hangi ekleme ait olduğunu nereden biliyorsunuz? Vertex kemik ağırlıkları ve parçalanma çok güzel bir şekilde el ele gider, bu biti yeniden düşünmenizi öneririm.

Ayrıca enterpolasyona yatırım yapmanızı öneririm. Bu olmadan animasyonlarınızı hızlandıramaz / yavaşlatamazsınız ve kare hızıyla birleşersiniz. Bu, animasyonlarınızdan daha az yararlanabileceğiniz anlamına gelir. Örneğin, bir kişi durma noktasına geldiğinde yürüme animasyonunu yavaşlatamazsınız.


Teşekkürler @Michael. İnterpolasyon ve kemik ithal ettim, çünkü sonunda onlara ihtiyacım olacağını biliyorum, ama henüz sahip değilim. Söylediklerinden, o noktaya geldiğimde ne yapacağımı bileceğim gibi görünüyor. Muhtemelen bir eki veya ekleri bir kemikle ilişkilendirirdim. Kemikleri içe aktarma hakkında ayrı bir soru soracağım.
MichaelHouse

benzer bir şey üzerinde çalıştığınız için belki de bu soru hakkında daha fazla bilginiz var mı? gamedev.stackexchange.com/q/20931/7191
MichaelHouse

5

En iyi seçeneğiniz uzuvları kesmek ve yaraların mevcut durumuna bağlı olarak birden fazla alt model kullanmaktır. Ana kare başına VBO kullanma yaklaşımınız aşırı derecede fazladır; bir iskelet animasyon sistemi kullanın ve alınan hasara bağlı olarak farklı animasyonlar oynayın (bir bacakla topallama, iki ayak olmadan tarama, vb.).

Valve , L4D2'de yaralar ve parçalanma hakkında iyi bir dizi slayt yayınladı. Organlar ve kemikler için bir model kullanma ve "deri" modelini kesiklerin, silah atışlarının vb.


İlginç. Bu slaytlar iyi görünüyor. Bu, tüm eki etkilemeyen hasar için işe yarayacak gibi görünüyor.
MichaelHouse
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.