Menggunakan pengaturan berikut untuk efek partikel OpenGL:
SRC: GL_SRC_ALPHA
DST: GL_ONE
Menciptakan campuran aditif, yang terlihat spektakuler pada latar belakang hitam tetapi mengerikan pada warna yang lebih cerah, karena memudar menjadi putih.
Saya kemudian menggunakan alpha blending:
SRC: GL_SRC_ALPHA
DST: GL_ONE_MINUS_SRC_ALPHA
Hal ini memungkinkan latar belakang lain untuk digunakan tanpa mempengaruhi warna partikel, tetapi partikel itu sendiri terlihat kusam dibandingkan dengan campuran aditif. Bagaimana saya bisa mencapai efek api yang baik dengan alpha blending dan partikel?
Aditif:
Alfa:
MEMPERBARUI:
Mengikuti saran David di bawah ini, saya membuat tekstur terpisah dan kemudian menggunakan campuran aditif pada efek partikel sebelum menggambar ke tekstur. Masalahnya adalah bahwa menggambar pada tekstur alpha = 0 hanya menghasilkan bagian berwarna dari partikel yang muncul di depan peta dunia saya, karena biasanya Anda memiliki latar belakang hitam. Caranya adalah dengan menggunakan dua tekstur. Saya menciptakan tekstur hitam dan kemudian menggambar partikel di atasnya. Lalu saya menghapus lapisan alfa partikel dari tekstur ini, secara efektif menghilangkan semua hitam pekat di sekitarnya dan memudar sebagian partikel yang terlihat, sambil meninggalkan hitam yang mendasarinya seperti yang Anda harapkan saat membuat partikel campuran aditif pada latar belakang hitam. Singkatnya, proses yang melelahkan, tetapi saya akhirnya sampai di sana:
Inilah utas tempat saya memposting proses saya: http://www.cocos2d-iphone.org/forum/topic/28707?replies=8#post-141528
Lihatlah alfa yang telah di-preultiplied.
http://blogs.msdn.com/b/shawnhar/archive/2009/11/07/premultiplied-alpha-and-image-composition.aspx
sumber
Seperti yang ditunjukkan David Gouveia, tidak ada pengganti yang memuaskan untuk campuran aditif pada latar belakang yang cerah. Efek terbaik yang saya temukan (yang tidak memerlukan sesuatu seperti rendering ke backbuffer) adalah menggunakan metode GL GLM berikut:
Ini tidak sebagus campuran aditif, tetapi jauh lebih baik daripada
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
. Jika Anda sedikit mengubah nilai alfa awal dan akhir, Anda mungkin mendapatkan hasil yang benar-benar dekat dengan campuran aditif.Pada gambar di atas ada
GL_SRC_ALPHA, GL_ONE
di sebelah kiri, di tengah adaGL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
dan di sebelah kanan Anda dapat melihat mode campuran saya akan mengusulkan untuk pengaturan ini.sumber
Sudahkah Anda mencoba menggunakan keduanya? Lapisi beberapa partikel dengan alpha blending, yang akan membuat warna Anda seperti yang Anda inginkan, lalu kembali dengan beberapa campuran aditif untuk mendapatkan highlight yang bagus yang Anda cari.
sumber
Pertama-tama, gambar partikel yang Anda gunakan tampaknya memiliki latar belakang hitam, menghasilkan pinggiran gelap pada gambar kedua. Jangan lakukan itu; yaitu, jangan menggambar bentuk partikel pada saluran warna. Sebagai gantinya, gambar harus berwarna solid dan hanya menentukan bentuk di saluran alfa.
Melakukan hal itu akan meningkatkan tampilan transparansi alfa secara signifikan. Kemudian Anda dapat lebih meningkatkan tampilan efek keseluruhan dengan membuat partikel berubah warna sepanjang hidup mereka. Seperti, gambar dasar sangat cerah, memberi Anda area kuning tengah yang terang itu. Kemudian rona partikel oranye kemerahan dan menambah rona seiring waktu. Dengan begitu partikel-partikel akan menjadi gelap ketika mereka bergerak keluar dari pusat.
sumber