Cara membuat jejak plasma untuk pesawat ruang angkasa

13

Saya telah melihat banyak game luar angkasa yang tampak hebat yang semuanya menggunakan efek serupa. Saya benar-benar tertarik untuk mengetahui bagaimana beberapa efek ini umumnya dilakukan.

Secara khusus saya ingin tahu bagaimana beberapa jalan di belakang pesawat ruang angkasa atau rudal dicapai tanpa menggunakan semua sumber daya yang tersedia.

Sebagai contoh efek yang saya maksud, lihat tangkapan layar untuk Gimbal , dan bahkan video di tautan yang sama. Juga jejak rudal di Ether Vapor .

Apakah kedua teknik ini sama? Saya terutama tertarik pada 2D, tapi saya tidak bisa membayangkan itu akan terlalu berbeda.

Jadi bagaimana cara saya membuat efek semacam ini? Apakah kita berbicara pixel shaders, blendmodes / filter, efek bitmap, sistem partikel, atau apa? Tidak terlalu spesifik platform. Saya hanya mencari teorinya, tetapi contoh atau tautan spesifik akan bagus. Dan lebih detail lebih baik.

Adam Harte
sumber

Jawaban:

7

Jadi bagaimana cara saya membuat efek semacam ini? Apakah kita berbicara pixel shaders, blendmodes / filter, efek bitmap, sistem partikel, atau apa? Tidak terlalu spesifik platform. Saya hanya mencari teorinya, tetapi contoh atau tautan spesifik akan bagus. Dan lebih detail lebih baik.

Semua yang di atas.

Kecuali Anda melihat-lihat kode sumbernya, Anda mungkin tidak tahu persis bagaimana mereka melakukannya.

Namun, dari penampilan kedua game tersebut, keduanya memiliki apa tampak seperti geometri yang terhubung dan mengikuti jejak kapal. Mungkin tidak harus menjadi sistem partikel titik-sprite dasar, tetapi juga tidak terlalu sulit.

Beberapa gim akan menggunakan algoritme garis lengkung dan menghasilkan daftar simpul dari situ dan melakukan sedikit tekstur dengan berbagai tekstur yang diterapkan pada dua titik akhir jejak, sehingga pada satu titik knalpot terlihat panas dan di sisi lain knalpotnya terlihat lebih dingin dan di sisi lain itu lebih dingin dan keluar ke ruang angkasa.

Kapal pemain adalah kasus yang menarik karena gerakannya tidak dapat diprediksi, dan Anda mungkin perlu memperbarui titik kontrol dari algoritma kurva Anda, atau mengakhiri pengambilan sampel posisi kapal terbaru dan menghasilkan posisi simpul berdasarkan itu.

Lihatlah jawaban ini dari pertanyaan sebelumnya jika Anda ingin memiliki sesuatu yang bekerja di luar titik kontrol. Namun untuk kebutuhan Anda, pengambilan sampel posisi pemain mungkin akan bekerja jauh lebih baik dan lebih mudah dipahami.

Inilah sesuatu yang membuat Anda berpikir:

Mulai mencicipi posisi pemain. Titik-titik ini akan membentuk segmen tubuh jejak Anda, dari mana geometri dapat dibangun. Merupakan ide bagus untuk memisahkan segmen ekor yang yang memiliki tekstur terpisah. Anda mungkin ingin mendeteksi ketika pemain berputar dan meningkatkan frekuensi segmen ini, jika tidak, Anda akan berakhir dengan kurva kuning. Kecuali jika itulah efek yang Anda inginkan :)

Pada acara-acara tertentu, segmen harus berhenti menghasilkan dan yang sudah ada harus mulai perlahan-lahan turun, mulai dari segmen tubuh yang paling dekat dengan ekor (tetapi bukan ekor itu sendiri). Ini jika pemain melambat. Tetapi, jika kecepatan di mana segmen diperkecil sesuai dengan kecepatan kapal pemain, maka segmen baru akan terbentuk tepat pada waktunya ketika salah satu dikeluarkan. Jadi ini juga bekerja dengan baik untuk kapal yang bergerak penuh. Panjang jejak akan selalu sama - yang memberikan aliran cairan yang konsisten.

The segmen kepala harus selalu berada di posisi saat pemain. Jika ada belokan terdeteksi, segmen kepala yang ada ditambahkan ke segmen tubuh, dan segmen kepala baru dimulai. Ulang. Tergantung pada tekstur Anda, setiap segmen mungkin memiliki panjang maksimal juga.

Ini memberi kita cara mudah untuk memodelkan efek ini: menghilangkan gagasan bahwa efeknya akan selalu berkurang / menyusut dengan sendirinya kecuali ada lebih banyak segmen yang disediakan, dan bermain-main dengan kecepatan agar tidak menyusut.

Jovan
sumber
4

Ada banyak kemungkinan berbeda untuk membuat jalur seperti itu. Anda dapat menggunakan garis sederhana, poligon, awan titik, dll.

Semuanya biasanya didasarkan pada satu dari dua konsep:

  • Lacak posisi sebelumnya dan gunakan ini untuk menggambar ekornya.
  • Lacak kecepatan / arah dan sesuaikan ekor berdasarkan itu.

Yang pertama lebih cocok untuk hal-hal seperti rudal, sedangkan pendekatan kedua lebih baik untuk beberapa hal yang melekat mengikuti sesuatu (seperti ekor naga).

Implementasi sederhana untuk buntut mesin tidaklah rumit. Anda hanya perlu beberapa penyangga untuk menyimpan posisi sebelumnya. Saya tidak tahu bahasa yang Anda gunakan, tetapi untuk ini saya akan menggunakan buffer cincin atau semacam buffer serupa (penghapusan cepat dan penyisipan di ujungnya).

Setiap centang frame / pembaruan x-th (Anda tidak harus melakukannya seratus kali per detik), Anda pada dasarnya menjatuhkan elemen terlama / terakhir di buffer Anda dan menambahkan posisi saat ini ke depannya (hanya jika buffer diisi; pastikan selalu berisi n elemen, di mana n menentukan panjang ekor Anda).

Kemudian, selama menggambar Anda baru saja mulai pada posisi Anda saat ini dan menggambar satu set garis melalui semua titik di buffer Anda, sambil menurunkan opacity Anda dengan setiap titik lebih lanjut.

Dengan cara ini Anda harus berakhir dengan ekor yang bagus dan bersih. Berdasarkan platform Anda, Anda dapat memperluas ini, misalnya menggunakan shader atau dengan membungkus beberapa grafik ekor yang bagus di sepanjang jalan itu.

Mario
sumber