Saya ingin membuat efek "sorotan" 2D yang memungkinkan sorotan pada banyak entitas. Yaitu, seolah-olah beberapa sprite memegang obor. Untuk entitas tunggal (satu sorotan), saya menggunakan teknik di mana saya overlay gradien sprite dan memiliki titik tengah mengejar entitas itu. Teknik ini berfungsi dengan baik untuk satu sorotan. Berikut screenshot untuk menggambarkan apa yang saya bicarakan:
Spotlight Tunggal - Bekerja
Masalah yang saya temui adalah bahwa teknik ini tidak mencakup banyak entitas. Jika saya overlay gambar sorotan lain saya mengalami beberapa masalah. Berikut screenshot yang disimulasikan:
Beberapa Spotlight = Masalah
Masalah yang paling jelas adalah sudut-sudut yang terlihat. Ini bisa diselesaikan dengan membuat gambar sorotan menjadi besar untuk menutupi seluruh level, tetapi itu terasa tidak benar. Masalah kedua dan yang lebih sulit adalah bahwa saya secara efektif mengalikan kegelapan dengan teknik ini. Jadi setiap sprite yang ditambahkan memiliki efek menggelapkan yang lainnya. Jelas saya salah mendekati masalah ini.
Ada ide?
Upaya Berkelanjutan
Ada beberapa diskusi tentang opsi campuran di komentar. Inilah pemikiran saya saat ini. Dalam contoh sorotan tunggal saya di atas, saya menggunakan file gambar yang terlihat seperti ini: (Saya telah mengganti transparansi dengan warna hijau untuk membuatnya lebih mudah untuk diilustrasikan)
Seperti dibahas di atas, masalahnya adalah alfa yang memadukan gambar ini dengan gambar lain tidak akan menghasilkan efek yang diinginkan. Alih-alih itu akan menghasilkan ini:
Itu tidak menurut saya sebagai masalah opsi campuran. Masalahnya, menurut saya, adalah bahwa gambar semacam itu memiliki topeng transparansi dan gambar (kotak hitam), ketika mereka harus dipisahkan.
Jadi, alih-alih gambar hitam dengan transparansi cut-out built-in, saya harus menggunakan topeng transparansi yang digunakan pada waktu berjalan melawan kotak hitam. Ketika melakukan itu, saya masih tidak bisa menggunakan topeng transparansi putih dan hitam tradisional atau itu akan mengalami masalah yang sama. Ini sebuah contoh, kali ini putih dan hitam mewakili putih dan hitam:
Solusinya, tampaknya, akan menerapkan topeng transparansi yang dengan sendirinya menggunakan transparansi. Sesuatu seperti ini: (hijau = transparan)
Dengan begitu, beberapa topeng transparansi bisa dicampur alfa bersama dan LALU digunakan sebagai topeng transparansi terhadap kotak hitam. Berikut adalah contoh dari dua masker transparansi yang dicampur bersama:
Bagaimanapun, itulah pendekatan yang saya coba terapkan. Saya akan memposting hasil jika ini berhasil. Apa yang saya tidak tahu (saat ini) adalah jika saya bisa menggunakan topeng transparansi yang itu sendiri memiliki transparansi.
Jawaban:
Secara konseptual, solusi untuk beberapa lampu sorot terdiri dari:
Kuncinya adalah memahami bahwa alpha-blending dapat melakukan satu atau lebih langkah-langkah ini. Alpha-blending hanya mengacu pada penggunaan peta alfa / gambar untuk memodifikasi piksel suatu gambar atau tekstur dengan cara yang sederhana. Ini juga biasanya berarti bahwa itu akan menjadi seperangkat fungsi cepat, atau diimplementasikan dengan perintah perangkat keras khusus, untuk membuatnya cepat. Anda dapat melakukannya dengan array reguler, dan perintah bahasa normal, tetapi menggunakan fungsi perpustakaan alpha / blending khusus mungkin lebih baik. ... Dan tidak akan memiliki bug. Terkadang ini berarti membuat piksel sebagian transparan, tetapi untuk kasus Anda, ini berarti:
Saya akan mulai mencari dokumentasi untuk fungsi alpha-blending Anda untuk melihat fungsionalitas apa yang mereka sediakan untuk menggabungkan berbagai jenis piksel. Saya menduga mereka akan memiliki fungsi untuk setiap langkah yang perlu Anda lakukan, tetapi mereka mungkin menggunakan nama yang tidak jelas.
sumber