Particle Flow Script- Tanecikleri Anlamak

Particle Flow Script- Tanecikleri Anlamak

drekon

[font color=yellow size=4]Particle FLow[/font]

particle flow Max içersindeki animasyonlarda birçok güzel efekt yapan araçlardan biridir. eski araçlarla yağmur, kar, patlama gibi efektler yapılırken bununla daha ileri seviye işlemler yapılmaktadır.

[font color=yellow size=4]Neden Particle FLow[/font]

Particle flow içersindeki Operatör ve Event adı verilen araçlarla çok daha özgür kontrol imkanı sağlamaktadır.


Örneğin:
- Standart taneciklerle uçan kelebekler yapabilirsiniz. ama particle flow ile bu kelebeklerin birbiri ile veya dokunduğu yüzeylerle etkileşimini sağlayabilirsiniz. bu kelebekleri birkaç merkez arasında dolaştırabilirsiniz.

-standart taneciklerle duvara çarpan bir mermi yapabilirsiniz. ama p-flow ile bu merminin duvara çarptıktan sonra şeklinin değişmesi. duvardan parçalar kopması ve duvarda iz kalmasını yapabilirsiniz.

-Standart taneciklerle havada uçan bir araba yaptınız diyelim. tek model ve aynı kaplamaya muhtaç olursunuz. P-flow ile her renkte çeşit çeşit model arabayı tek kaynaktan çıkarabilirsiniz.

-Hız kontrolü, temas kontrolü, çarpma kontrolü, yüzeyde hareket, boyut kontrolü ve birçok diğer özellikleri ile kalabalık animasyonları sevenler için Particle Flow vazgeçilmez olacaktır.


[font color=yellow size=4]Neden Script[/font]
Particle flow her ne kadar esnek bir araç olsa da ileri seviye işlemlere başlayınca bazı özellikleri yetersiz geliyor. bu durumda script işlemlerine girip kodlara müdahale etmeniz gerekebiliyor.
Tabii daha önce programlama deneyimi olmayan veya MAx scripte yabancı olan biri için itici olabilir. Fakat biz bunu daha eğlenceli bir hale getirmek için sizinle birlikte çabalayacağız.


[font color=yellow size=4]Bu Konuya kim katılabilir ? [/font]

Daha önce P-Flow ile animasyon yapmış olanlar,
Kalabalık animasyonları sevenler,
Programlama bilmeyen ama çaba sarfedip öğrenmek isteyenler,
Programlama bilen ve Maxscripte giriş yapmak isteyenler

[font color=yellow size=4]Konunun uzmanı mıyım ? [/font]
Genel programlama bilgisine sahibim ama daha önce Maxscript ile uğraşmadım. Daha doğrusu gerek duymadım. Fakat tanecikleri çok seviyorum. Programlamayı da çok seviyorum.
Biraz inceleyince anlaşılması kolay görünüyor.



ayrıntı yazmam konusundaki uyarısı için Kalimba´ya teşekkür ederim.
[hr]


Anlamadığınız yerde sormaktan çekinmeyin, çünkü bu atölye programlama bilmeyenlere ve yeni başlayanlara yönelik açılmıştır.

Zaten programlama uzmanı olsanız bile Maxscripti anlamanız için basitten başlamak gerekiyor.

Scriptlerden kaçmayı bırakın.
aslında düşündüğünüzden kolay.

2009-04-16 10:28:51

Cvp

drekon

Öncelikle 3Dsmaxı açarak başlıyoruz.

particle bölümünden PF-Source oluşturuyoruz. Max görünüş penceresinden kaynağa tıklayıp sağ taraftan "Particle View " penceresini açıyoruz. kısayolu klavyede 6 (Altı) tuşu

[img]http://www.tr3d.com/dosyalar/5N6uI8ZIg.gif[/img]

Aşağıdaki operatörlerden "Birth Script" alıp yukarı taşıyoruz. böylece standart doğum işlemi yerine script ile bizim kontrolümüzde bir doğum işlemi olacak.

[img]http://www.tr3d.com/dosyalar/eozclLfP4.gif[/img]

Script penceresini açmak için "Birth script" e tıkladıktan sonra sağ taraftan "Edit Script" diyoruz.

O yazı penceresindeki herşeyi silin ve aşağıdaki kodu yapıştırın.

[pre]
on ChannelsUsed pCont do
(
pCont.useTime = true
pCont.useAge = true
)

on Init pCont do
(
)

on Proceed pCont do
(
if (pCont.NumParticles() <= 0) then (

pCont.AddParticle()
pCont.particleIndex = 1
pCont.particleAge = 0
pCont.particleTime = 0
)
)

on Release pCont do
(

)

[/pre]

Yazı penceresini kapatın ve Zaman çubuğunu kaydırın bakalım ne oldu. ?





.

2007-07-02 22:28:21

Cvp

hbc3d

Sadece Tek bir particle çıkıyor source´dan hocam.

2500 frame yaptim denedim, halen gidiyor:))

2007-07-03 01:46:13

Cvp

drekon

[G18]
işte bizim için burda ilk önemli konu tanecik sayısını kontrol edebilmek. bir tanecik yapmakla 1000 tane arasında fazla fark yok. ikinci konumuz tanecikleri istediğimiz zamanda oluşturup istediğimiz anda akışı kesmek.


