14 Ağustos 2022 Pazar

Blender'da ilk Fizik Simülasyonu

    Ne kadar kaçmaya çalışsam da sonunda yolum işin fizik simülasyonları kısmına düştü. 3D'de tam bir şeyler öğreniyorum derken öyle şeyler çıkıyor ki insanın karşısına o bir anlık çok şey öğrenmişsiniz hissini tokat gibi suratınızın ortasına savurabiliyor, en azından benim tecrübem böyle. Hala Ian Hubert'in tutorialleri üzerinden devam ediyorum. Son bir buçuk haftada o kadar basit sorunlar beni o kadar çok oyaladı ki buraya bazı notlar eklemenin iyi olacağını düşündüm. Yanımda sürekli defter taşımaktansa telefondan blogu açmak daha kolay geldiği için blogda tutuyorum notlarımı, belki birilerinin de işine yarar. Şimdi bu videoyu hazırlarken aşama aşama yaptıklarıma geçiyorum.
     Öncelikle sahneyi kurgulamakta yarar var, ben de burada Ian Hubert’in Hyperball’u gibi hareket halindeki bir jet motoruvari objenin takla atarak savrulacağı bir sahne düşledim. İlk aşamada fiziki simülasyonları gerçekleştireceğimiz çarpma vs. gibi hareketleri yapacak olan ana objeye benzer temel bir şekil üzerinde denemeler yapacağız. O yüzden ilk iş zemini ve dummy objemizi ekliyoruz. Objemizin zemine çarptığında daha düzel savrulması için biraz topografyayı bozmak iyi olabilir.Bunun için Edit Mode’da zemini tamamen seçip Subdivide dedikten sonra Subdivide Menüsü'nden Fractal ayarını yükseltip topografyayı biraz bozuyoruz. Jet motoru yerine de bir adet aynı boyutlarda ve yakın şekilde elden geçirilmiş bir silindir kullanıyoruz.
  Ana unsurlar hazır olduktan sonra silindirin ve zeminin fiziksel özelliklerini tanımlamak için Physic Properties kısmına geliyoruz. Önce zemini Physic Properties—Rigid Body yapıyoruz. Eğer objemiz yerinde sabit bir Rigid Body olacaksa(Zemin, Duvar vs. Gibi) yapmamız gereken Rigid Body Type’ını Passive olarak değiştirmek, çarpma testlerinde kullanacağımız silindirin de Physic Properties kısmına gelip onu da Rigid Body yapıyoruz, elbette bunun hareket etmesini istediğimiz için Ridig Body Type kısmı Active olarak kalıyor.
    Rigid Body olarak tanımladığımız objeler normalde Play(Space) tuşuna basar basmaz yere düşüyor, bunları hareket ettirebilmek için yine Physic Properties bölümünde Ridig Body sekmesi altında Animated kısmına keyframe ekleyerek hareket ediyoruz. Objenin belli bir yere kadar hareketini keyframeler ile tanımlayıp yapıp sonrasında fizik kurallarının görevi devralmasını sağlıyoruz. Önce Animated sekmesi aktif haldeyken keyframeleri yerleştirip sonrasında hareketin kesilip fizik kurallarının devreye girmesini istediğimiz noktada Animated sekmesine keyframeler ekleyip bir yerden sonra Animated olarak değil fizik kurallarıyla devam etmek istiyoruz.
     Bu işlemleri yaparken silindirin hız kazanmasını sağlamak için bayağı uzaktan gelmesi gerekiyordu ve çarpma, zıplama, savrulmalar esnasında obje kadrajdan sürekli çıkmak durumunda kalıyordu. Bahsettiklerimi yaşamadan kamerayı objeye sabitleyip rahat rahat çalışabiliriz, bunun için kameraya da Physic Properties’ten bir Object Constraint eklememiz gerekiyor, bunun için Damp Track’i kullanıyoruz. Damp Track ekledikten sonra damlacıkla silidiri seçip, eksenlerde gerekli ayarlamaları yaparak kameramızı objemize sabitleyebiliyoruz.
     Biraz geriden fırlatma, yüksekten fırlatma, silindirin başını biraz aşağıya gömme derken istediğime yakın bir savrulma elde ettikten sonra bu hareketi kaybetmemek adına sabitlemem gerektiğini öğrendim. Sabitleme işlemi için tüm ayarlamalar yapılıp hareket son haline geldikten sonra bir tam tur oynatıp Scene Properties—Current Cache to Bake diyor ve sonrasında dosyayı kaydediyoruz. Blender'da sanırım her şeyi Bake edebiliyoruz, daha önce Normal Map'lere baking yapmıştık, burada da farklı türden baking işlemleri yaptık. Sanırım sırf Baking için oturup ayrıca çalışacağım bir ara. Bakeleyip hareketimizi sabitledikten sonra yapmamız gereken şey artık asıl objeyi yani jet motorunu sahneye almak(File-Append ile çağırabiliriz). (Eğer çağırdığımız bu obje üzereinde keyframeler varsa temizlemekte yarar var) Herhangi bir objenin lokasyon, rotasyon gibi özelliklerini başka bir objeye kopyalayabilmek için öncelikle Preferences—Add-Ons kısmından Copy Attiributes Menu Add-Onn’unun açık olması gerekiyor. Ardından CTRL+C ile Copy Location ve Copy Rotation yapabilir hale geliyoruz. Yine Blender’da her zaman olduğu gibi önce özelliklerin kopyalanacağı obje sonrasında da kopyalanacağı objeyi seçip CTRL+C diyoruz). Bunu yapmamızın sebebi iki objeyi de uzayda aynı yere ve rotasyona getirmek, çünkü birazdan yine bir parenting kuracağız. Önce sonradan eklediğimiz objeyi önce seçip sonrasında dummymizi seçerek CTRL+P—Keep Transform diyerek iki objeyi ilişkilendiriyoruz. Şu anda iki obje de aynı şekilde hareket edecek, jet motorumuz az önce test edip onayladığımız ve sonrasında hareketini sabitlediğimiz kukla silindirin hareketini taklit edecek.
     Bu kısımda daha önce akıllarda soru işareti bırakan Vertice’lere veya Face’lere keyframe atayabiliyor muyuz? Sorusunun cevabı geliyor, evet atayabiliyormuşuz ve bunun başka bir adı varmış, o da Shape Keys. Shape Keys ile deformasyon efektini kendimiz yapabiliyoruz, bu sayede objeye ait yüzeylerin belli bir anda belli şekil değişikliklerine ve hatta belli oranlarda maruz kalmasını sağlayabiliyoruz. Shape Keylerimizi Object Data Properties—Shape Key bölümünden ekliyoruz.Shape Key eklerken mutlaka ilk olarak Basis Shape Keys liste başında bulunmak zorunda çünkü bu bizim objemizin temel biçimini ifade ediyor. Sonrasında adım adım her çarpma anı için oluşabilecek deformasyonları Edit Mode(TAB) ile yapıp sonrasında Shape Key menüde Value kısmından timeline üzerinde çarpmanın başlangıç ve bitiş anlarına keyframe atayarak deformasyonu sağlıyoruz.

