Привет. Пишу пост-шейдеры для 2d и появилось много вопросов. Самый первый и основной (увы может быть выбрал не правильный раздел форума): как правильно (быстрее/проще) подготавливать специальные карты (Normal Map и прочие) для шейдера? У меня уже есть своя реализация (все работает), но мне кажется, что можно как-то проще и удачнее все сделать. Буду рад советам, критике и даже если просто скажете, что именно гуглить.
Сейчас постараюсь подробно расписать, как у меня все работает.
1) Формирование начального изображения:
1.1 Есть игровые объекты со SpriteRender у которого шейдер "spirtes/default". Они рендерятся камерой с учетом слоев, положения и прочего.
1.2 И в методе OnRenderImage(RenderTexture source, RenderTexture destination) в переменной "source" я получаю готовое изображение на которое я хочу наложить эффекты.
2) Формирование доп. карт:
Здесь у меня было два решения. Опишу который использую сейчас.
2.1 В цикле перебираю объекты со SpriteRender, которые сейчас на экране. Далее заменяю им Sprite на заранее нарисованную карту. (Смущает это место, приходиться держать массив с объектами и на каждом кадре их перебирать)
2.2 И далее рисую Graphics.DrawTexture в заготовленный RenderTexture. (Сама подготовка метода занимает время RenderTexture.active, GL.PushMatrix, GL.LoadPixelMatrix, и чем больше рисуем спрайтов, тем дольше соответственно).
2.3 Когда цикл заканчивает работу, на выходе я получаю готовую спец. карту которую можно передать в шейдер пост. обработки.
Еще был второй вариант. В нем я также как и шаге 2.1 меняю спрайты, но вместо 2.2 я рендерю через вторую камеру, которая рисует в RenderTexture.
Мне кажется, что наверняка есть более простой и удачный вариант. Очень надеюсь, что вы сможете мне подсказать.