Metlivi Blog

Bir Karakterin Gövdesini Hareket Ettirirken IK Ayak Hedefleri Nasıl Sabit Tutulur

IK ayaklarını sabit tutmak için karakterin gövde kontrolünü hareket ettirirken her ayak hedefinin dünya konumunu sabit tutun. Bacak çözücüsünün hareket eden gövde ile sabit hedef arasındaki eklemleri ayarlamasını sağlayın. Bir hedef gövdeden hareket alıyorsa bu dönüşüm ilişkisini ayırın veya IK çözümünden önce bu hareketi telafi edin.

Bu kılavuz, her iki ayak yerinde kalırken gövdesinin zıplamasını, eğilmesini veya yer değiştirmesini isteyen, rig uygulanmış sanal bir karaktere poz veren içerik üreticileri içindir. Aşağıdaki iş akışı, belgelenmiş dönüşüm ve IK davranışını pratik bir tanılama sırasıyla birleştirir; Unity ve Godot terminolojisi somut referans noktaları sağlar.

29 Ekim 20267 dakikalık okumaYazan: Metlivi Editorial Team
Bölüm 1

Ayak hedefleri neden gövdeyle birlikte hareket ediyor?

Yerel koordinatları değişmeyen bir hedef bile sahne içinde hareket edebilir. Yerel dönüşümler bir nesneyi üst öğesine göre tanımlar; bu nedenle bir üst öğeyi taşımak alt öğenin dünya dönüşümünü de değiştirir. Godot bu ayrımı transform ve global_transform ile açıklar. 3B dönüşümleri kullanma — Godot Engine

Ayak hedefi kontrollerini görüntüleyerek başlayın ve gövdeyi biraz yana hareket ettirin. Hedefleri görünen ayaklardan ayrı izleyin. Bir hedef gövdeyle birlikte hareket ediyorsa üst öğelerini inceleyin: pelvisin, gövde kontrolünün veya hareket eden başka bir grubun altında olabilir.

Kurulumu yalnızca yerel konum alanlarına bakarak değerlendirmeyin. Hareketten önce ve sonra hedefin dünya konumunu kaydedin. Böylece iki yararlı soruyu birbirinden ayırabilirsiniz: hedef amaçlanan konumundan çıktı mı, yoksa bacak sabit bir hedefi takip edemedi mi?

Bölüm 2

Gövde ve ayak kontrollerini nasıl düzenlemelisiniz?

Gövde hareketi ve sabit ayak hedefleri için ayrı kontrol dalları kullanın. Pratik bir düzenlemede iskelet ve gövde kontrolleri bir dalda, sol ve sağ ayak hedefleri ise sabit bir sahne kontrolünün altındaki başka bir dalda yer alır. Temel koşul, hareket ettirdiğiniz gövde kontrolünün hedef dalını hareket ettirmemesidir.

Gövdeyi onun altında hareket ettirdiğiniz sürece, genel bir karakter kontrolü her iki dalı da içerebilir. Ancak bu genel kontrolü hareket ettirmek iki dalı da taşır. Kontrolü seçmeden önce yapacağınız işlemin “sabit ayakların üzerindeki gövdeyi kaydırmak” mı yoksa “karakterin tamamını yer değiştirmek” mi olduğunu belirleyin.

Uygulama bağımsız dönüşüm kalıtımını destekliyorsa bu da bir seçenek olabilir. Örneğin Godot’ta Node3D.top_level, bir düğümün üst öğesinin dönüşümlerini devralmasını engeller. Bu, belgelenmiş bir dönüşüm özelliğidir; tek başına IK çözücüsünü yapılandırmaz. Node3D — Godot Engine

Bir hedefin üst öğesini veya kalıtım kipini değiştirirken mevcut dünya pozunu koruyun. Önce dünya konumunu ve yönelimini kaydedin, ilişkiyi değiştirin, ardından bu pozu geri yükleyin. Gövdeyi tekrar hareket ettirmeden önce sonucu doğrulayın.

Bölüm 3

Hedef hareket eden bir üst öğenin altında kalmak zorundaysa ne yapmalısınız?

Sabitlenen dünya pozunun bağımsız bir kaydını tutun ve üst öğenin mevcut dönüşümünden hedefin gerekli yerel pozunu hesaplayın. Konum için ilişki şöyledir: hedefin yerel konumu = mevcut üst öğe dünya dönüşümünün tersi × kaydedilmiş hedef dünya konumu. Unity, dünya koordinatlarından yerel koordinatlara dönüşümü InverseTransformPoint ile sağlar. Transform.InverseTransformPoint — Unity

