Оптимизируем дроу коллы

До и после манипуляций с шейдером

Решил заложить базу для оптимизации дроу-коллов. Не думаю, что на моей стадии пре-продакшена это необходимо, но я люблю покопаться в шейдерах.
Мы знаем (знаем же?), что каждый материал на модели это +1 draw call. Разумно было бы оптимизировать этот момент. Для этого есть несколько подходов:
1 - Использовать атласы.
Например, у нас есть бетонный забор, который состоит из бетона (неожиданно), деревянных колышков, которые держат забор в чашке, а так же, ржавых металлических петель, за которые эти заборы поднимают краном.0
Все что нужно, это уместить на текстуре, опираясь на тексель, все элементы атласа: бетон, дерево, металл. Обычно, именно этот подход используется в большинстве игр. Некоторые локации мобильных игр целиком состоят всего из одного атласа.

2 - Использовать Vertex Paint и тайловые текстуры. Удобно, когда нужно "затекстурить" крупные объекты, например скалы, дома, вагоны какие-нибудь.
У нас есть 3 цвета, чтобы сразу получить 3 разных материала. Но что еще интереснее, вы можете использовать десятую часть от каждого цвета, например R - 0.1, 0.2, 0.3 и т.д. Каждая десятая часть может быть отдельным материалом. Главное не переусердствовать, там тоже есть свои ограничения.

3 - Использовать RGB маску, распределяя материалы в зависимости от значения цвета на маске. Например, мы можем сравнить input цвет с цветом на маске с помощью скалярного произведения векторов (Dot product). Если цвет совпадает с цветом на текстуре с масками будем накладывать материал на эту часть маски.

Это только три основных, часто используемых в разработке подхода.

Для своей игры я остановился на комбинировании 1 и 2 методов. По возможности буду юзать атласы, а где не хватит текселя - тайловые текстуры.
В модели на видео я использовал один атлас обычный и второй - задамаженная версия первого. Красится дамаг по красному каналу Vertex Paint. Затем накладывается запеченая на UV3 dirt-edge маска.
Получился вполне универсальный шейдер.

Андрей Александров, ex. художник по окружению Atomic Heart, PUBG, Walking Dead.
Веду канал с интересными трюками и советами для 3д художников и инди-разработчиков: @Cod3Art.

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"