Je cherche à créer un effet "spotlight" 2D qui permet de mettre en lumière plusieurs entités. C'est-à-dire, comme si plusieurs sprites tenaient des torches. Pour une seule entité (un projecteur), j'utilise une technique où je superpose un sprite dégradé et que le point central chasse cette entité. Cette technique fonctionne bien pour un seul projecteur. Voici une capture d'écran pour illustrer ce dont je parle:
Projecteur unique - Travaux
Le problème que je rencontre est que cette technique ne s'étend pas à plusieurs entités. Si je superpose une autre image de projecteur, je rencontre plusieurs problèmes. Voici une capture d'écran simulée:
Projecteurs multiples = problèmes
Le problème le plus évident est les coins visibles. Cela pourrait être résolu en rendant l'image du projecteur gigantesque pour couvrir tout le niveau, mais cela ne semble pas correct. Le deuxième problème, plus insoluble, est que je multiplie efficacement l'obscurité avec cette technique. Ainsi, chaque sprite ajouté a pour effet d'assombrir tout le monde. De toute évidence, j'aborde ce problème de manière incorrecte.
Des idées?
Efforts continus
Il y a eu une discussion sur les options de mélange dans les commentaires. Voici ma pensée actuelle. Dans mon exemple de projecteur unique ci-dessus, j'utilise un fichier image qui ressemble à ceci: (j'ai remplacé la transparence par la couleur verte pour faciliter l'illustration)
Comme discuté ci-dessus, le problème est que le mélange alpha de cette image avec une autre image ne produira pas l'effet souhaité. Au lieu de cela, il produira ceci:
Cela ne me semble pas être un problème d'options de mélange. Le problème, il me semble, est que ce type d'image a le masque de transparence et l'image (un carré noir) intégrés, alors qu'ils devraient être séparés.
Donc, au lieu d'une image noire avec une transparence découpée intégrée, je devrais utiliser des masques de transparence qui sont utilisés au moment de l'exécution contre le carré noir. En faisant cela, je ne peux toujours pas utiliser un masque de transparence blanc et noir traditionnel ou il rencontrera le même problème. Voici un exemple, cette fois le blanc et le noir représentent le blanc et le noir:
La solution, semble-t-il, serait d'appliquer un masque de transparence qui utilise lui-même la transparence. Quelque chose comme ça: (vert = transparent)
De cette façon, plusieurs masques de transparence pourraient être mélangés alpha et ensuite utilisés comme un masque de transparence contre le carré noir. Voici un exemple de deux des masques de transparence alpha mélangés ensemble:
Quoi qu'il en soit, c'est l'approche que je travaille à mettre en œuvre. Je publierai les résultats si cela fonctionne. Ce que je ne sais pas (actuellement), c'est si je peux utiliser un masque de transparence qui a lui-même de la transparence.
Réponses:
Conceptuellement, la solution à plusieurs projecteurs consiste à:
L'astuce consiste à comprendre que le mélange alpha peut effectuer une ou plusieurs de ces étapes. Le mélange alpha se réfère simplement à l'utilisation d'une carte / image alpha pour modifier les pixels d'une image ou d'une texture de manière simple. Cela signifie également généralement que ce sera un ensemble rapide de fonctions, ou implémenté avec des commandes matérielles spéciales, pour le rendre rapide. Vous pouvez le faire avec des tableaux réguliers et des commandes de langage normal, mais l'utilisation des fonctions spéciales de la bibliothèque alpha / blending est probablement meilleure. ... Et n'aura pas de bugs. Parfois, cela signifie rendre les pixels partiellement transparents, mais pour votre cas, cela signifie:
Je commencerais à rechercher la documentation de vos fonctions de mélange alpha pour voir quelles fonctionnalités elles fournissent pour combiner différents types de pixels. Je soupçonne qu'ils auront des fonctions pour chacune des étapes que vous devrez effectuer, mais ils peuvent être sous des noms qui ne sont pas évidents.
la source