****Not:Propotional Editing yaparken sadece bağlı objeye ait unsurların editlenmesini istiyorsak Propotional Editing’e tıkladığımızda hemen altında yer alan Connected Only sekmesi aktif hale getirilmelidir.

    Bu noktaya kadar yaptıklarımızı özetlemek gerekirse önce zemini ve kukla silindirimizi yaptık, bunlara fiziksel özellikler kazandırdık, ardından lokasyon-rotasyon değişimlerini keyframeler ile tanımladıktan sonra Object Constraint kısmından Animate kısmına da keyframeler atayarak bir noktadan sonra yer çekimi gibi fizik kanunlarının devreye girmesini sağladık ve istediğimiz çarpma-savrulmayı elde ettikten sonra ana objemizi çağırıp üzerinde shape key'ler ile deformasyonları oluşturarak süreci tamamladık. İkincil olarak sağa sola savrulan partikülleri ve kıvılcımları ekleme işi var. Öncelikle savrulan parçaları yapabilmek için ana objeyi kenara kopyalayıp üzerindeki her şeyi temizliyoruz. (Key frame, Shape Frame, Parenting vs.). Sonra şarapnel gibi savrulacak parçalar elde edebilmek adına ana objeden bazı şeyleri seçiyoruz ve devamında bunları P---Selection yaparak ana objeden ayırıyoruz. Şimdi bu obje grubunu ayrı bir koleksiyona dahil edip devamında her birinin ayrı birer obje olarak kalmasını sağlamak için Edit Mode’da tekli objelere yaptığımız gibi P—By Loose Parts diyerek tamamını ayrı parçalara ayırıyoruz, yanda koleksiyon altında bu parçaları görebilirsiniz. Bu koleksiyona karıştırmamak adına uygun bir isim vererek benim ulaşamadığım bir düzenlilik seviyesine ulaşabilirsiniz. Neyse sonrasında bir emitter object yapıp jet motorunun içine gömmemiz gerekiyor, savrulan motor parçalarımız bu emitter object'ten dağılacaklar. Bahsetiğimiz partikülleri oluşturacak bir silindir oluşturup kabaca motorun içine gömüyoruz, daha önceki gibi rotasyon ve lokasyon değerlerini kopyalıyoruz. Bahsedildiği gibi kabaca silindiri şekillendirip CTRL+P yaparak ana objeyle Parenting kuruyoruz. Devamında particle systemi oluşturacağımız silindir seçili haldeyken; Particle Properties—Add Particle System, sonrasında Rotation aktif hale getirilir ve Render sekmesinin altından Render as Collection ve onun altından partikül olarak dağılacak olan az önce yaptığımız koleksiyon tanımlanır(Velocity—Object Velocity –1 yaptığımızda sanırım ana objenin hızını taklit ediyor parçalar). Eğer fırlayan parçaların zeminle interaksiyona girmesini istiyorsak, yani fırlayan parçaların zemine çarpıp dağılması gibi işler peşindeysek zemine Object Constraint—Collision eklemek gerekiyor. Elbette bunu yapmadan önce ana objenin hareketini bake’leyip sabitlemek gerekiyor yoksa zemine dokunan silindirimiz de top gibi sekmeye başlıyor.
     Çarpma, dağılma durumuna göre bu eklediğimiz Particle System’ları kopyalayıp zamanlamalarını değiştirip daha gerçekçi parçalanma anları elde edebiliriz.  Sonraki aşamamız fırlayan kıvılcımları ekleme aşaması; yine Particle System’i kullanacağız. Önce kıvılcım parçalarına dönüşecek olan minik partiküllerimizi yapıp sonra emitter object olarak çalışacak olan silindir parçasını ana objemizin içine gömüyoruz. Yine bir önceki aşamadaki gibi kıvılcımları taklit edecek minik emissive objeler yapıp onları koleksiyona dahil edip tanımlıyoruz ve keyframeler ile hangi sahnelerde ne kadar miktarda saçılacaklarına karar veriyoruz. Bu noktada söylemekte yarar var eğer emitter objemizin görünmesini istemiyorsak ona göre bir materyal seçebilir veya show emitter sekmesini pasif hale getirebiliriz. Son olarak parçikılları nedense çat diye render almıyor, frameleri falan ayarlayıp memnun olduktan sonra videoyu bir tam tur oynatıp ardından yine bake dediğimizde ancak renderda çıkıyor fırlayan parçalar.
     Zaman zaman aklınıza bu blogda neden görsellerin hıyar gibi ortaya konduğu konusunda bazı soru işaretleri beliriyordur, daha önce sayfada boşluk bırakmama konusunda ısrarcıydım, görsellerden boşta kalan alanları yazılarla doldururdum fakat Blogger'ın her güncellemesinden sonra görsellerin yerini tekrardan ayarlayıp, yazıları düzeltmekten bıktım ve sonunda bu şekilde kalmasının daha doğru olacağına karar verdim, bu bilgiyle artık ne istiyorsanız onu yapabilirsiniz dedikten sonra yeni postlarda görüşmek üzere sizlere veda ediyorum.

Hiç yorum yok:

Yorum Gönder