Оптимизация карты. Туман и func_detail
В этом руководстве вы узнаете, какими способами можно оптимизировать карту и подробнее узнаем об оптимизации с помощью тумана и func_detail.

Введение
Расскажу про оптимизацию карты. Вообще, оптимизировать можно следующим образом:

1. Не делать огромных открытых пространств.

2. Не добавлять слишком много деталей и моделей (если вы хотите сделать высокодетализированную карту, то вам придётся выбирать между реалистичностью и быстродействием, но, учитывая, что компьютеры становятся всё мощнее и мощнее, возможно, скоро отпадёт необходимость оптимизации).

3. Когда делаете длинные тоннели, коридоры, не делать их прямыми, изгибать их, чтобы в начале коридора нельзя было увидеть конец.

4. Стороны брашей, которые не будут видны игроку, красить текстурой TOOLS/TOOLSNODRAW

5. Туман и отсечение пространства.

6. Entity — func_detail.

7. Ареапорталы и Хинты.
Туман как средство оптимизации
Допустим, у вас всё же огромная карта и на ней много открытых пространств. Здесь можно использовать туман. Та часть карты, которая затуманена, не будет обрисовываться движком. Для этого в любом месте карты создаём env_fog_controller и прописываем ей следующие параметры:



  1. Fog Enable — Установите Да, чтобы туман отображался
  2. Fog Blend. Будет ли туман двухцветным (из одного цвета туман кажется однообразным)
  3. Primary Fog Color — Первый цвет тумана
  4. Secondary Fog Color — Второй цвет тумана
  5. Fog Start — Расстояние от игрока, на котором туман начинает отрисовываться (в юнитах)
  6. Fog End — Расстояние от игрока, на котором наш туман станет наиболее густой
  7. Far Z Clip Plane — Расстояние от игрока, на котором игровое пространство перестанет отображаться движком. Лучше ставить значение, равное Fog End
В результате, какой бы огромной ни была карта, для игрока она будет отображаться не дальше, чем значение Far Z Clip Plane в юнитах. Но ещё следует учитывать, что цвет тумана должен быть похож на цвет неба.

Во время компиляции карты пространство разбивается на области - листья (leafvis). Разбиение происходит от геометрии карты (т.е. обычных брашей, не энтити-брашей). В игре для игрока отображается не только та область, в которой он находится, но и те области, части которых он видит, какими большими бы они не были. Например:



Когда игрок (зелёный квадрат) находится в области №1 и смотрит на красную точку, то для него будут отрисовываться области №1, №2 и №3. Как это можно оптимизировать.
func_detail
Как я уже написал выше, разбиение на листья происходит от геометрии карты. Но когда слишком много листьев, процессор тратит много ресурсов на расчёты при отрисовке. Решить эту проблему можно, превратив некоторые браши в entity. Лучше всего в целях оптимизации подходит func_detail. Например, в комнате есть маленький ящик-браш. Если его оставить брашем, то в комнате будет создано несколько лишних листьев, которые бессмысленно просчитывать, так как игрок 100% будет их видеть. Но, тем не менее, они просчитываются.

Теперь превратим наш ящик в func_detail. В итоге при компиляции в комнате будет создан только один лист. Конечно, разница в производительности будет небольшая, но ведь у нас только один ящик. А если вы делаете высокодетализированную винтовую лестницу, которая состоит из сотни брашей? Превращение этой лестницы в func_detail не только улучшит производительность при отрисовке, но и сократит время компиляции.
Вернуться в каталог уроков