Yalnızca öteleme içeren açıklayıcı bir örneği ele alalım. Bir hedef dünya X = 1.0 konumuna sabitlenmiş ve üst öğesi başlangıçta X = 0.0 konumunda olsun. Dolayısıyla yerel X değeri 1.0’dır. Üst öğeyi X = 0.3 konumuna taşıdığınızda hedefin dünya X = 1.0 konumunda kalması için yerel X değerinin 0.7 olması gerekir. Yerel X değerini 1.0’da bırakırsanız hedef dünya X = 1.3 konumuna gider.

Bu çıkarma işlemi yalnızca basitleştirilmiş örnek için geçerlidir. Döndürülmüş veya ölçeklendirilmiş bir üst öğe için tam dönüşüm hesabı gerekir. Unity’nin TransformPoint yöntemi yerel konumu dünya uzayına dönüştürür ve ölçeği de açıkça hesaba katar; bu nedenle konum dönüşümünde yön işlemi yerine nokta işlemi kullanılmalıdır. Transform.TransformPoint — Unity

Ayak sabit duruma geçtiğinde sabitlenen pozu kaydedin. Gövde hareket ederken bu kayıtlı değeri kullanın. Hedef hareket aldıktan sonra yeniden kaydetmek, kaymayı yeni referans olarak saklar. Yönelimin de sabit kalması gerekiyorsa hedefin konumuyla birlikte yönelimini de koruyup dönüştürün.

Bölüm 4

Bacak IK’sini hedefleri takip edecek şekilde nasıl yapılandırırsınız?

Büyük bir poz değişikliğini denemeden önce çözücünün zincir atamalarını kontrol edin. Unity Animation Rigging 1.4.1’de Two Bone IK; Root, Mid ve Tip dönüşümlerini, bir Target’ı ve isteğe bağlı bir Hint’i kullanır. Basit, iki segmentli bir karakter bacağında bunlar sırasıyla üst bacak eklemine, diz eklemine ve ayak bileği eklemine karşılık gelir. Hint, bükülme yönünü kontrol eder. Two Bone IK — Unity Animation Rigging

İlk testte kısıt etkisini ve hedef konum etkisini tam seviyeye ayarlayın. Hedef dönüşüm etkisini ayrıca kontrol edin. Unity bunları ayrı ağırlıklar olarak sunduğundan konum takibi ile yönelim eşleştirmesini birbirinden bağımsız sınayabilirsiniz. Unity’deki Maintain Target Offset ayarı, uç eklem ile hedef arasındaki başlangıç konum veya dönüşüm farkını korur. Two Bone IK — Unity Animation Rigging

Kısıtları etkinleştirmeden önce hedefleri amaçlanan ayak bileği pozlarına hizalayın. Bilerek bir ofset kullanıyorsanız neyi ifade ettiğini kaydedin. Açıklanmamış bir başlangıç ofseti, hedef ile çözülen eklem arasındaki sonraki karşılaştırmaları zorlaştırır.

Hint veya kutup kontrolüyle amaçlanan diz bükülmesini ayarlayın, ardından gövdeyi az miktarda hareket ettirin. Test boyunca Hint’in yerleşimi anlaşılır kalsın; hedefi, gövdeyi ve bükülme kontrolünü aynı anda değiştirmek beklenmedik bir sonucun nedenini belirlemeyi zorlaştırır.

Bölüm 5

Her iki ayak sabit kalırken gövde ne kadar hareket edebilir?

Hedeflerin sabit olması, gövdenin her konumuna erişilebileceği anlamına gelmez. Eklemleri sınırsız ve esnemesi olmayan ideal iki segmentli bir zincirde geometri, bacak kökü ile hedef arasındaki mesafenin |üst segment uzunluğu − alt segment uzunluğu| ile üst segment uzunluğu + alt segment uzunluğu arasında olmasını gerektirir. Gerçek eklem sınırları bu aralığı daraltabilir.

Segment uzunluklarının 0.45 ve 0.45 sahne birimi olduğu, açıklayıcı bir karakter örneğinde geometrik maksimum erişim 0.90 birimdir. Kalça ayak bileği hedefinin 0.80 birim üstünde ve yatay olarak 0.30 birim uzağındaysa aralarındaki mesafe √(0.80² + 0.30²), yani yaklaşık 0.854 birimdir. Bu, ideal aralığa sığar. Yatay uzaklığı 0.50 birime çıkarmak yaklaşık 0.943 birimlik bir mesafe oluşturur ve bu değer aralığı aşar.

