Материалы с автоматическим тайлингом в UDK

2 фото
Забор с авто-тайлингом текстуры в UDK
image
Работая над сценой игры в редакторе UnrealEd очень часто сталкиваешься с ситуацией, когда нужно растянуть объект на произвольную ширину, но при этом сохранить исходный размер текстуры. Иными словами, текстура при растягивании объекта должна автоматически размножаться (тайлиться) на дополнительную поверхность объекта, полученную в результате растягивания.

Показать все 2 фото →

Оптимизация текстур под UDK

Мощный редактор материалов в UDK (Unreal Development Kit) позволяет использовать оптимизированные текстуры для экономии памяти. В чем заключается оптимизация текстур? Возьмем, например, карту спекуляра (Specular Map). Она показывает, какие части текстуры должны отражать свет и в каком количестве (подробнее про Specular Map). Для создания карты Specular Map нам достаточно всего одного канала в RGB-изображении. Если использовать под эту карту отдельную текстуру, то остальные каналы не будут использоваться вовсе. Это непростительное расточительство! Мы поступим хитрее, и запакуем карту Spacular Map в неиспользуемый канал другой текстуры, например Diffuse Map.

Аналогичным образом мы можем поступить и с картой прозрачности для прозрачных текстур, используемых в частности для создания решетчатых заборчиков. В данном примере я покажу, как запаковать карту прозрачности Opacity Mask в альфа-канал текстуры карты нормалей (Normal Map) того же заборчика. А так как я стараюсь использовать бесплатные программы, то сделаем мы это в Gimp.

Оптимизация текстур для UDK


( Итак, приступим... )

Оптимизация в Unity

Разрабатывая игру на Unity стоит всегда помнить о том, что у нас есть возможность публиковать наше творение на множестве платформ, включая мобильные. А для последних все еще актуален вопрос производительности.

В Unity для контроля производительности служит панель Stats, которую можно вывести при проигрывании игры. В ней, помимо общего числа треугольников, следует обратить внимание на значение Draw Calls. Чем меньше это значение, тем лучше. Оно отображает, сколько раз центральный процессор (CPU) отправил данные в графический процессор (GPU). Именно постоянная пересылка данных между CPU и GPU является тонким местом в любом графическом приложении.

Вот несколько советов по снижению Draw Calls:
  • Использовать как можно меньше текстур и материалов. Желательно, чтобы как можно больше объектов использовало один и тот же материал.
  • Объединять статические объекты, использующие один и тот же материал, в один общий Mesh. Для этого все объекты необходимо запихнуть в один родительский объект-контейнер и применить к нему скрипт из стандартного набора компонентов Unity, который находится в меню Component -> Mesh -> Combine Children.

Кстати сказать, объединение объектов в один общий Mesh позволило мне решить еще одну проблему, которую я отложил на потом. Дело в том, что моя карта уровня собирается из стандартных блоков, и при их отдельной отрисовке не только формировались лишние Draw Calls, но и просматривались швы между блоками при прохождение над ними персонажа, отбрасывающего тень.