Pull to refresh

Comments 9

Но если все бары пихать в специальный канвас — то они за один дк отрисуются (одинаковые, конечно), но ничто не помешает делать произвольные префабы для баров (подложка там, изменение цвета при разных значениях и т. п.), чего трудно добится в шейдере. Есть сравнение шейдера с 50-100 барами и одного канваса со столькими же одинаковыми барами?

Рисовать бары в канвасе такая себе идея — никому не понравится канвас, который перегенеривает свой меш в каждом апдейте.
Шейдер тоже перестраивает меши каждый апдейт, как и канвас (потому что они двигаются). Вопрос ещё, меши из сцены имеют одинаковый размер на перспективной камеры на разном от неё (камеры) удалении? Ну и поворот трансформа тоже есть в скрипте, то есть функционал раскидан по двум частям — половина в шейдере, половина в скриптах (кстати, это получается по инстансу скрипта на каждый бар?).
ВО-первых, вращение на камеру тоже можно через шейдер сделать, во вторых — генерация нового канвас-меша (и кучи GC впридачу) — не одно и то же, что инстансирование баров на видеокарте. Почитайте внимательнее как работает инстансинг — и не путайте с динамик батчингом.

Ну и в случае канваса легко слегка дописать контроллер для добавления стака баров друг над другом на одном объекте (что уже вызывает сложность в случае шейдера).

Если я еще хочу проценты выводить цифрой над полоской или на полоске, чем его лучше делать, чтобы работал инстансинг?

Представить числа небольшой текстурой и формировать процент из шейдера на одном кваде. Да это сложнее чем просто канвасы наляпать и по началу их вполне хватит, но все таки лучше не забывать про оптимизацию.
Фрагментный шейдер не мог быть проще, потому что вся работа уже выполнена:

Вот еще вариант, сделать локальный массив из двух элементов с двумя цветами и посчитать индекс.
return colors[int(clamp(floor(i.uv.x*2.0f),0,1))];
Это чуть быстрее чем читать из тестуры с вычислением интерполяции и тп.
Sign up to leave a comment.

Articles