Garry’s mod üzerinde sizlere particle ve efektlerini nasıl yapabileceğinizi, detaylıca nasıl kullanıp oyun içinde nasıl oluşturacağımızı diğer derslerle birlikte detaylı şekilde göreceğiz. Derste anlatılan particle’nin yapımı diğer source oyunlarında (CS:GO gibi) aynı şekilde yapılmaktadır.

 

Particle nedir kısaca anlayalım:

Particle yani türkçe isimle parçacık’lar oyun içinde 3D efektler olarak gördüğümüz (bulutlar, dumanlar, silah ateşi efektler, lazer veya trail gibi) şeylerdir. Particle sistemi, Source’nin sitesinde; küçük nesnelerin büyük koleksiyonu olarak tanımlanmış. Particle’nin kullanım amaçlarından biri, ekstra hesaplaramalar yaparak (iterasyon) hafızayı korumak. Bunların farklı şekilde kullanılma yöntemleri var. Birincisi tek bir particle olarak oyunda kullanılabilen particleler, İkincisi birçok particle’nin biraraya gelmesiyle oluşan particle’nin oyun içinde kullanılması, son olarakta oyun içinde belirli bir particle (yada texture) kullanılarak kodlarla değiştirilip meydana getirilmiş particleler.

 

 

Particlelerin yapısına bakacak olursak:

Renderers, Emitters, Initializers, Operators, Forces, Constraints ve Children adlı bileşenlerinden oluşur. *Bunları ilerki derslerimizde detaylı olarak kullanıp particlelerimizi yapacağız.

Ayrıca particle’yi dışardan kontrol edebilmek için (kodlarla) Control Points (CP) denilen girişleri (input) vardır.

Performans konusuna gelirsek;

Tek particle için maksimum 1000 parçacık efekti kullanabilirsiniz (1004 yazsa bile). Tabikide direk olarak hafızada yer ayırarak hafızayı etkileyecektir. Particle yapmaya başladığınızda ilk olarak kaç parçacık kullanacağınızı belirlemeniz en doğrusu olacaktır.

Particle hesaplamaları multi-thread olarak yapılmaktadır. Ayrıca SIMD tekniği kullanılarak aynı anda 4 particle’nin matematiksel değeri hesaplanır.

Overdraw konusuna gelirsek; particle’nin özelliğine göre aynı anda çıkan parçacıklar aynı pixele denk geldiğinde overdraw denilen ek efor ile karşılaşılır. Bu performansı direk olarak etkiler. Bunu önlemek için particlenizi daha küçük, daha az parçalı, parçacıkların arası geniş olarak ve daha geçirgen materyallerle yapabilirsiniz. Ayrıca bunu önlemek için birkaç teknik var, Bunlardan biri kullanılan materyale fade (zamana göre belirgenleşen, gözüken yada kaybolan) özelliği eklemek ($minfadesize ve $maxfadesize). Ayrıca materyal boyutunu ayarlamak ($minsize) ufakta olsa etki edecektir. Başka bir performans arttırma yöntemi ise Depthblend ($depthblend) denilen materyali yumuşatma ve birleştirme yöntemidir. Son olarak animasyonlu materyaller için Blendframes ($blendframes) adlı materyal’in her frame arasındaki aynı pixelleri overdraw’lamayı önleyen bir tekniktir.

Birden fazla particleyi tek particle olarak yapmamız gerektiğinde o particleler eğer aynı Initializers ve Operators içeriyorsa bunları veri paylaşma yöntemiyle tek bir particle gibi tek hesaplamayla yapabiliriz. Bunla yapılan işlemi bölmüş oluruz ve performans için olumlu etki elde etmiş oluruz.

Son olarak bilinen Constraint özelliği olan collision, yoğun miktarda işlem gücü gerektirdiğinden performansı direk olarak etkilemektedir. Eğer kullanacaksanız collision mode 3 olan özelliği en iyi performansı veren ayarıdır.

(Source sitesinden ve kendi bilgilerimden referans alınarak yazılmıştır)

 

Kullanım teknikleri:

Particlenizi modellerde (.qc’ye) tanımlayıp kod gerekmeden kullanabilirsiniz, ayrıca post-progress efekti olarakta oyun içinde kullanabilirsiniz. Onun haricinde kodla çeşitli yöntemlerle eklemeniz gerekmektedir.

 