Şimdi kodları silmeden aşağıdakini ekleyip iki tanecik elde edelim, eklenecek bölümü koyu ile gösterdim:


[pre]
on Proceed pCont do (
if (pCont.NumParticles() <= 0) then
(

pCont.AddParticle()
pCont.particleIndex = 1
pCont.particleAge = 0
pCont.particleTime = 0


pCont.AddParticle()
pCont.particleIndex = 2
pCont.particleAge = 0
pCont.particleTime = 0



)
)
[/pre]

iyide şimdi bize 100 tanecik gerekiyorsa ne yapacağız 100 kere buraya ekleme mi yapacağız. Hayır programcılığın güzelliği de burada başlıyor. iki satır yazı ile 100 tanecik elde etmek mümkün.

Şimdi o bölümü şu şekilde değiştirelim:

[S3]

[pre]
on Proceed pCont do (
if (pCont.NumParticles() <= 0) then
(

[font color=blue] for necmi in 1 to 100 do
([/font]

pCont.AddParticle()
pCont.particleIndex = [font color=blue]necmi[/font]
pCont.particleAge = 0
pCont.particleTime = 0

[font color=blue] ) [/font]
)
)
[/pre]


Ne eklediğimize dikkat edin. çok kalabalık birşey eklemedik.
for necmi in 1 to 100 do ( )

bu bir kalıptır, fakat kalıpta size tanıdık bir bölüm göreceksiniz. buraya kendi isminizi yazın. biz buna DÖNGÜ diyoruz.

[G22]

[font color=yellow]FOR DÖNGÜsü[/font]: Verilen iki sayı arasında aynı olayı tekrarlayan bir araçtır. yani for için kullandığımız iki parantez arasına ne yazarsanız o işlem 100 kere tekrar yapılır.

Şuna da dikkat edin, tanecik oluşturan komut üzerinde adımız yazıyor. buna değişken denir ve FOR ile işlem tekrar ederken necmi isimli bilgi sürekli değişir.

pCont.particleIndex = necmi

For bölümü tekrar tekrar çalışırken necmi de sürekli değiştiği için her taneciğe farklı bir numara verme imkanı olur.

2007-07-03 09:05:27

Cvp

hbc3d

100 tane particle cikti. Peki hocam, bu döngü 1 kez çalışıyor. Belii aralıklarla 100 er parçacık çıkamasını istersek nasıl yapacağız. Mesela her 50 frame de.

2007-07-03 14:18:25

Cvp

drekon

döngü bir kez çalışıyor ama [font color=yellow]on Proceed pCont do ( )[/font] bu bölüm her framede tekrar çalışıyor

temelleri öğrenmeden kafanı karıştırmayalım ama istediğin kod:

[pre]
on Init pCont do
(
global sayac =0
)

on Proceed pCont do
(
if(sayac == 50) then
(
pCont.AddParticle()
pCont.particleIndex = sayac
pCont.particleAge = 0
pCont.particleTime = sayac

sayac =0
)
sayac += 1
)

[/pre]

2007-07-03 15:24:41

Cvp

drekon

pardon sen 100 tane demişsin. ben 50 framede 1 tane yaptım.


Doğrusu budur:

[pre]on Init pCont do
(
global sayac =0
global framesay=0
)

on Proceed pCont do
(
if(sayac == [font color=blue]50[/font]) then
(
sayac=0

for necmi = 1 to [font color=blue]100 [/font]do
(
pCont.AddParticle()
pCont.particleIndex = pCont.NumParticles()
pCont.particleAge = 0
pCont.particleTime = framesay
)
)
sayac += 1
framesay += 1
)[/pre]


Sayıları değiştirip eğlenebilirsiniz.

2007-07-03 15:48:17

Cvp

drekon

Bu da değişik versiyonu:

20 saniye sürekli akıyor. sonra kesilip 30 frame boş bekliyor sayac=50 olana kadar. sayac=50 olunca işleme tekrar başlıyor.


[pre]on Init pCont do
(
global sayac =0
global framesay =0
)

on Proceed pCont do
(
if ((sayac >= 0) and (sayac <= [font color=blue]20[/font])) then
(
pCont.AddParticle()
pCont.particleIndex = pCont.NumParticles()
pCont.particleAge = 0
pCont.particleTime = framesay
)

sayac += 1
framesay += 1

if(sayac == [font color=blue]50[/font]) then
(
sayac=0
)
)
[/pre]

2007-07-03 16:09:33

Cvp

hbc3d

Süper[G2] Sağolasın hocam.

Merak ettim hocam bi an. Sorayım dedim. Istediğim tam buydu. ama senin dediğin gibi adım adım gitmek en mantıklısı.

2007-07-03 16:32:11

Cvp

drekon

yukardakileri incelersen döngüler(FOR) hakkında biraz fikir edineceğine eminim. en azından değerleri değiştirip farklı sonuçlar alırsan konuya aşina olursun.

C++ ile farklı olduğu için bende yazımda zorlanıyorum ama şahsen benim için çok eğlenceli bir konu.

başka katılan da yok, sana öğretip çıkalım bari.
[G18]

2007-07-03 21:45:36