Материалы
11 лет назад
Оптимизация карты. Туман и func_detail
В этой статье мы узнаем, какими способами можно оптимизировать карту и подробнее узнаем об оптимизации с помощью тумана и func_detail
Сегодня я расскажу про оптимизацию карты. Вообще, оптимизировать можно следующим образом:
1. Не делать огромных открытых пространств
2. Не добавлять слишком много деталей и моделей (если вы хотите сделать высокодетализированную карту, то вам придётся выбирать между реалистичностью и быстродействием, но, учитывая, что компьютеры становятся всё мощнее и мощнее, возможно, скоро отпадёт необходимость оптимизации)
3. Когда делаете длинные тоннели, коридоры, не делать их прямыми, изгибать их, чтобы в начале коридора нельзя было увидеть конец
4. Стороны брашей, которые не будут видны игроку, красить текстурой TOOLS/TOOLSNODRAW
5. Туман и отсечение пространства
6. Энтити func_detail
7. Ареапорталы
8. Хинты
С первыми четырьмя всё ясно, а про остальные я сейчас расскажу подробнее.
Туман как средство оптимизации
Допустим, у вас всё же огромная карта и на ней много открытых пространств. Здесь можно использовать туман. Та часть карты, которая затуманена, не будет отрисовываться движком. Для этого в любом месте карты создаём энтитю env_fog_controller и прописываем ей следующие параметры:
- Fog Enable. Установите Да, чтобы туман отображался
- Fog Blend. Будет ли туман двухцветным (из одного цвета туман кажется однообразным)
- Primary Fog Color. Первый цвет тумана
- Secondary Fog Color. Второй цвет тумана
- Fog Start. Расстояние от игрока, на котором туман начинает отрисовываться (в юнитах)
- Fog End. Расстояние от игрока, на котором наш туман станет наиболее густой
- Far Z Clip Plane. Расстояние от игрока, на котором игровое пространство перестанет отображаться движком. Лучше ставить значение, равное Fog End
В результате, какой бы огромной ни была карта, для игрока она будет отображаться не дальше, чем значение Far Z Clip Plane в юнитах. Но ещё следует учитывать, что цвет тумана должен быть похож на цвет скайбокса. Подробнее об этом мы поговорим в туториале "Создание тумана"
Во время компиляции карты пространство разбивается на области - листья (leafvis). Разбиение происходит от геометрии карты (т.е. обычных брашей, не энтити-брашей). В игре для игрока отображается не только та область, в которой он находится, но и те области, части которых он видит, какими большими бы они не были. Например:
Когда игрок (зелёный квадрат) находится в области №1 и смотрит на красную точку, то для него будут отрисовываться области №1, №2 и №3. Как это можно оптимизировать
func_detail
Как я уже написал выше, разбиение на листья происходит от геометрии карты. Но когда слишком много листьев, процессор тратит много ресурсов на расчёты при отрисовке. Решить эту проблему можно, превратив некоторые браши в энтити. Лучше всего в целях оптимизации подходит func_detail. Например, в комнате есть маленький ящик-браш. Если его оставить брашем, то в комнате будет создано несколько лишних листьев, которые бессмысленно просчитывать, так как игрок 100% будет их видеть. Но, тем не менее, они просчитываются.
Теперь превратим наш ящик в func_detail. В итоге при компиляции в комнате будет создан только один лист. Конечно, разница в производительности будет небольшая, но ведь у нас только один ящик. А если вы делаете высокодетализированную винтовую лестницу, которая состоит из сотни брашей? Превращение этой лестницы в func_detail не только улучшит производительность при отрисовке, но и сократит время компиляции.
Комментарии пользователей сайта:
выбираешь нужный func_detail, затем нажимаешь "toWorld" рядом с "toEntity"
Может и тупой вопрос, но как func_detail вернуть в браши ?
Если Вам понравилась эта страница, Вы можете разместить где-нибудь ссылку на неё: