Uzay gemisi için plazma izi nasıl oluşturulur


13

Hepsi benzer efektler kullanan harika görünümlü uzay oyunları gördüm. Bu etkilerin bazılarının genel olarak nasıl yapıldığını öğrenmekle gerçekten ilgileniyorum.

Özellikle, uzay gemilerinin veya füzelerin arkasındaki patikaların bazılarının mevcut tüm kaynakları kullanmadan nasıl yapıldığını bilmek istiyorum.

Efekt örnekleri için Gimbal'ın ekran görüntülerine ve hatta aynı bağlantıdaki videoya bakın. Ayrıca Ether Vapor'da füze rotaları .

Her ikisi de aynı teknikler mi? Çoğunlukla 2D ile ilgileniyorum, ancak çok farklı olacağını hayal edemiyorum.

Peki bu tür bir etki yaratmaya nasıl devam edebilirim? Piksel gölgelendiricilerden, karışım modlarından / filtrelerden, bitmap efektlerinden, parçacık sistemlerinden mi bahsediyoruz? Gerçekten platforma özgü değil. Sadece teoriyi arıyorum, ancak belirli örnekler veya bağlantılar harika olurdu. Ve daha fazla ayrıntı daha iyi.

Yanıtlar:


7

Peki bu tür bir etki yaratmaya nasıl devam edebilirim? Piksel gölgelendiricilerden, karışım modlarından / filtrelerden, bitmap efektlerinden, parçacık sistemlerinden mi bahsediyoruz? Gerçekten platforma özgü değil. Sadece teoriyi arıyorum, ancak belirli örnekler veya bağlantılar harika olurdu. Ve daha fazla ayrıntı daha iyi.

Yukarıdakilerin hepsi.

Kaynak kodları ile kurcalamadığınız sürece, bunu nasıl yaptıklarını tam olarak bilemeyebilirsiniz .

Ancak, iki oyunun bakış açısından, her ikisinde de bağlı ve gemiyi izleyen geometri gibi görünen şeyler var . Temel bir nokta-hareketli parçacık sistemi olmayabilir, ancak hepsi bu kadar zor değil.

Bazı oyunlar kavisli bir çizgi algoritması kullanacak ve bundan bir köşe listesi oluşturacak ve izin iki uç noktasına uygulanan farklı dokularla biraz doku oluşturacak, böylece bir noktada egzoz sıcak görünüyor ve diğer tarafta daha serin ve uzaya gidiyor.

Bir oyuncunun gemisi ilginç bir durumdur, çünkü hareketler tahmin edilemezdir ve ya eğri algoritmanızın kontrol noktalarını güncellemeniz ya da en son gemi pozisyonunu örneklemeniz ve buna dayanarak tepe konumları oluşturmanız gerekebilir.

Bir göz atın bu cevap size kontrol noktalarının kapalı çalışan bir şey yapmak istiyorsanız önceki bir sorudan. Gereksinimleriniz için, oyuncuların konumunu örneklemek muhtemelen çok daha iyi çalışacak ve daha kolay anlaşılacaktır.

İşte size düşünmenizi sağlayacak bir şey:

Oynatıcı konumunu örneklemeye başlayın. Bu noktalar , geometrinin oluşturulabileceği izinizin gövde segmentlerini oluşturacaktır. Ayrı bir kuyruk segmenti tutmak iyi bir fikirdirAyrı bir dokuya sahip . Bir oyuncunun ne zaman döndüğünü tespit etmek ve bu segmentlerin sıklığını artırmak isteyebilirsiniz, aksi takdirde bloklu eğriler elde edersiniz. Sürece etkisi bu olmadığı sürece :)

Belirli olaylarda, segmentlerin üretimi durdurması gerekir ve mevcut olanların kuyruğa en yakın vücut segmentinden başlayarak yavaş yavaş aşağı doğru başlaması gerekir (ancak kuyruğun kendisi değil). Bu, oyuncunun yavaşlaması durumundadır. Ancak, segmentlerin küçültülme hızı oyuncunun gemi hızıyla eşleşiyorsa, çıkarıldığı anda yeni bir segment oluşturulacaktır. Dolayısıyla bu tam hareketli bir gemi için de işe yarar. Patika uzunluğu her zaman aynı olacaktır - bu da akışkan, tutarlı bir akış sağlar.

Kafa segmenti daima oyuncunun mevcut pozisyonunda olmalıdır. Herhangi bir dönüş tespit edilirse, mevcut kafa segmenti bir gövde segmentine eklenir ve yeni bir kafa segmenti başlatılır. Tekrar et. Dokularınıza bağlı olarak, her segmentin de maksimum uzunluğu olabilir.

Bu bize bu etkiyi modellemek için kolay bir yol sağlar: daha fazla segment sağlanmadığı sürece etkinin her zaman kendiliğinden azalacağı / büzüleceği ve büzülmesini önlemek için hızlarla oynayacağı fikrinin ortadan kaldırılması.


4

Bu tür yollar oluşturmak için birçok farklı olasılık var. Basit çizgiler, çokgenler, nokta bulutları vb. Kullanabilirsiniz.

Hepsi genellikle iki kavramdan birine dayanır:

  • Önceki konumları takip edin ve kuyruğu çizmek için bunları kullanın.
  • Hızı / yönü takip edin ve kuyruğu buna göre ayarlayın.

Birincisi füzeler gibi şeyler için daha uygundur, ikinci yaklaşım ise bir şeyleri takip eden (ejderha kuyruğu gibi) bir tür bağlı şeyler için daha iyidir.

Motor kuyrukları için basit bir uygulama bu kadar karmaşık değildir. Önceki konumları saklamak için sadece bir ara belleğe ihtiyacınız olacak. Hangi dili kullandığınızı bilmiyorum, ancak bunun için bir halka tamponu veya benzer bir tampon (hızlı silme ve uçlarda ekleme) kullanacağım.

Her x-th çerçeve / güncelleme işareti (saniyede yüz kez yapmak zorunda değilsiniz), esasen arabelleğinizdeki en eski / son elemanı düşürür ve geçerli konumu önüne eklersiniz (yalnızca tampon doldurulmuşsa; her zaman n eleman içerdiğinden emin olun, burada n kuyruğunuzun uzunluğunu belirler).

Ardından, çizim sırasında mevcut konumunuzdan başlayın ve ara belleğinizdeki tüm noktalardan bir dizi çizgi çizin ve diğer her köşe ile opaklığınızı azaltın.

Bu şekilde güzel ve temiz bir kuyrukla karşılaşmalısınız. Platformunuza bağlı olarak, örneğin gölgelendiricileri kullanarak veya bu yol boyunca hoş bir kuyruk grafiği sararak bunu genişletebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.