Прорисовка участков карты
В этом уроке мы поговорим с вами о такой замечательной штуке, как прорисовка участков карты. Прорисовка очень хорошо помогает в оптимизации карты. Приступим.

Инструкция
Посмотрим на картинки, обратите внимание на модель лампочки и полоску на стене.



Теперь отойдём подальше, и посмотрим — модель лампочки и та полоска на стене исчезли:



Та полоска является entity-брашем, но не func_detail, а func_lod. И func_detail, и func_lod не будут разбивать карту на листья, но func_lod функциональнее, чем func_detail. У него можно настроить максимальную дальность прорисовки, и, когда игрок отойдёт далеко, func_lod исчезнет, перестанет прорисовываться, а значит, FPS будет выше. Но в оптимизации нужны обе entity, func_detail больше подходит для закрытых помещений, где прорисовываться должно всё и всегда, а func_lod — для открытых, где слишком далекие объекты можно убрать, так как игрок на них всё равно не обращает внимания. Параметр дальности прорисовки — Disappear Distance, туда нужно вписать расстояние, на котором объект перестанет прорисовываться.

С лампочкой аналогично. У всех prop-объектов можно также настроить дальность прорисовки. За это отвечают параметры: Fade Start Dist и Fade End Dist — начало и конец исчезновения модели.

Но не переусердствуйте! Установление дальности прорисовки необходимо лишь в больших помещениях или открытых пространствах, в узких коридорах слишком маленькая дистанция прорисовки приведёт к тому, что ваша карта будет практически пустая.

Теперь поговорим об окклудерах (func_occluder). Это entity-браши, покрытые текстурой TOOLS/TOOLSOCCLUDER. Все объекты, закрытые от игрока этим брашем, прорисовываться не будут. Их обычно помещают внутрь стен, через которые игрок ничего не увидит, хотя за ними всё прорисовывается. Например, та же комнатка на картинках выше.

В середине комнаты стоит широкая колонна (если этот браш можно назвать колонной), сзади неё находится несколько моделей. Если эту колонну оставить брашем и не превращать ни в какой entity-объект, то модели сзади неё прорисовываться не будут. А если мне нужно сделать что-то вот такое:



То есть, чтобы эта колонна задвигалась в пол и превращалась в некое подобие сцены. Двигаться у нас умеют только entity, поэтому колонну придётся превратить в func_door, func_plat или func_movelinear. Но тогда, даже когда колонна в нормальном положении, всё за ней будет прорисовываться (ничего не поделаешь, через entity-браши всё прорисовывается, такая у них особенность):



Вот здесь на помощь и приходит окклудер. Нужно разместить его внутри этой колонны и активировать его каждый раз, когда колонна возвращается в исходное положение (когда она задвигается в пол, окклудер нужно отключить! Как это делается — можно посмотреть в приложенном заготовке). Вот так вот:

Вернуться в каталог уроков