Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Programming

Buat Pemandangan Malam Bersalut, Bersalji Menggunakan Kesan Partikel

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Aisyah Arrafah (you can also view the original English article)

Kesan zarah sangat biasa dalam permainan - sukar untuk mencari permainan moden yang tidak menggunakannya. Dalam tutorial ini, kita akan melihat cara membina enjin zarah yang agak rumit dan menggunakannya untuk mewujudkan adegan salji yang menyeronokkan. Letakkan topi bulu anda dan mari bermula.

Nota: Walaupun tutorial ini ditulis menggunakan AS3 dan Flash, anda harus menggunakan teknik dan konsep yang sama dalam hampir semua persekitaran pembangunan permainan.


Preview Keputusan Akhir

Klik dan seret tetikus untuk berinteraksi dengan kesan salji.

Tiada Flash? Lihat video demo ini di YouTube:


Persediaan

Pelaksanaan demo di atas menggunakan AS3 dan Flash, dengan Rangka Kerja Starling untuk GPU mempercepatkan rendering. Imej pra-3D yang dipancarkan (tersedia dalam muat turun sumber) akan digunakan sebagai latar belakang. Di lapisan tengah kita akan meletakkan kesan zarah, dan keseluruhan adegan akan didarab dengan tekstur yang mewakili atribusi cahaya.


Kesan zarah

Dalam permainan, kita sering mensimulasikan pelbagai fenomena visual dan gerakan, dan kerap perlu memaparkan kesan visual dinamik seperti api, asap dan hujan. Terdapat banyak cara yang boleh kita lakukan ini; Kaedah yang biasa adalah dengan menggunakan kesan zarah.

Ini melibatkan penggunaan banyak elemen kecil - biasanya imej berorientasikan untuk menghadapi kamera - tetapi ia boleh dilakukan dengan menggunakan model 3D juga. Matlamat utama adalah untuk mengemas kini kedudukan, skala, warna dan sifat-sifat lain sekumpulan banyak zarah (mungkin beberapa ribu). Ini akan mewujudkan ilusi bagaimana kesannya kelihatan dalam kehidupan sebenar.

Creating a Snowy Night Scene Using Particle Effects
Kesan zarah moden: zarah GPU dalam Enjin Unreal baru 4

Dalam tutorial ini kita akan mensimulasikan dua kesan: kesan salji yang akan terdiri daripada banyak kepingan kepingan, yang terjejas oleh angin dan graviti, dan kesan kabut halus yang akan menggunakan sebilangan besar sprite asap.


Menerapkan Emitter, Colliders dan Force Source

Kesan zarah tipikal terdiri daripada satu atau lebih pemancar zarah. Pemancar adalah tempat di mana zarah berasal dari; ia boleh mengambil pelbagai bentuk dan mempunyai perilaku yang berbeza. Ia menambah kedudukan awal dan sudut zarah, dan juga boleh menentukan parameter permulaan lain, seperti halaju awal.

Kami akan mewujudkan satu jenis pemancar, pemancar kotak, yang akan menimbulkan zarah dalam - anda telah meneka - kotak yang kami tentukan.

Creating a Snowy Night Scene Using Particle Effects

Untuk memudahkan kami menambah lebih banyak pemancar, kami akan menggunakan bina pengaturan yang dipanggil antara muka yang mentakrifkan bahawa kelas yang melaksanakannya perlu mempunyai satu set kaedah yang ditetapkan. Dalam kes kita, kita akan memerlukan satu kaedah sahaja:

Melaksanakan ini dalam pemancar kotak adalah super mudah; kita ambil titik rawak antara mata minimum dan maksimum yang menentukan kotak:

Untuk membuat contoh ini lebih menarik dan sedikit lebih maju, kami akan menambah konsep: sumber collider dan untuk kekuatan.

Penjejakan akan menjadi objek yang terdiri daripada satu atau lebih definisi geometri, yang boleh dilampirkan kepada pemancar zarah. Apabila zarah mempunyai interaksi dengan collider (iaitu apabila ia memasuki geometri), kita akan mendapat satu peristiwa untuk menentukan apa yang ingin kita lakukan. Ini akan digunakan untuk menghentikan serpihan salju dari bergerak apabila mereka bertembung dengan tanah.

Creating a Snowy Night Scene Using Particle Effects

Dengan cara yang sama dengan emitter kita akan menggunakan antara muka yang memerlukan kita melaksanakan fungsi berikut:

Perhatikan: ini adalah pelaksanaan yang mudah, jadi kami hanya mengambil kira kedudukan ketika memeriksa pelanggaran.

Pelaksanaan kolider kotak adalah mudah; kita periksa sama ada titik itu berada di dalam batas kotak:

Jenis objek lain yang kami akan memperkenalkan adalah sumber tenaga. Ini akan memberi kesan kepada halaju zarah berdasarkan parameternya dan kedudukan dan massa zarah.

Sumber yang paling mudah akan dipanggil sumber daya arah, dan kita akan menentukannya dengan vektor tunggal D (digunakan untuk arah dan kekuatan daya). Ia tidak mengambil kira kedudukan partikel; ia hanya menggunakan kuasa pada semua zarah dari kesan itu. Dengan ini kita dapat mensimulasikan graviti dan angin - untuk angin arah akan berbeza-beza dalam masa untuk berasa lebih realistik.

Satu lagi jenis sumber tenaga akan bergantung pada jarak antara titik dan zarah yang ditentukan, semakin lemah jauh dari pusat. Sumber ini akan ditakrifkan oleh kedudukannya P dan faktor kekuatan S. Kami akan menggunakan ini untuk membolehkan interaksi tetikus dengan salji.

Creating a Snowy Night Scene Using Particle Effects
Jenis sumber daya yang akan kami buat

Sumber tenaga akan mempunyai antara muka sendiri, yang memerlukan kaedah berikut untuk dilaksanakan:

Walau bagaimanapun, kali ini kita mempunyai pelbagai pelaksanaan: satu untuk sumber daya arah dan satu untuk sumber daya titik.

Pelaksanaan sumber kuasa arah adalah lebih mudah dari kedua-dua:

Ini adalah pelaksanaan sumber daya titik:

Ambil perhatian bahawa kaedah ini akan dipanggil secara berterusan. Ini membolehkan kami mengubah parameter daya apabila kesannya aktif. Kami akan menggunakan ciri ini untuk mensimulasikan angin dan menambah interaktiviti tetikus.


Kesan dan Pelaksanaan Zarah

Bahagian utama pelaksanaannya adalah dalam kelas Kesan, yang bertanggungjawab untuk pemijahan dan pengemaskinian zarah.

Jumlah zarah untuk bertelur akan ditentukan oleh nilai spawnPerSecond dalam kaedah kemas kini:

Mengemas kini agak lebih kompleks. Mula-mula perlaksanaan mengemas kini tentera, maka ia memanggil kemas kini simulasi zarah dan cek untuk perlanggaran. Ia juga bertanggungjawab untuk mengeluarkan zarah apabila ia tidak diperlukan lagi.

Saya belum lagi menyebut bahagian terpenting pelaksanaannya: bagaimana kita mewakili zarah. Kelas Zarah akan mewarisi dari objek yang kita dapat paparkan (imej) dan mempunyai beberapa sifat yang akan mempengaruhi perubahannya semasa pembaruan:

  • startLife - berapa lama zarah boleh terus hidup.
  • alih - sama ada kedudukan zarah berubah (digunakan untuk membekukan zarah di tempat).
  • halaju - berapa zarah akan bergerak dalam jangka waktu tertentu.
  • pecutan - berapa halaju zarah akan berubah dalam satu set masa.
  • angularVelocity - berapa cepat perubahan putaran dalam jangka waktu tertentu.
  • fadeInOut - sama ada kita menggunakan nilai alpha pudar untuk lancar mencipta dan memusnahkan zarah tersebut.
  • alphaModifier - menentukan nilai asas alpha.
  • jisim- fizikal zarah (digunakan apabila mengira pecutan dari kuasa).

Setiap zarah mempunyai fungsi kemas kini yang dipanggil dengan delta masa (dt). Saya ingin menunjukkan sebahagian daripada fungsi yang berkaitan dengan pengemaskinian kedudukan zarah, yang lazim dalam permainan:

Ini dilakukan dengan menggunakan integrasi Euler dan ia mempunyai kesilapan ketepatan, tetapi kerana kita menggunakannya hanya untuk kesan visual ini tidak akan mengganggu kita. Jika anda melakukan simulasi fizik yang penting kepada permainan, anda harus melihat ke dalam kaedah lain.


Kesan Contoh

Akhir sekali, kita telah sampai ke titik di mana saya akan menerangkan cara melaksanakan kesan sebenar. Untuk membuat kesan baru kami akan memperluaskan kelas Kesan.

Creating a Snowy Night Scene Using Particle Effects
Tekstur zarah

Biar ia bersalji

Kami akan bermula dengan kesan salji. Pertama, letakkan pemancar kotak di atas skrin, dan gunakannya untuk menanam beberapa zarah. Penjejak akan digunakan untuk mengesan sama ada zarah telah sampai ke lantai, di mana kita akan menetapkan harta boleh alih ke palsu.

Perkara penting yang perlu kita pastikan ialah zarah adalah cukup rawak supaya mereka tidak membuat pola yang kelihatan pada skrin, yang merosakkan ilusi. Kami melakukan ini dalam beberapa cara:

  • Halaju permulaan rawak - setiap zarah akan bergerak dengan cara yang sedikit berbeza.
  • Skala secara rawak - selain saiz yang berbeza, ini juga menambah kedalaman yang lebih besar untuk membuatnya kelihatan lebih 3D.
  • Putaran rawak - berkesan menjadikan setiap zarah kelihatan unik walaupun mereka menggunakan imej yang sama.

Kami memulakan setiap zarah salji dengan cara ini:

Untuk memberi mereka gerakan realistik jatuh dari langit kita akan menggunakan sumber daya arah sebagai graviti. Ia akan menjadi terlalu mudah untuk berhenti di sini, jadi kami akan menambah daya arah lain untuk mensimulasikan angin, yang akan berubah mengikut masa.

Kami akan mengubah nilai angin menggunakan fungsi sinus; ini kebanyakannya ditentukan melalui percubaan. Untuk paksi-x kita menaikkan sinus ke kuasa 4, menjadikannya lebih tajam. Setiap enam saat akan ada puncak, menghasilkan kesan tiupan angin yang kuat. Pada angin paksi-y akan cepat berayun antara -20 dan 20.

Lihatlah plot fungsi untuk mendapatkan pemahaman yang lebih baik tentang apa yang sedang berlaku.

Creating a Snowy Night Scene Using Particle Effects
Paksi-x mewakili masa; paksi y mewakili kelajuan angin. (Tidak skala.)

Tambah Beberapa Kabut

Untuk melengkapkan kesan, kami akan menambah kesan kabus yang halus, menggunakan kotak pemancar yang merangkumi seluruh adegan.

Oleh kerana tekstur yang akan kami gunakan untuk zarah agak besar, pemancar akan ditetapkan untuk menanam sejumlah kecil zarah. Tahap alfa dari zarah akan dari awal menjadi rendah untuk mengelakkannya daripada sepenuhnya mengaburkan tempat kejadian. Kami juga akan menetapkan mereka untuk berputar perlahan-lahan, untuk mensimulasikan kesan angin.

Untuk menambah suasana yang lebih sedikit kepada contoh, saya telah menambah tekstur ringan yang akan berada di lapisan tempat teratas; pengadunannya akan ditetapkan untuk Multiply. Kesan zarah kini akan menjadi lebih menarik, kerana warna putih asas mereka akan berubah agar sesuai dengan cahaya, dan adegan secara keseluruhan akan merasa lebih terintegrasi.

Creating a Snowy Night Scene Using Particle Effects

Meningkatkan Prestasi

Cara umum untuk mengoptimumkan simulasi banyak zarah adalah dengan menggunakan konsep penyatuan. Pooling membolehkan anda menggunakan semula objek yang telah dibuat, tetapi tidak diperlukan lagi.

Konsepnya mudah: apabila kita selesai dengan objek tertentu, kita memasukkannya ke dalam "kolam"; maka, apabila kita memerlukan objek lain dari jenis yang sama, kita mula-mula periksa untuk melihat apakah "ganti" berada di dalam kolam. Sekiranya, kami hanya mengambilnya dan menggunakan nilai-nilai baru untuknya. Kita boleh memasukkan sejumlah objek ini di dalam kolam pada permulaan simulasi untuk menyediakannya untuk kemudian.

Tip: Anda boleh mendapatkan maklumat yang lebih terperinci tentang penyatuan dalam artikel ini.

Satu lagi cara kita dapat mengoptimumkan kesan-kesan zarah adalah dengan mendahului mereka untuk tekstur. Dengan melakukan ini, anda akan kehilangan banyak kelenturan, tetapi kelebihannya adalah bahawa menarik kesan akan sama seperti menggambar imej tunggal. Anda akan menghidupkan kesan dengan cara yang sama seperti animasi helaian biasa.

Creating a Snowy Night Scene Using Particle Effects
Kesan zarah api dalam bentuk lembaran sprite

Walau bagaimanapun, anda perlu berhati-hati: ini tidak sesuai untuk kesan skrin penuh seperti salji, kerana mereka akan mengambil banyak ingatan.

Satu cara yang lebih murah untuk mensimulasikan salji adalah dengan menggunakan tekstur dengan pelbagai emping di dalam, dan kemudian melakukan simulasi yang sama dengan yang kita lakukan, tetapi menggunakan jauh kurang zarah. Ini boleh dibuat untuk kelihatan baik, tetapi mengambil usaha tambahan.

Berikut adalah contohnya (dari tempat kejadian Fahrenheit, aka Indigo Prophecy):


Pemikiran Akhir

Sebelum anda mula menulis enjin zarah anda sendiri, anda harus memeriksa sama ada teknologi yang anda gunakan untuk membuat permainan anda sudah mempunyai kesan zarah, atau sama ada pustaka pihak ketiga wujud. Namun, ia sangat berguna untuk mengetahui bagaimana ia dilaksanakan, dan apabila anda mempunyai pemahaman yang baik tentang hal itu, anda tidak sepatutnya menghadapi masalah menggunakan varian tertentu, kerana ia dilaksanakan dengan cara yang sama. Enjin zarah juga boleh datang dengan editor yang menyediakan cara WYSIWYG untuk mengedit sifatnya.

Sekiranya kesan yang anda perlukan boleh ditarik dalam kesan zarah berasaskan lembaran, saya akan mengesyorkan TimelineFX. Ia boleh digunakan untuk membuat kesan yang menakjubkan dengan cepat, dan mempunyai kesan besar perpustakaan yang anda boleh gunakan dan mengubah suai. Malangnya, ia bukan alat yang paling intuitif, dan tidak dikemas kini dalam seketika.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.