Pflow ile Event sistemi
Particle Flow ile kullanılan Event sistemini tüm detayları ile inceliyoruz.
DEĞİŞİM BAŞLIYOR
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ŞLIYORUZ
1) 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 NESNELER
3) 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 AYARLARI
5) 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ÇAR
7) 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ŞKUYU
8) 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ŞLAR
10) 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 . Bir sonraki yazıda görüşmek üzere esen kalın.
Ekleyen: herbap
Biraz uzun olmuş, ama çok detaylı olmuş. Aklıma takılan birkaç soruyu da giderdim, bu ders sayesinde. Eline sağlık.
- Offline
Kapalı
Eklediğim Dersler
Ders Kategorileri
Yeni Dersler (Tutorials)
- Armor Modelleme
Ekleyen: Dereli - Ücretsiz Zbrush Dersi.
Ekleyen: BurakB - Corona Render ile Salon Görselleştirme
Ekleyen: barcelona1988 - Tek Bir Resimle Nasıl Sinematik Görüntü Ala Biliriz?
Ekleyen: PixlandPictures - After Effects - Script kullanmadan karakter rigleme
Ekleyen: PixlandPictures - 3dsmax landscape_ Making of Part1
Ekleyen: altıneldiven - Oyun yapımı dersleri 5 - Unity3D Sahne Duzeni
Ekleyen: drekon