Оптимизация карты

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

 

  • разбиение карты на сектора
  • обрезание ненужных полигонов террэйна
  • сведение использования PostProcessingEffect’ов к минимуму
  • использование дальности прорисовки crumbs
  • level precache (только SE4)

 
1) Разбить большую карту на сектора — очень важно. Это даст огромный плюс к производительности. Что означает разбиение на сектора? Всё просто. В свойствах моделей есть строка Custom Visibility Sectors. В этой строке прописываются сектора, в которых данная модель рендерится — т.е. её можно увидеть. Делать большое количество секторов довольно муторно, но, разбирая уровень Cloud_1_01.wld, я увидел другой способ, которым карта разбита на сектора.

Дело в том, что все эти сектора на самом деле являются лишь одной моделью. Вот она.

 
Каждый сектор — отдельная Polygon Map. Больше информации можно найти здесь: Статья о Visibility Mesh на википедии.

Если ваша карта маленькая, или просто нет желания разбираться, как делать сектора одной моделью, можно следовать этой статье: Создание простого сектора.

2) Террэйны, особенно детализированные (точнее — с большим количеством полигонов), всегда создают какую-никакую нагрузку на компьютер. Поэтому те полигоны террэйна, которые игрок не сможет увидеть НИКОГДА, следует удалить.

 

 
3) Post Processing Effect является одним из основных источников графона и тормозов. Конечно, отказываться от них не стоит. Но вполне возможно свести их использование к минимуму. Даже если их много, неиспользуемые следует отключить с помощью Event Animator’a. (подробнее: статья по Event Animator и Post Processing Effect)

Также добавлю про Streaks Source. Это источники лучей — тоже добавляют графонистости на карту, но настолько же нагружают машину. Обычно одной этой энтити хватает на всю карту.

4) Использование crumbs (обычно, травы), конечно, необходимо. Но необходимо ограничить их прогрузку. Делается это следующим путём: вместо одной энтити crumbs мы будем использовать две. Разница у них в дальности прорисовки и работы освещения.
Так выглядит настройка первой crumbs, которую игрок будет видеть у себя под ногами:

 

 

 
А это вторая crumbs, которая начинает прорисовываться там, где отгружается первая:

 

(подробнее: статья о crumbs)

5) Не видел подобного в SE3.5 (однако вполне мог пропустить, поправьте если что), но в SE4 используется предварительное кэширование уровней. В скрипте оно записано так: когда игрок начинает спускаться к переходу на группу уровней, то все они начинают грузиться. Поэтому при переходе на другой уровень в Талосе нет долгой загрузки — все переходы мгновенны. Я всё еще не знаю, как настроить предварительное кэширование в собственных уровнях. Позже я займусь и этим, а пока просто сообщу о наличии этого пункта.
______________________________________________________________________________

Итак, выходит, что самое главное в оптимизации — разбиение уровня на сектора. Сектора — главные убийцы тормозов. Хотя, как выразился Solais:

 


Да, каждый сектор сделан вручную, их никак нельзя генерировать. Да, их создание это боль в ***.

 
Вполне мог что-то забыть, с памятью у меня небольшие проблемы. Напомните, если что)

Всем удачного дня!

Добавить комментарий