Материалы
11 лет назад
Оптимизация: Окклудеры. Отрисовка
В этом туториале мы поговорим о еще нескольких способах оптимизации: настройки дальности отрисовки объектов, func_lod и func_occluder
Посмотрим на этот скрин ниже. Обратите внимание на модель лампочки и полоску на стене.
Теперь отойдём подальше. Модель лампочки и та полоска на стене исчезли:
Та полоска является энтити-брашем, но не func_detail, а func_lod. И func_detail, и func_lod не будут разбивать карту на листья, но func_lod функциональнее, чем func_detail. У него можно настроить максимальную дальность отрисовки, и, когда игрок отойдёт далеко, func_lod исчезнет, перестанет отрисовываться, а значит, FPS будет выше. Но в оптимизации нужны обе энтити, func_detail больше подходит для закрытых помещений, где отрисовываться должно всё и всегда, а func_lod - для открытых, где слишком далекие объекты можно убрать, так как игрок на них всё равно не обращает внимания. Параметр дальности отрисовки - Disappear Distance, туда нужно вписать расстояние, на котором объект перестанет отрисовываться. Более подробную информацию об
энтити func_lod можно узнать в справочнике.
А с лампочкой аналогично. У всех prop-объектов можно также настроить дальность отрисовки. За это отвечают параметры Fade Start Dist и Fade End Dist - начало и конец "исчезновения" модели. Подробнее - в
справочнике. Но не переусердствуйте: установление дальности отрисовки необходимо лишь в больших помещениях или открытых пространствах, в узких коридорах слишком маленькая дистанция отрисовки приведёт к тому, что ваша карта будет практически пустая.
Теперь поговорим об окклудерах (
func_occluder). Это энтити-браши, покрытые текстурой TOOLS/TOOLSOCCLUDER. Все объекты, закрытые от игрока этим брашем, отрисовываться не будут. Их обычно помещают внутрь стен, через которые игрок ничего не увидит, хотя за ними всё отрисовывается. Например, та же комнатка на скринах выше.
В середине комнаты стоит широкая колонна (если этот браш можно назвать колонной), сзади неё находится несколько моделей. Если эту колонну оставить брашем и не превращать ни в какой энтити-объект, то модели сзади неё отрисовываться не будут. А если мне нужно сделать что-то вот такое:
То есть, чтобы эта колонна задвигалась в пол и превращалась в некое подобие сцены. Двигаться у нас умеют только энтити, поэтому колонну придётся превратить в func_door, func_plat или func_movelinear. Но тогда, даже когда колонна в нормальном положении, всё за ней будет отрисовываться (ничего не поделаешь, через энтити-браши всё отрисовывается, такая у них особенность):
Вот здесь-то на помощь и приходит окклудер. Нужно разместить его внутри этой колонны и активировать его каждый раз, когда колонна возвращается в исходное положение (когда она задвигается в пол, окклудер нужно отключить! Как это делается - можно посмотреть в приложенном префабе). Вот так вот:
СКАЧАТЬ ПРЕФАБ
Комментарии пользователей сайта:
Если Вам понравилась эта страница, Вы можете разместить где-нибудь ссылку на неё: