HINTS

Материал из CSM Wiki
Перейти к навигации Перейти к поиску

Оригинал

Описание

Хинты (HINTS) – это средство оптимизации карты. Хинты являются обычными плоскостями и помогают компилятору VBSP делить карту на листья (Leaves), тем самым существенно сокращая время компиляции карты, иногда до нескольких раз. В компьютерной графике листья (Leaves) по-другому называются Порталами (Portals).

Если на карте не устанавливать Хинты, то компилятор VBSP самостоятельно разделит карту на листья (Leaves). При этом может быть создано большое количество ненужных листьев (Leaves), что будет снижать общую производительность карты. При использовании Хинтов, автор карты явно указывает где и как должны быть созданы листья (Leaves), тем самым избавляя компилятор VBSP от "лишней" работы и создания ненужных листьев (Leaves). Это повышает общую производительность карты и сокращает время компиляции карты.

Обратите внимание, что Хинты являются основным средством оптимизации карты. Хинты можно и нужно применять практически на всех картах. Уделите этой теме больше внимания при изучении, для того чтобы лучше понимать как и когда нужно использовать Хинты.

Хинты создаются следующим образом:

  • Создаётся обыкновенный World-браш (любой формы).
  • Те стороны этого браша, которые будут являться Хинтами, нужно покрыть материалом tools/toolshint. Такие стороны называются HINT-поверхностями.
  • Те стороны этого браша, которые должны будут игнорироваться компилятором, нужно покрыть материалом tools/toolsskip. Такие стороны называются SKIP-поверхностями.

SKIP-поверхности просто удаляются компилятором во время компиляции карты, поэтому использование SKIP-поверхностей позволяет ещё больше сократить время компиляции карты. SKIP-поверхности используются только совместно с HINT-поверхностями. Если попробовать использовать SKIP-поверхности как-то иначе, то они не будут обработаны компилятором.

Особенности использования

  • Хинты используются только компилятором VBSP и только на этапе компиляции карты. Компилятор VBSP использует только World-геометрию, игнорируя все объекты на карте. Каждая поверхность World-геометрии, так же как и Хинты, делит пространство карты на листья (Leaves), поэтому Хинты должны устанавливаться на карте относительно World-геометрии, а не относительно объектов карты.
  • Хинты могут пересекаться друг с другом и World-геометрией в любых точках и под любым углом.
  • Хинты должны быть установлены там, где будут использоваться.
  • На карте может быть установлено множество Хинтов

Ошибки

Не обнаружены.

Как работают Порталы (Leaves)

Порталы (листья для BSP-дерева) используются во многих современных игровых движках и предназначены для отсечения невидимых частей карты. Портал – это обыкновенная трёхмерная область. Если игрок не может видеть какой-то портал, то движок не будет рисовать все те объекты, поверхности и прочие составляющие карты, которые находятся внутри "невидимого" портала. Таким образом существенно снижается нагрузка на видеокарту и повышается быстродействие карты.

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

Игровой движок заблаговременно разделяет всю карту на порталы. На этом этапе в движке Source применяются Хинты. Порталы не могут пересекаться друг с другом, поэтому игрок в один момент времени может находиться только внутри какого-то одного портала. В движке Source, если две HINT-поверхности пересекутся друг с другом, то будет создано минимум 4 разных портала. После создания всех порталов, движком начинается процесс проверки "видимости" порталов. Во время этого процесса определяется: какие порталы могут быть видны из других порталов. Чтобы лучше понять как протекает этот процесс, представьте, что вы, находясь внутри какого-то портала, летаете внутри него и постоянно смотрите по сторонам, чтобы увидеть другие порталы. Те порталы, которые вы увидите, и будут являться "видимыми". Эта операция повторяется для каждого портала, таким образом находятся все видимые и невидимые части карты в любой точке карты.

Нужно отметить, что во многих современных игровых движках (движок Source – не исключение) порталы могут иметь состояния: открыт или закрыт. Если портал закрыт, то все другие порталы, которые находятся за ним, не будут рисоваться. Закрытые порталы по-другому можно представлять как стены, за которыми ничего не должно быть видно. Открытие и закрытие порталов может изменяться прямо во время игры. Открытые порталы, как правило, расходуют дополнительные ресурсы компьютера, поэтому большое количество одновременно открытых порталов может существенно снизить быстродействие карты. В движке Source для создания "переключающихся" порталов используются объекты func_areaportal и func_areaportalwindow.

Есть простое правило: если портал находится в открытом состоянии на протяжении долгого времени (или всего времени игры на карте) и в течение этого времени нет возможности закрывать такой портал, то этот портал не нужно делать переключаемым. Лучше чтобы это был обыкновенный портал.

Применяя это правило для движка Source, можно сказать, что если объекты func_areaportal или func_areaportalwindow большую часть времени остаются открытыми, то такие объекты будут снижать быстродействие карты, а не увеличивать его.

Карта

  • 1) csssdk_TOOLSHINT.vmf
  • 2) csssdk_TOOLSHINT_2.vmf
  • 3) csssdk_TOOLSHINT_3.vmf

Используются объекты

  • 1)
  • HINTS
  • func_detail
  • func_button
  • point_servercommand
  • logic_auto
  • 2)
  • HINTS
  • func_detail
  • func_button
  • point_servercommand
  • logic_auto
  • prop_physics
  • 3)
  • HINTS
  • func_detail
  • func_button
  • point_servercommand
  • logic_auto
  • prop_physics
  • prop_static

Описание карты

  • 1)

На карте показано два примера использования Хинтов, демонстрирующих то, как Хинты "режут" пространство карты на Порталы. Эти примеры созданы только в демонстрационных целях, поэтому не дают выигрыша в производительности.

Для отображения Порталов используется консольная команда "mat_leafvis 1". Для включения режима Wireframe используется консольная команда "mat_wireframe 3" На этой карте-примере эти команды включены в самом начале каждого раунда, но вы можете включать и выключать их при помощи кнопки пульта. Портал, в котором будет находиться игрок, будет обведён красными линиями.

В первом примере из Хинтов создан восьмиугольник. Забегите внутрь этого восьмиугольника и посмотрите как Хинты разрезали пространство карты на Порталы. Обратите внимание, что каждая секция восьмиугольника создаёт отдельный портал.

Во втором примере из Хинтов так же создан восьмиугольник. В этом случае, помимо HINT-поверхностей, применяются SKIP-поверхности. Включив отображение порталов, забегите внутрь этого восьмиугольника и посмотрите как Хинты разрезали пространство карты на Порталы. Обратите внимание, что в отличие от первого примера, в этом примере получился один цельный портал в виде восьмиугольника, потому что SKIP-поверхности были проигнорированы во время компиляции. Так же обратите внимание, что полученный портал делится пополам. Такое деление выполняется движком Source автоматически. Дело в том, что через каждые 1024 юнита карта разрезается на кубики размерами 1024x1024x1024. Поэтому вся World-геометрия карты и все Хинты подвергаются делению в том месте, где они пересекают координаты карты, кратные 1024. В нашем случае, наш портал пересёк координату 0.

Кстати в редакторе Hammer на виде "Сбоку", "Сверху" и "Спереди" коричневым цветом отображаются линии деления карты на кубики 1024x1024x1024. Эти линии отображаются только если в настройках Hammer’а включено отображение сетки.

  • 2)

На карте продемонстрирован пример того как НЕ НАДО использовать Хинты! На этой карте практически все Хинты созданы прямоугольными. Если бы автор карты не создал Хинты вручную, то движком Source карта автоматически была бы разделена на примерно такие же прямоугольные Порталы.

Для отображения Порталов используется консольная команда "mat_leafvis 1". Для включения режима Wireframe используется консольная команда "mat_wireframe 3" На этой карте-примере эти команды включены в самом начале каждого раунда, но вы можете включать и выключать их при помощи кнопки пульта. Портал, в котором будет находиться игрок, будет обведён красными линиями.

