28 Ağustos 2022 Pazar

Inverse Kinematics ve Bone Constraints Belası - II


     Bu bölümde hazırlamış olduğum iki adet Rig sistemi içerisinde kullandığım Bone Constraint özelliklerinden bahsedeceğim. Bir tanesi standart bir masa lambası, öteki ise Ian Hubert tutoriallerinden oluşturduğum yukarıdaki tren teker-piston sistemi, ikisinin de eğer incelemek isterseniz diye Blend dosyalarını aşağıya bırakıyorum. Birazdan bahsedeceklerim aşama aşama bu sistemlerin nasıl oluşturulduğu olmayacak, zaten temelde hepsi de Inverse Kinematics'le oluşturduğumuz şeyler, bu yazıda daha piston gibi alt sistemlerde neler hangi özelliklere başvurabileceğimize dair küçük notlar olacak.

    Armatureleri düzenlerken benim ilk yaşadığım sorun Boneların zaman zaman objelerin içine gömülüp düzenlemede zorluk çıkarmasıydı, bunu düzeltmenin çok basit bir yolu var, Object Data Properties—Viewport Display kısmından In Front seçeneği aktif hale getirilerek Armature’ün her daim önde görünmesi sağlanır. Yine aynı menüden eğer isterseniz Display As kısmından görünüm şeklini de değiştirebiliriz.

    Masa lambasını yaparken aslında öğrenmek istediğim pistonları nasıl rigleyebileceğimi öğrenmekti çünkü lambanın kalanı için zaten standart IK bone dizilimi yeterli. Pistonlar için ise farklı bir şey yapmamız gerekiyor. Bu noktada artık Bone Constraints devreye giriyor. İlk olarak Pistonun baş ve son kısmına yani yuva ve içeriye girecek olan parçaya ait Boneları oluşturuyoruz. Bunun pratik yolu önce baş kısma bir adet bone ekleyip sonrasında aynısını aynı doğrultuda kopyalayıp rotasyonunu 180 derece değiştirip eklemler uç uca gelecek şekilde yerleştirmek, arada yukarıda gördüğünüz gibi boşluk kalacak şekilde yapmakta yarar var. sonrasında Edit Mode’da önce pistona ait bone sonrasında SHIFT+LMB ile bağlı olacağı ana bone seçilerek CTRL+P---Keep Offset seçilir ve aynı işlem bir alttaki piston parçası için de uygulanır.
    Artık işin geri kalanı Object Constraint ayarlarında, pistonları bir şekilde yeniden tanımlamamız gerekiyor, bunun için Pose Mode’a dönüyoruz. Önce piston parçalarından birine ait olan bone parçasını, sonrasında pistonun diğer ucundaki bone parçasını SHIT+LMB ile seçip CTRL+SHIFT+C---Damp Track seçilir. Sonrasında aynı işlem diğer piston parçası için yinelenir. Bu sayede ana eklemleri hareket ettirirken pistonumuzu oluşturan parçalar da hareket doğrultusunda konumlanır.
    İşlemi tamamladıktan sonra sağ tarafta Bone Cosntaints kısmında aşağıdakine benzer bir tanımlama görmeniz  gerekiyor, yani target bone'umuzun burada görünüyor olması lazım pistonların çalışıyor olması için.
    Eğer Armature’nin herhangi bir eksende hareketini tamamen engellemek veya kilitlemek istersek en basit haliyle Pose Mode Üst Sağ Menüden (N) Item—Location kısmından o eksen kilitlenebilir, ancak burada Armature’ün ekseni ile lokal eksenleri arasında fark olabilir bu durum dikkate alınmalıdır. Damp Track yaptığımızda piston eklemleri sapıtıyor, garip yönlere sapıtıyorlarsa yönleri düzeltmek için Track Axis sekmesinde yer alan eksenleri deneyerek bu işi de kolaylıkla halledebiliriz.
    Son olarak masa lambasını bir bütün halde kontrol etmek için lambanın ayak kısmını kaplayacak boyutta bir Empty(Cube) ekleyip sonrasında önce Armature’ü ardından bu Empty’yi seçerek CTRL+P yaparak tüm malı da Empty’ye bağladığımızda bu empty'den tutarak tüm parçaları kırıp dökmeden rahat rahat taşıyabiliriz. 
    Masa Lambasını yaparken PIXXO 3D kanalının Blender | Model & Rig A Modern Lamp | Easy tutorialinden yararlanabilirsiniz, son derece basit ve bayağı da açıklayıcı bir çalışma olmuş. Bana bayağı yardımcı oldu, notlar da bu seriden geriye kalanlardır.

Lokomotif Tekerlerini Rigleme Çalışması

    Rigging işine başlamışken biraz da "Industrial Rigging" işlerine bakayım dedim unutmadan, orada da yine Ian Hubert Abi'ye başvurdum, ücretli tutorial olduğu için uzun uzun yazmayacağım sadece bazı kritik yerlerde ne gibi constraintler kullandığından bahsedip yazıyı kapatacağım, bu kısmı yine unutmamak için aldığım notlardan ibaret.
    İlk olarak Bone Properties--Inverse Kinematics kısmından herhangi bir bone’nin xyz eksenlerinde hareketini kitleyebilir ayrıca üzerine bir de Stretch ekleyebilirsiniz, pistonlar için de  bu uygulanabilir. Bu çalışmada her tekerin dönme eksenine bir adet bone parçası ekledik ve tekerleri bu parçalarla parenting yaparak tekerlerin dönüşünü bu parçalarla gerçekleştirdik. Tekerlere ait bonelar eklendikten sonra birer adet yine tekerlerin dönme ekseninde bone parçası daha üreterek -ki bunun yerine tekerlerdeki boneları kopyalarak da yapabilirdik-  Bunları da tekerlere sabitlenmiş olan ve piston mekanizmasının tekeri hareket ettirmesine yardımcı olan sabit teker parçalarının ortasına konumlandırdık ve bu parçalar ile tekerlerin dönme eksenine koyduğumuz bone parçalarını parenting ile birbirine bağladık, bu sayede teker dönerken bu parçalar da tekerlerle birlikte hareket edecek.
    Bu çalışmada buhar kazanlarından çıkan buharla tekerleri hareket ettiren piston için yukarıdakinden farklı bir çalışma yapacağız, önce üst ve alt pistonlar için teker parçalarıyla buluşana dek piston sistemini yukarıdaki görseldeki şekilde kuracağız, pistonun ileri geri hareketini yapmasını sağlayan piston yuvasına ait bir bone parçası bırakarak yapacağız tabii ki bone dizilimini, sonrasında IK kullanarak pistonları ve pistonların hareket ettirdiği oynar parçaları bağlayacağız, sonrasında pistonlar için pistona ait sağdaki pistonun yuvası olan parçayı X,Y ve Z eksenindeki hareketlerini kilitleyip ardından Bone Properties--IK stretch değerini yükselteceğiz, bu sayede bu bone parçası piston yuvası gibi sadece ileri geri hareketi taklit eder hale gelecek.
    Sonra aynısını alt piston için de yaptıktan sonra arkadaki, ikinci tekere geçiyoruz, arka tekerde yine bir Bone Constraint kullanacağız, bu sefer ihtiyacımız olan şey arkadaki tekerin öndeki tekerin hareketini kopyalaması, sonuçta tekerleri bağlayan parça sebebiyle birlikte zaten aynı şekilde hareket edecekler, bunun için Add Bone Contraint--Copy Rotation diyerek Target Bone parçasını tanımlayabilir ve bu şekilde tekeri hareket ettirdiğimizde aynı hareketi gerçekleştirmesini sağlayabiliriz.
    Sonraki karışık işimiz tekerlerin arasındaki tekerlerin birbiriyle aynı şekilde hareket etmesini sağlayan yukarıdaki yeşil renkli parça, bunun için önce bu parçanın sağ taraftaki bağlantı yerine bir adet bone oturtmak-bu kısımda yeşil kemik bone parçası ile sağdaki tekerin yardımcı parçasının eksenini tanımladığımız parça parenting ile bağlanmış olacak) ve sonrasında bu bone'un diğer ucunu soldaki tekerin aynı işlevli parçasına doğru uzatmak ve sonrasında bu yeşil ara parçayı seçip Add Bone Constraint--Stretch To diyerek diğer tekere ait (soldaki) yardımcı parçayı target olarak tanımlamak olacaktır.
    Son bir Constraint türü var ki beni günlerdir delirtmesine rağmen sonunda kullanmayı öğrendim, problem yine nerede çıktı dersiniz? Elbette benim ölçülendirmem yüzünden hareket görünmüyor ve ben de Constraint çalışmıyor zannediyormuşum. Neyse bu Constraint şu işe yarayacak, Armature içindeki herhangi bir Bone parçasının herhangi bir eksen üzerindeki hareketini bizim istediğimiz oranda başka bir Bone parçasına Rotasyon olarak aktaracak, yani Kontol Bone'u Y ekseni üzerinde hareket ederken tekerimiz dönme ekseni olan X ekseni etrafında dönecek, bunun için Add Bone Constraint--Transform ekleyip ayarlamaları deneme yanılma yoluyla istediğimiz hıza göre ayarlıyoruz.
    Bu gecelik bu kadar kafa karışıklığı yeter deyip postu burada kesiyorum, bilmiyorum birinin işine yarar mı bu notlar ancak eğer çaresiz kalıp buralara kadar düştüyseniz sorununuzu duymak isteyebilirim, hayatta en fazla şeyi kendimin veya bir başka birinin çözemediği problemleri çözmeye çalışırken öğrendiğimi fark ettim. Büyük ihtimalle bu hepimiz için böyle, kim bilir belki çözümü olmadık bir yerlerde buluruz.

Hiç yorum yok:

Yorum Gönder