Notlar:

  • Tek bir particleye (.pcf) birden fazla particle sistemi (parçacıklar) ekleyebilirsiniz ve bunları birbirleriyle ilişkili olarak kullanabilirsiniz. İlerki derslerde detaylı olarak göreceksiniz.
  • Oyun içinde kullanımları için Garry’smod yada CS:GO gibi modlanabilir/kodlanabilir oyunlarda particle_manifest’e eklemeden (GAME\particles\particles_manifest.txt) kodlar aracılıyla oyunda particlenizi ekleyip kullanabilirsiniz. Onun haricinde sdk üstünden modlar yapıyorsanız particle_manifest.txt’ye eklemeniz gerekmektedir. Onun haricinde kod üstünden manuel olarak  oyuna tanımlamanız gerekecektir.

 

 

 

Adım-1: Garry’s Mod Tools Modunu Tanıyalım

Öncelikle particle yapmak yada düzenlemek için kullanılan çeşitli programlar var. Temel olarak bu işi gören source’nin kendine özel aracı var. Oyun oynarken hızlı şekilde oluşturup, düzenleyip vakit kaybetmeden ayarlayabileceğiz.

 

  • Garry’s mod’u tools modunda açmak için öncelikle steam’dan garry’s mod oyununa sağ tıklayıp özelliklere tıklayın.
  • Ardından ordaki gözüken başlangıç parametreleri butonuna basın ve açılan kutuya şunu girin:

-tools

 

 

 

  • Girdikten sonra pencereyi kapatıp oyunu başlatın. Oyun açıldığında karşınıza farklı bir arayüz gelecektir.
  • Yukardan Tools menüsüne tıklayıp Particle editor kısmına tıklayın.

 

 

 

  • Ardından yukardan File sekmesine tıklayıp New yazana tıklayın.
  • Karşınıza yeni bir arayüz gelecek, buraya kadar editörü açmayı öğrenmiş bulunmaktayız diğer adıma geçelim.

 

 

Adım-2: Basit Bir Particle Oluşturalım

  1. Gördüğünüz gibi ekranda 4 parçadan oluşan bir arayüz var. İlk arayüz olan Particle System Browser üstündeki Create butonuna tıklayıp açılan küçük butona yeniparcacik yazıp OK’a tıklayın. (Resimdeki 1 numaralı kısım)
  2. Aşağıda properties penceresinde çıkan tree menüsündeki material yazan yerin sağındaki kısımda bulunan butona tıklayın. Bu buton efektimiz için kullanacağınız materyali belirler. (Resimdeki 2 numaralı kısım)
  3. Açılan “Select .VMT file” adlı menüden materyal seçeceğiz. Pencerenin altındaki filter yazan kısma glow_11 yazın. (Resimdeki 3 numaralı kısım) Ayrıca bu materyali sürekli örnek olarak kullanacağız.) Ardından yukarda çıkan materyale tıklayıp Open butonuna tıklayın. (Resimdeki 4 numaralı kısım)

Özet olarak bu adımda yeni bir parçacık (particle system) oluşturduk ve bu parçacığın materyalini belirledik.

 

Adım-3: Bileşenler Ekleyelim

  1. İlk olarak sol alttaki pencereden Properties kutusundan Renderer (türkçeyle sunucu) kısmını açıyoruz. Render olayını özetlemek gerekirse, yapacağımız efektin ekranda gösterilmesi için aşağıda seçeceğimiz özelliğe göre grafik motorunu hazırlamak, bu özelliğe göre hesaplamaları sağlamak ve grafiği motor ile ekranda hesaplamalarla oluşturmaktır. (Bknz: Render nedir)
  2. Açtıktan sonra hemen o kutunun altındaki boş kısımda yazan “No particle functions” kısma sağ tıklayıp Add diyoruz.
  3. Açılan menüde render_animated_sprites yazısına tıklayıp Open diyoruz. Bunu seçmemizin sebebi hareketli bir görsel oluşturacağız. Diğer seçeneklerlede farklı şekilde oluşturulabilir onlar ilerki derslerde anlatılacaktır.
  4. Ardından kutudan Emitter (türkçeyle yayıcı) kısmını açıyoruz ve Add dedikten sonra açılan menüde emit_continuously kısmına tıklayıp Open diyoruz. Bu özellikle sürekli olarak efekti oluşturmaya, yaymaya diğer kelimeyle doğurmaya yarıyor. Diğer özellikler de benzer özelliğe sahip fakat istediğimiz şey için en uygun olanı bu. Diğerki derslerde göreceksiniz.
  5. Daha sonra yine kutudan Initializer (türkçeyle başlatıcı) kısmından yine Add dedikten sonra Position Within Sphere Random özelliğini seçelim. Bu özellik Emitter kısmında belirlediğimiz yayıcıdan çıkan efektleri bir küre içinde rasgele pozisyonlarda çıkarmanıza olanak sağlıyor. Ardından sağdaki tree kısmından distance_max anahtarını bulup karşısındaki değere 50 yazın. Böylece mesafesini maksimum 50 olarak ayarlamış olduk.
  6. Son olarak kutudan Operator (türkçeyle işleyici) kısmına gelip Add yapıp Alpha Fade and Decay özelliğini ekleyelim. Bu özellik çıkan efetkleri belirlenen zamana göre ekranda kaybolmasını sağlar.
  7. İşlemlerimiz bitti sağ alttaki pencereden particlemizi görebiliriz. Sol tıkla efekti sağa sola, Sağ tıkla kamerayı ileri geri, Shift + sol tık ile kameranın konumu ve Alt + sol tık ile kamera açısını ayarlayabilirsiniz. Son olarak sol üstten File kısmına tıklayıp Save butonuna tıklayıp açılan menüden ismini particlem olarak oyunun particles klasörüne (garrysmod/particles) kaydedin.

