Kısaca “Event Driven” yada güzel türkçemiz ile “Olaya Dayalı” parçacık sistemi olarak tanımlayabileceğimiz Particle Flow, parçacık efektlerine bakış açınızı bütünüyle değiştirebilecek güçte bir 3D Studio MAX eklentisi.
Peki nedir bu olaya dayanmak? Olay nedir? Bir durum mu var? Nasıl yani?... gibi sorular havada uçuşuyor, hissedebiliyorum. Hemen cevap olmaya çalışayım. Olay tabanlı demek, parçacıkların başına bir şey (!) geldiğinde onları başka bir komuta yönlendirmek demek. Mesela çarptıklarında, ömürleri bittiğinde, belli bir alana girdiklerinde... gibi. Normal bir parçacık sisteminde parçacıklar çarptığında, etki eden yer çekimi etkisi var ise yere düşerler veya geri sekerler. Ama olay tabanlı sistemde çarptıkları an yeni komutlar uygulayabiliyorsunuz. Avantajı nedir? Avantajı sayılamayacak kadar çok. Standart parçacık sistemleri ile kıyaslanamaz bile. Çünkü parçacık davranışlarına tam anlamı ile hükmedebiliyorsunuz. Kurduğunuz “Node Based” yapılar ile yap-boz oyuncaklar misali parçacık sistemleri inşa ediyorsunuz. Amanın o da ne? Yeni bir terim daha “Node Based”... Nedir? “Node Based” maalesef biz 3DSMax kullanıcılarına yabancı sayılabilecek bir yapı. Türkçe’ye “Modüler” yada “Kümesel” olarak çevrilebilir. Modülleri birbirine bağlayarak sistemler kuruyorsunuz. Aslında çok esnek ama hala tam alışabilmiş hissetmiyorum kendimi. Umarım siz daha çabuk ısınırsınız. Özellikle Houdini yazılımının yapısı tamamen modülerdir. Softimage XSI yeni modüler yapısı ICE ile ciddi bir devrim geçirmiştir. Maya’nın modüler Shader Network’ü ise dillere destandır. Lightwave’de güncel sürümlerinde modüler malzeme düzenleyicisine geçmiştir. 3DSMax için yazılmış “Node Joe” isimli eklenti ile modüler malzeme yapıları kurmak mümkün olmuştur. Örnekler arttırılabilir. Netice itibari ile 3DSMax kullanıcıları yabancısı olsada modüler yapılar oldukça verimlidir.
Neyse konuyu dağıtmayalım ve hemen uygulamaya geçelim. Particle Flow’u hiç kullanmamış okurlarımız için ansiklopedik anlatım yerine yaparken öğreneceğiz. Bu şekilde öğrenmenin daha kalıcı olduğuna inanıyorum.
OLUŞTURMAYA BAŞLIYORUZ1) Sağ paneldeki Create / Geometry menüsünden Particle Systems’i işaretleyin. PF Source’ı seçip sahnede (bir kere tıklayıp, sürükleyerek) oluşturun. Oluşturma sonrasında zaman sürgüsünü kaydırdığınızda parçacık güruhunun karesel alandan aşağı doğru aktığını göreceksiniz. Önceki parçacık sistemlerini kullandıysanız dikkatinizi bir şeyin çekmesi lazım. Sağ paneldeki seçenekler Spray’den bile az sayıda. Nereden ayarlıyoruz onca şeyi? “Particle View” butonuna tıkladığınızda karşınıza gelen ekrandan.
Parçacık akışımızı temsil ediyor. 2 tane modül görüyorsunuz. İlkinde parçacık sisteminin temel ayarları (PF Source 01) ikincisinde ise (Event 01) parçacıklara şekil ve yön veren komutlar yer alıyor. Bu komutları (Actions / Operators olarak te geçer) seçtiğinizde pencerenin sağ panelinde ilgili ayarlar gelecektir (CTRL tuşu ile tıklayarak birden fazla seçebilirsiniz)
Bu ayarlar biraz daha tanıdık değil mi? Pencerenin altında ise kullanabileceğiniz komutlar yer alıyor.
Tek tek değinirsek yerimiz yetmeyeceği için sadece kullandıklarımızı açıklayacağım.
2) Önce varolan modül ve akışımızı deşifre edelim. İlk modüldeki Render 01 sistemin belkemiğini oluşturur. Bu olmadan diğer modül ve komutlar bir işe yaramaz. Her parçacık sistemine ayrı bir tane gerekir. İkinci modüldeki Birth parçacıkların doğmasını sağlar . Zaman aralığı ve miktarını değiştirebilirsiniz. Position Icon, parçacıkların sahnedeki simgeyi referans alarak konumlanmasını sağlar . Location ile tipini değiştirebilirsiniz. Mesela Edges ile sadece kenarlardan parçacık çıkar, Vertices ile köşelerden. Speed, adında da anlaşılacağı gibi hız ile ilgili ayarlar . Rotation, parçacıkların yönünü tayin eder ama gideceği yönü değil bakacağı yönü . Bunu daha iyi algılamak için Display operatöründen tipi Geometry olarak değiştirin . Artık Rotation’daki Orientation tipini değiştirdiğinizde nasıl etki ettiğini daha rahat görebilirsiniz . Son olarak Shape ile parçacık şeklini ve boyutunu kontrol edebilirsiniz . Burada bir parantez şunu not düşmek istiyorum. Eğer üzerinde Creativity Extension bulunmayan bir 3DSMax 2009 veya düşük sürüm kullanıyor iseniz, Shape ve bazı operatörler farklı görünebilir, sebebi harici olarak satılan Particle Flow Toolbox #1’in Creativity Extension ile yazılıma entegre edilmesidir. Ve bazı varsayılan operatörler bu paketteki ile değiştirilmiştir.
Böylece akışımızı tanımış olduk. İstediğiniz operatörü seçip, parametrelerini değiştirerek sonuçlarını gözlemleyin. Hangisinin ne işe yaradığını daha rahat kavrarsınız. Parçacık görünümü penceresini kapatarak sahnemizdeki diğer elementleri oluşturmaya devam edelim.
YARDIMCI NESNELER3) Create / Shapes menüsünden Text’i seçin. Ön görünümde tıklayarak oluşturun. Ne yazacağınızı ve yazı tipi seçimini size bırakıyorum. Parçacıkları rahat görebilmek için dolgun bir yazı tipini tercih edebilirsiniz. Modify paneline geçin ve Extrude komutunu uygulayın. 10-15 birim civarında uygulayın. Başka bir yazı nesnesi daha oluşturun. Tercihen farklı bi yazı girin. Nesnelerin konumları size kalmış. Seçimin kolay olması için arka arkaya oluşturuyorum.
4) Create / Space Warps panelindeki açılır menüden Deflectors’ü seçin. Deflector’ü işaretleyerek, üst görünümde yazı nesnelerini kapsayacak şekilde oluşturun. Yazı nesnesinin üstünde olacak şekilde konumlandırın. Deflector yardımcı nesnesi ile parçacıkların geçiş sırasını kontrol edeceğiz. Açılır menüden Forces’i seçin. Vortex ve Wind nesnelerini seçerek sahnenizde oluşturun. Wind ile parçacıklara ufak salınımlar vereceğiz. Vortex ile de hortumvari helezonik hareketler yapmalarını sağlayacağız. Konumları şimdilik pek öneml değil, sahnenizi karıştırmayacak ve seçim işlemlerini kolayca yapacağınız konumlar belirleyin.
PARÇACIK AYARLARI5) Sahnemizin temel yapıtaşlarını oluşturmuş olduk. Parçacık sistemi ayarlarına geri dönelim. Üst menüdeki Graph Editors / Particle View ile parçacık görünümü penceresini açın. Alt kısımdaki operatör kütüphanesinden Position Object’e tıklayıp Event içindeki Position Icon’un üzerine sürükleyip bırakın. Sürükleme işlemi esnasında boşluğa bırakırsanız yeni bir Event oluşturulacaktır. Eski operatörün üst yada alt kısmına bırakırsanız yeni operatör olarak eklenecektir (mavi kalın çizgi ile temsil ediliyor) . Eski operatörün tam üzerine bıraktığınızda ise öncekini iptal edip yenisini oluşturmuş olursunuz (kızmızı kalın çizgi ile temsil ediliyor) . Event içine yerleştirdiğiniz Position Object operatörünü seçin. Sağ panelde beliren ayarlardan Add yada By List komutları ile ilk yazı nesnesini kaynak nesne olarak belirleyin. Böylece parçacıklarınız yazı nesnesini baz alarak oluşacaktır.
Speed ve Rotation operatörlerini silin veya simgesine bir kere tıklayarak kapalı konuma getirin.
Operatör kütüphanesinden Collision’ı seçip, Event’ın içine / alt sıraya sürükleyip bırakın . Seçili konuma getirin. Add / By List komutları ile az önce oluşturduğunuz saptırıcıyı (Deflector) listeye ekleyin. Collides değerini Continue olarak değiştirin. Böylece saptırıcıya değen parçacıklar bir sonraki Event’a aktarılacak ve yönlerinde herhangi bir değişiklik olmayacak.
Operatör kütüphanesinden Force’u seçip sürükleyin ve boş alana bırakın. Yeni bir Event oluşturdunuz. Collision operatörünün solundaki çıkıntının ucunu tıklayıp yeni Event’ın sol üstündeki çembere sürükleyin ve bırakın. İki Event arasında mavi bir çizgi çizilecektir. Böylece saptırıcıya değen parçacıkları bir sonraki Event’a aktardınız.
Force operatörünü seçin ve Space Warps bölümünden Add / By List yardımı ile Wind ile Vortex’i ekleyin. Artık bu Event’a aktarılan parçacıklar sahnenizden seçtiğiniz efektlerden etkilenecektir.
KAFA AYARI (İNCE AYARLAR)6) Gelelim buraya kadar yaptıklarımızın ince ayarlarına. Birth operatörünü seçin ve Emit Start / Stop değerlerine 0 girin. Böylece parçacıklar ilk karede oluşumlarını tamamlayacaklar . Position Object’i seçin ve Location değerini Volume olarak değiştirin. Parçacıklar yüzeyde değil nesnenin içinde oluşacaklar . Wind’i seçin. Strength değerini 0’a düşürün. Turbulence = 1, Frequency = 0.5, Scale = 0.2 olacak şekilde ayarlayın. Parçacıklarınız oldukları yerde devinerek rastgele yönlere dağılacaklar.
Vortex’i seçin. Yukarı bakacak şekilde çevirin ve yazı ile merkezleyin. Çünkü etkilenen parçacıklar simgeyi referans alarak hareket edecekler.
Buraya kadar eksiksiz yaptı iseniz, zaman sürgüsünü kaydırdığınızda hiçbir hareket olmaması lazım. İlk karede parçacıklar yazının içinde oluşacak ve öylece bekleyecekler. Nerede hareket? Hareket yok çünkü deflektöre değen parçacık yok. Parçacıklara ivme vermek istediğiniz zaman aralığında deflektör nesnesini yazının içinden geçecek şekilde hareketlendirin (mesela 0 ile 50’inci kareler arasında). Artık zaman sürgüsünü kaydırdığınızda, hareket eden deflektörün değdiği parçacıklar hareketlenecektir. Ama Vortex’in etkisinden ötürü merkezde aşırı toplanma yapabilirler. Bunun önüne geçmek için parçacık görünümde Force’u seçin ve Influence değerini 100 ile 200 arası bir değere indirin . Parçacıklar daha ağır ve dağınık hareket edeceklerdir. Eğer merkezde hızlı toplanmaları rahatsız etmeye devam ediyor ise Vortex’i seçip Radial Pull değerini azaltmayı deneyin. Şöyle bir lüksede sahipsiniz. Play butonuna bastıktan sonra değerleri değiştirerek sonucunu gerçek zamanlı olarak görmek. Değerleri ezbere değil görerek değiştirmek daha verimli olacaktır.
KARTALLAR YÜKSEKTEN UÇAR7) Parçacıklar uçuşup dağılıyorlar. Şimdi toplanmalarını sağlayalım. 3’üncü Event’ın en altına Age Test operatörü ekleyin . Test Value değerini 100, Variation değerini 20 olarak değiştirin. Parçacıklar konmadan önce bir süre daha havada rastgele salınmaya devam edecekler . Unutmadan eğer aktif zaman aralığınız size yetmiyor ise arttırın. Bunun için zaman kontrollerinin bulunduğu butonların arasından saat simgeliye tıklayarak karşınıza gelen pencereyi kullanabilirsiniz . 300 kare yeterli olacaktır. Operatör kütüphanesinden Find Target’ı boş bir alana sürükleyip bırakarak yeni bir Event oluşturun. Age Test’i yeni Event’a bağlayın. Parçacıkların bir sonraki Event’a aktarmış oldunuz.
Find Target operatörünü seçin. En üstteki açılır menüden Control by Time’ı seçin. Time=100, Variation=20 olacak şekilde değiştirin. Use Docking Speed’i etkinleştirin. Speed değerini 0’a düşürün. Target kısmından Mesh Object’i etkileştirip, 2’inci yazı nesnesini listeye ekleyin. böylece uçuşan parçacıkların belirlediğimiz zaman diliminde ve olabilecek en düşük hızda yazı nesnesine konmalarını sağladık.
Zaman sürgüsünü kaydırdığınızda hareketi görebilirsiniz. Ama konduktan sonrada hareketlerin devam edeceklerdir. Hareketlerini durdurmak için kütüphaneden Speed operatörünü boş alana sürükleyip bırakarak yeni bir event oluşturun. Find Target’ı yeni Event’a bağlayın . Speed operatörünü seçip Speed değerine 0 girin. Parçacıklar hedeflerine konduktan sonra hareket etmeyeceklerdir.
Eğer buraya kadar anlatılanları eksiksiz uygulayabildiniz ise zaman sürgüsünü çektiğinizde hareketi görmeniz gerekiyor. İlk önce deflektör hareket edip yazının içinden geçiyor. Deflektörün değdiği parçacıklar rüzgar ve girdaptan etkilenip rastgele ve dönerek hareket ediyorlar. Havada bir süre salındıktan sonra (girdiğimiz değerlere göre 100 kare) hedeflerine doğru yöneliyorlar ve konuyorlar (100 kare). Parçacık hareketi için toplam 250-300 kare yeterli olacaktır. Hareketlendirme ile ilgili yapacaklarımız buraya kadar. Gerisi size kalmış. Değerleri gerçek zamanlı değiştirerek istediğiniz sonuca kolayca ulaşabilirsiniz.
VER COŞKUYU8) Birazda görselliği arttıralım. Yazı nesnelerini seçip sağ tıklayın ve Object Properties’i seçin. Rendering Control bölümündeki Renderable değerini etkisizleştirin. Böylece yazılar Render esnasında görünmeyecektir . İlk Event’taki Shape’i seçin ve Size değerini 1’e düşürün. Scale değerini etkinleştirip Variation değerine 60 girin. Böylece parçacık boyutları farklılaşacaktır . Görüntüyü hesaplattığınızda belli belirsiz dağınık noktalar göreceksiniz. Bu noktalar her bir parçacığa tekabül ediyor. Ama neden içini doldurdukları yazı nesnesi gibi durmuyorlar.
Cevap basit, çünkü sayıları çok az. Arttırmak oldukça kolay, sahneden PF Source’u seçin ve sağ panelden Quantitiy Multiplier / Render’ı 500 yapın. Render ettiğinizde yazının belirginleştirğini göreceksiniz.
Değeri istediğiniz kadar arttırabilirsiniz. Arttıkça Render işlemi yavaşlatacaktır ama çalışma performansınız düşmeyecektir. Yapılan işlem sadece parçacık sayısının hesaplama esnasında girdiğiniz değer katına çıkarılması.
Hemen alt kısımdaki System Management’i açın. Burada oldukça önemli bir parametre var. O da Integration Step. Viewport, çalışma ekranında, Render, hesaplama esnasındaki etkin değeri temsil ediyor. Peki anlamı ne? Kısaca parçacık konumunun doğru hesaplanması demek. Frame en yüksek değer (en hızlı hesaplanan), 1/8 Frame ve 1 Tick ise en düşük değerler (en yavaş hesaplanan). Bu değerler parçacık konumlarına etki ettikleri için farklı olduklarında çalışma ekranı ile Render arasında tutarsızlıklar olabilir. Bunun çözümü ikisinide aynı değere ayarlamaktır.
9) Görsellik ayarlarımıza parçacıkları zaman içerisinde renklendirerek son verelim. Yani parçacıklar doğumlarından ölümlerine kadar farklı renklere boyanacaklar. İlk iş olarak parçacık görünümünü açın. Kütüphaneden Material Dynamic isimli operatörü ana Event’ın yani ilk modül (yada kümenin) içine sürükleyip bırakın. Hemen altına Delete operatörü ekleyin.
Parçacıkların hepsi kaybolacaktır. Neden Delete kullanıyoruz? Çünkü parçacık yaşını baz alan malzeme etkileri parçacık yaşının hesaplanmasına ihtiyaç duyuyor ve Delete operatörü yerleştirene dek parçacıklar sonsuza kadar (!) yaşıyor. Delete operatörünü seçin ve By Particle Age’i etkinleştirip Life Span değerine 300 girin.
Böylece malzeme etkileri 300 kareyi referans alarak oluşacak. Malzeme düzenleyicisini açın. Malzemenin Diffuse kutucuğuna tıklayın ve açılan listeden Particle Age’i seçin. 3 tane renk kanalı karşınıza gelecektir. İlk renk parçacıkların doğum anını, ortadaki renk orta yaşı, son renkte ölüm anını (!) temsil ediyor. Renkleri bu doğrultuda istediğiniz gibi değiştirin. Renk kanallarının altındaki yüzdeleri değiştirerek parçacık yaşına etkilerini değiştirebilirsiniz.
Parçacık penceresininin diğer köşede açık olduğunu varsayıyorum. Material Dynamic operatörünü seçin. Değiştirdiğiniz malzemeyi düzenleyiciden Material Dynamic’in Assign Material kutucuğuna sürükleyip bırakın. Böylece malzemeyi parçacık sistemine atamış oldunuz. Gelelim ince ayarlara. Randomize Age Offset değerini etkinleştirip Max Offset değerini arttırarak parçacıkların renk geçişlerini farkılaştırabilirsiniz. Böylece oldukça renkli bir görüntü ortaya çıkacaktır.
SON DOKUNUŞLAR10) Son rötuş olarak parçacıklara rastgele dönüş hareketi verelim. Parçacık penceresini açın. Kütüphaneden Spin operatörünü ana Event içine sürükleyip bırakın . Spin Axis’i Speed Space Follow olara değiştirin.
Parçacıklar gittikleri doğrultuda yuvarlanacaklar. Zaman sürgüsünü ileri geri kaydırın. Parçacıklar çalışma ekranında noktasal olarak görüntülendiği için etkiyi algılayamıyoruz. Problemi şöyle çözelim. Sistemdeki tüm Display operatörlerini seçin ve silin. Display operatörü her yeni Event ile birlikte otomatik oluşturulur. Sildikçe parçacıkların kaybolduğunu göreceksiniz. Paniklemeyin. Kütüphaneden yeni bir Display operatörünü ana Event içine sürükleyip bırakın. Type’ı Geometry olarak değiştirin. Artık parçacıklar kendi gerçek şekilleri ile betimlenecekler. Ve zaman sürgüsünü kaydırdığınızda parçacıkların gittikleri yöne göre yuvarlandıklarını göreceksiniz. Operatörlerin ana Event içinde olması demek sadece içinde bulunduğu Event’a değil tüm parçacık sistemine etki etmesini sağlar.
Parçacıkları görselleştirirken Motion Blur ve / veya Post Effects (mesela Glow) kullanarak görüntüyü coşturabilirsiniz. Bundan sonra ister parçacık boyutunu çok küçültüp, miktarını arttırıp kum fırtınası oluşturun, ister hortumun kulübeyi dağıtmasını canlandırın (mesela, Twister filmi). Kalabalık simülasyonu dahi yapabilirsiniz. Uçan kuş sürüleri, birbirini kovalayan ordular. Yapabilecekleriniz tamamen hayal gücünüz ile sınırlı.
Bu yazıdan önce Particle Flow’a sizi ürkütüyor ise, umarım okuduktan sonra korkunuzu yenmişsinizdir. Açıkçası PFlow ile çok erken tanışamadım. Orada öylece duruyordu ama korkuyordum resmen kullanmaya çünkü çok karışık görünüyordu. Ama kullandıkça açıldım ve operatörleri arka arkaya dizdikçe işlevlerini daha iyi kavradım. Artık PFlow’dan korkmuyorum, kafamdakileri yapabileceğimi biliyorum... o zaman yeni bir hedef belirlemek gerek... yeni hedefimiz Thinking Particles! İleri!
Bana özel bir durum mu yoksa her bilgisayar grafiği yazarı için geçerli mi bilemedim ama, üç boyut üzerine yazı yazmak başka bir konu üzerine yazmaktan 6 kat daha pahalıya mal oluyor. Ne yaptımsa bunun önüne geçemedim, diğer konuları 1-2 günde hızlıca bitirirken 3DSMax yazıları en az 4-5 ve yoğun mesai gerektiriyor. Üstüne üstlük esprili ve akıcı anlatımda yemiyor. Yaz babam yaz onlarca parametre onlarca değer, bir o kadar teknik terim. hepsinin ne anlama geldikleri. Yazıyı uzatamıyorum, bölemiyorum... defalarca kontrol ediyorum. İngilizce terimlere karşılık kullandığım türkçeleri karıştırıyorum, başa dönüp düzeltiyorum. Her adımda sağlamasını yapıyorum. 3DSMax üzerine yazmayı sevsemde sanırım AfterFX veya diğer konular yazmak daha mantıklı.
Unutmadan, 3 boyutlu yada boyutsuz bilgisayar grafiği hakkında aklınıza takılan her konuda bana yazmayı unutmayın (email@example.com). Bir sonraki yazıda görüşmek üzere esen kalın.