Chcę stworzyć efekt „reflektora” 2D, który pozwoli na wyróżnienie wielu podmiotów. To znaczy, jakby kilka duszków trzymało pochodnie. W przypadku pojedynczego bytu (jedno światło punktowe) używam techniki, w której nakładam duszek gradientu i mam punkt środkowy, który go ściga. Ta technika działa dobrze dla pojedynczego reflektora. Oto zrzut ekranu ilustrujący to, o czym mówię:
Pojedynczy reflektor - działa
Problem, na który wpadam, polega na tym, że ta technika nie obejmuje wielu bytów. Jeśli nałożę inny obraz reflektora, napotkam kilka problemów. Oto symulowany zrzut ekranu:
Wiele reflektorów = problemy
Najbardziej oczywistym problemem są widoczne rogi. Można to rozwiązać, czyniąc obraz reflektora gigantycznym, obejmującym cały poziom, ale to nie wydaje się właściwe. Drugim i trudniejszym problemem jest to, że skutecznie pomnażam ciemność za pomocą tej techniki. Więc każdy dodany duszek powoduje zaciemnienie wszystkich pozostałych. Najwyraźniej podchodzę do tego problemu niepoprawnie.
Jakieś pomysły?
Kontynuacja wysiłków
W komentarzach pojawiła się dyskusja na temat opcji mieszania. Oto moje obecne myślenie. W powyższym przykładzie z jednym wyróżnieniem używam pliku obrazu, który wygląda mniej więcej tak: (Przezroczystość zastąpiłem kolorem zielonym, aby ułatwić zilustrowanie)
Jak omówiono powyżej, problem polega na tym, że alfa zmieszanie tego obrazu z innym obrazem nie da pożądanego efektu. Zamiast tego spowoduje to:
Nie wydaje mi się to problemem mieszania opcji. Wydaje mi się, że problem polega na tym, że ten rodzaj obrazu ma wbudowaną maskę przezroczystości i obraz (czarny kwadrat), kiedy należy je rozdzielić.
Więc zamiast czarnego obrazu z wbudowaną wycinaną przezroczystością, powinienem używać masek przezroczystości, które są używane w czasie wykonywania względem czarnego kwadratu. Robiąc to, nadal nie mogę użyć tradycyjnej biało-czarnej maski przezroczystości lub napotka na ten sam problem. Oto przykład, tym razem biel i czerń reprezentują biel i czerń:
Wydaje się, że rozwiązaniem byłoby zastosowanie maski przezroczystości, która sama wykorzystuje przezroczystość. Coś w tym stylu: (zielony = przezroczysty)
W ten sposób wiele masek przezroczystości można ze sobą mieszać, a NASTĘPNIE używać ich jako maski przezroczystości na czarnym kwadracie. Oto przykład dwóch połączonych razem masek przezroczystości alfa:
W każdym razie takie podejście wdrażam. Opublikuję wyniki, jeśli to zadziała. Nie wiem (obecnie), czy mogę użyć maski przezroczystości, która sama ma przezroczystość.
Odpowiedzi:
Pod względem koncepcyjnym rozwiązanie wielu reflektorów składa się z:
Sztuką jest zrozumienie, że mieszanie alfa może wykonać jeden lub więcej z tych kroków. Mieszanie alfa odnosi się tylko do użycia mapy alfa / obrazu do zmodyfikowania pikseli obrazu lub tekstury w prosty sposób. Zazwyczaj oznacza to również, że będzie to szybki zestaw funkcji lub zaimplementowany za pomocą specjalnych poleceń sprzętowych, aby był szybki. Można to zrobić za pomocą zwykłych tablic i poleceń w języku normalnym, ale użycie specjalnych funkcji biblioteki alfa / biblioteki mieszania jest prawdopodobnie lepsze. ... I nie będzie mieć błędów. Czasami oznacza to, że piksele są częściowo przezroczyste, ale w twoim przypadku będzie to oznaczać:
Zacznę przeglądać dokumentację funkcji mieszania alfa, aby zobaczyć, jakie funkcje zapewniają łączenie różnych rodzajów pikseli. Podejrzewam, że będą miały funkcje dla każdego z kroków, które musisz wykonać, ale mogą być pod nazwami, które nie są oczywiste.
źródło