Побегайте по карте. Обратите внимание, как отсекаются невидимые части карты. Постарайтесь побывать в каждом углу карты и постоянно смотрите по сторонам, чтобы отслеживать в какой момент движок перестаёт рисовать ту или иную часть карты. Возможно, не трудно будет заметить, использовать прямоугольные Хинты - неэффективно. Прямоугольные Хинты практически не дают преимущества в производительности, по сравнению с делением карты на Порталы без использования Хинтов. Стоит напомнить, что Портал не может быть виден игроком, если его не видно из любой точки внутри текущего портала.

Обратите внимание, что расстановка на карте Хинтов сильно снижает наглядность карты. Хинты своим присутствием "мешают" редактированию карты. Для избегания этих неудобств, разработчиками был добавлен достаточно удобный инструмент - "Визуальные группы" (VisGroups). Визуальные группы позволяют во время редактирования карты скрывать/отображать некоторые группы элементов карты. Практически всё, что создаёт автор карты, автоматически распределяется по нескольким стандартным визуальным группам. Например: Хинты находятся в визуальной группе Auto > Tool Brushes > Hint. Если во время компиляции карты какая-то визуальная группа скрыта, то все элементы такой группы не будут участвовать в процессе компиляции карты. Автор карты может создавать свои собственные визуальные группы, а так же давать им удобные имена.

Карта-пример csssdk_TOOLSHINT_3.vmf демонстрирует самый эффективный и правильный способ деления карты при помощи Хинтов.

  • 3)

На этой карте продемонстрирован пример наиболее правильного и эффективного использования Хинтов. На этой карте все Хинты имеют как HINT-поверхности, так и SKIP-поверхности. В данном случае SKIP-поверхности нужно использовать обязательно.

Для отображения Порталов используется консольная команда "mat_leafvis 1". Для включения режима Wireframe используется консольная команда "mat_wireframe 3" На этой карте-примере эти команды включены в самом начале каждого раунда, но вы можете включать и выключать их при помощи кнопки пульта. Портал, в котором будет находиться игрок, будет обведён красными линиями.

Побегайте по карте. Обратите внимание, как отсекаются невидимые части карты. Постарайтесь побывать в каждом углу карты и постоянно смотрите по сторонам, чтобы отслеживать в какой момент движок перестаёт рисовать ту или иную часть карты. В данном случае, эффективность использования Хинтов очевидна. Как только игрок заходит за угол, он не может увидеть того, что находится за углом, поэтому движок не рисует "невидимую" часть.

Обратите внимание, как созданы и расставлены Хинты на этой карте. Все Хинты проходят ровно через "углы", что является самым эффективным способом применения Хинтов. Все Хинты имеют "треугольную" форму, что сокращает размер VMF файла карты, а так же немного увеличивает скорость компиляции карты. Практически все поверхности Хинтов являются SKIP-поверхностями, и только лишь одна или две поверхности являются HINT-поверхностями. Хинты выходят за границы карты – это не запрещается движком Source.

Обратите внимание, что расстановка на карте Хинтов сильно снижает наглядность карты. Хинты своим присутствием "мешают" редактированию карты. Для избегания этих неудобств, разработчиками был добавлен достаточно удобный инструмент - "Визуальные группы" (VisGroups). Визуальные группы позволяют во время редактирования карты скрывать/отображать некоторые группы элементов карты. Практически всё, что создаёт автор карты, автоматически распределяется по нескольким стандартным визуальным группам. Например: Хинты находятся в визуальной группе Auto > Tool Brushes > Hint. Если во время компиляции карты какая-то визуальная группа скрыта, то все элементы такой группы не будут участвовать в процессе компиляции карты. Автор карты может создавать свои собственные визуальные группы, а так же давать им удобные имена.

На этой карте-примере автором карты было создано три визуальных группы: "MY HINTS 1-3", по которым были распределено несколько Хинтов. При первом запуске карты отображена только группа "MY HINTS 1". Вы можете скрывать/отображать визуальные группы из меню "VisGroups" в редакторе Hammer.

Смотрите также