Jeżeli chodzi o mikro-optymalizacje, to przełączanie stanu karty graficznej np. `gpu_set_blendmode` wyrzuciłbym poza loopa, ale to pewnie niewiele zmieni i tak. Tego typu fog of war można też zrobić na tablicach, większe komórki i aktualizowałbyś je jedynie gdy jednostka przekroczy jej granicę. A rysować mógłbyś też tylko wycinek takiej tablicy na surface bez znaczenia ile jednostek jest na ekranie. Minus taki, że byłoby to bardziej "rozpikselowane", ale możesz spróbować wygłądzić krawędziie jakimś shaderem.