Bukadar!

Özetlersek; Efektlerin ekranda gösterilmesi için renderer ekledik, ardından efektleri çıkartan bir Emitter yani yayıcı ekledik. Daha sonra efektleri belirlenen özellikte yani ayarladığımız özelliğe göre farklı pozisyonlarda yayılmasını başlatmak için bir Initializer özelliği ekledik. Son olarak oluşan efektlerin kaybolması için Operator yani bir işleyici ekledik. Son olarakta particlemizi kaydettik.

Adım-4: Oyunda Kullanalım

  1. Oyunun menüsüne dönmek için F10 ardından F11 tuşuna basın ve singleplayer modunda oyunu başlatın.
  2. Oyunu başlattıktan sonra, particlemizi oluşturmak için kod kullanacağız oyüzden garrysmod/lua klasörüne gidip test.lua adında bir dosya oluşturun ve aşağıdaki kodları kopyalayıp yapıştırın.
game.AddParticles("particles/particlem.pcf") //Burda particlemizi oyuna ekledik (particle_manifest.txt'ye eklemeden bu şekilde oyuna ekleniyor)
//PrecacheParticleSystem("yeniparcacik") //Particlemizi precacheledik. Bu oyuna girerken yapılması gereken kısım oyüzden devredışı
if CLIENT then
//ParticleEffect("yeniparcacik", LocalPlayer():GetPos(), LocalPlayer():GetAngles(),nil) //Burda particlemizi oyunda kendi pozisyonlarımızın olduğu yere oluşturduk (kendi oyunumuzda gerek yok oyüzden devre dışı)
else
ParticleEffect("yeniparcacik", player.GetAll()[1]:GetPos(), player.GetAll()[1]:GetAngles(),nil) //Burda particlemizi oyunda kendi pozisyonlarımızın olduğu yere oluşturduk (sunucu üstünde)
end
  1. Ardından oyunda konsolu açıp öncelikle sv_allowcslua 1 yazalım. (client tabanlı dosya açma izni) Ardından  lua_openscript_cl test.lua yazalım. (oyununuzda particleleri bu şekilde aktif ettik) Son olarakta lua_openscript test.lua yazıp sunucuda particleleri oluşturalım ve konsolu kapatıp oyuna baktığımızda olduğumuz yerde yaptığımız particlemiz gözükecektir.

Bukadar..

 

Notlar:

  • Yaptığınız particleleri PAC editör‘de de kullanabilirsiniz.
  • Ayrıca F10 ve F11’e bastığınıza oyun içindeyken editöre ulaşabilir, yeni particle yapıp onları düzenleyebilirsiniz.
  • CS:GO gibi yeni versiyon source motorlarındaki particle editör daha gelişmiştir (aşağıdaki resimde olduğu gibi). Ayrıca bu tür motorlardan particle port yapabilmeniz için ayrı bir yazı açmıştım buraya tıklayarak ulaşabilirsiniz.
  • CS:GO gibi yeni sürüm source motorları için particle yapmak istiyorsanız Alien Swarm SDK aracını kullanın. Steam’da Araçlar kategorisinde mevcuttur.

Dersimiz bukadardı arkadaşlar ilerleyen zamanlarda yeni dersler isteğe bağlı yayınlanacaktır.