Erişim sorununu dönüşüm sorunundan ayırmak için bu hesabı kullanın. Hedef sabit kalıyor ancak zincir ona erişemiyorsa gövdenin yer değiştirmesini azaltın veya her iki bacağa da uyacak şekilde gövdeyi yeniden konumlandırın. Her bacağı ayrı değerlendirin: yana kaymak bir hedefi yaklaştırırken diğerini uzaklaştırabilir.

İlk çalışan pozda her iki bacakta da gözle görülür bir bükülme bırakın ve küçük hareketleri deneyin. Her bacağın erişim sınırına yaklaştığı yerleri kontrol ettikten sonra gövdenin hareket aralığını genişletin. Bu aralığı başka bir karakterden alınmış bir yer değiştirme değerini kopyalayarak değil, rig’e özgü bir sonuç olarak değerlendirin.

Bölüm 6

Yalnızca ayak bileğini değil, ayağın tamamını nasıl sabit tutarsınız?

Rig’iniz için “sabit” olmanın ne anlama geldiğini tanımlayın. Sabit bir ayak bileği hedefi eklem konumunu belirler; ancak ayağın da amaçlanan bir yönelime ihtiyacı vardır. Tabanın temas noktası ile ayak bileği dönme noktası farklı referans noktalarıdır; kontrolü yerleştirirken tasarlanmış aralarındaki ofseti koruyun.

Yararlı bir tanılama yöntemi, ayak bileği konumunu sabit tutup yalnızca gövdeyi döndürmektir. Topuğu ve parmak ucunu gözlemleyin. Ayak bileğinin çevresinde hareket ediyorlarsa ayağın yönelim kontrollerini ve varsa ayrı parmak ucu kontrollerini inceleyin. Bu test, görünür temas durumunu hedef konumundan ayırır.

Amaçlanan sabit yönelimi konumla birlikte kaydedin. Gövde hareket ederken ikisini de kaydedilmiş pozla karşılaştırın. Godot’nun dönüşüm belgeleri, dönüşümün yönelimi ve ölçeği temsil eden bir tabanı orijinle birleştirdiğini açıklar; bu da tam bir pozu anlamak için yararlı bir referanstır. 3B dönüşümleri kullanma — Godot Engine

Bölüm 7

Kaymayı tekrarlanabilir bir sırayla nasıl tanılarsınız?

Aşağıdaki sırayı, yukarıda açıklanan dönüşüm ve çözücü davranışından türetilmiş pratik bir tanılama yardımı olarak kullanın. Her seferinde tek bir koşulu değiştirin ve sorunu ortaya çıkaran en küçük gövde hareketiyle başlayın.

Gözlem Önce kontrol edin Sonraki adım
Hedef gövdeyle birlikte hareket ediyor Hareket eden üst öğeleri ve devralınan dönüşümleri Kontrol dallarını ayırın veya kaydedilmiş dünya pozunu geri yükleyin
Hedef sabit, ayak bileği ona ulaşamıyor Zincir atamalarını, konum etkisini ve erişimi Kurulumu doğrulayın, ardından gövdenin yer değiştirmesini azaltın
Ayak bileği sabit, topuk veya parmak ucu hareket ediyor Ayak yönelimini ve temas ofsetini Amaçlanan sabit yönelimi geri yükleyin
Diz beklenmedik biçimde bükülüyor Hint veya kutup kontrolünün yerleşimini Bükülme kontrolünü küçük gövde hareketleriyle sınayın
Sonuç, sürükleme ile oynatma arasında farklılık gösteriyor Her kontrolü hangi sistemin, ne zaman yazdığını Oynatma sırasında değerlendirilen dönüşümleri inceleyin

Animasyonlu veya prosedürel bir kurulumda açık bir bağımlılık sırası kullanın: gövde pozunu oluşturun, kaydedilmiş hedefleri geri yükleyin veya dönüştürün, ardından bacak IK’sini değerlendirin. Uygulamanızın bu işlemleri nasıl zamanladığını doğrulayın. Tek başına bir geri çağırma işlevinin adı, çözücünün güncellenmiş hedefi aynı değerlendirme sırasında okuyacağını göstermez.

Kısa bir döngüyle test ederek bitirin: gövdeyi yana hareket ettirin, alçaltın, hafifçe döndürün ve başlangıç pozuna geri getirin. Her hedefin dünya pozunu süreç boyunca kaydedilmiş referansıyla karşılaştırın. Hedefler sabit kaldığında geriye kalan ayarlamalar belirginleşir: erişilebilir gövde hareketi, tutarlı diz yönü ve amaçlanan teması korumak için gereken ayak yönelimi.

Bölüm 8

Kaynaklar

İlgili okumalar

Bu konuyu keşfetmeye devam et