Если вы собираетесь разрешить каждому спрайту использовать свой собственный шейдер, возможно, некоторые из них будут использовать один и тот же шейдер. Убедитесь, что эти спрайты входят в одну и ту же партию, чтобы получить максимально возможную производительность.
(Это может быть довольно уродливый или довольно сложный код для сортировки ваших объектов по шейдерам и определения момента смены пакетов. Вам просто придется с этим смириться.)
Идея SpriteBatch
заключается в том, что он буквально объединяет спрайты перед отправкой их в графический процессор. Для изменения текстуры внутри начального / конечного блока или начала нового начального / конечного блока потребуется новый пакет.
Вы получаете несколько сотен пакетов за кадр.
Подробнее об этом см. этот ответ и, возможно, этот ответ на сайте разработки игры.