Комментарии 9
Но если все бары пихать в специальный канвас — то они за один дк отрисуются (одинаковые, конечно), но ничто не помешает делать произвольные префабы для баров (подложка там, изменение цвета при разных значениях и т. п.), чего трудно добится в шейдере. Есть сравнение шейдера с 50-100 барами и одного канваса со столькими же одинаковыми барами?
Рисовать бары в канвасе такая себе идея — никому не понравится канвас, который перегенеривает свой меш в каждом апдейте.
Шейдер тоже перестраивает меши каждый апдейт, как и канвас (потому что они двигаются). Вопрос ещё, меши из сцены имеют одинаковый размер на перспективной камеры на разном от неё (камеры) удалении? Ну и поворот трансформа тоже есть в скрипте, то есть функционал раскидан по двум частям — половина в шейдере, половина в скриптах (кстати, это получается по инстансу скрипта на каждый бар?).
Ну и в случае канваса легко слегка дописать контроллер для добавления стака баров друг над другом на одном объекте (что уже вызывает сложность в случае шейдера).
Если я еще хочу проценты выводить цифрой над полоской или на полоске, чем его лучше делать, чтобы работал инстансинг?
Фрагментный шейдер не мог быть проще, потому что вся работа уже выполнена:
Вот еще вариант, сделать локальный массив из двух элементов с двумя цветами и посчитать индекс.
return colors[int(clamp(floor(i.uv.x*2.0f),0,1))];
Это чуть быстрее чем читать из тестуры с вычислением интерполяции и тп.
спасибо, за статью.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Unity: отрисовываем множество полосок здоровья за один drawcall