func_detail

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Español (es)한국어 (ko)Português do Brasil (pt-br)Русский (ru)中文 (zh)Translate (Translate)

func_detail - это внутренний(en) брашевая энтити(en), доступно для всех игр на движке Source Source. Это не совсем объёмный объект, а скорее способ перемещения всех содержащихся в нём элементов карты в Мир(en) с пометкой признаком детализации CONTENTS_DETAIL, в результате чего они перестают влиять на видимость(en) и не разделяют(en) грани обычных элементов карты. Все элементы карты, не образующие 'основную' геометрию карты (и не преобразованные в объекты), должны быть элементами детализации, за исключением полупрозрачного стекла (у которого существует проблема сортировки альфа-канала(en), если оно не является геометрией карты).

Valve предоставила пример карты sourcesdk_content\hl2\mapsrc\sdk_func_detail.vmf. Вы также можете загрузить исходники карт HL2 и скрыть элементы детализации с помощью автоматической видовой группы(en), чтобы увидеть, где именно Valve их использовала.

Tip.pngСовет: Как вариант, можно использовать переменную управления(en) r_drawfuncdetail 0, чтобы скрыть элементы детализации на любой карте в процессе игры.

Элементы карты, использующие материалы с параметром %CompileDetail, всегда будут обрабатываться аналогично преобразованным в func_detail.

Разделение объектов func_detail используется для удобства редактирования: 5 элементов в одном func_detail будут обработаны так же, как 5 отдельных func_detail с каждым элементом по отдельности.

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

Эффекты

Цель создания объёмного объекта для элементов детализации - предотвращение создания избыточного количества областей видимости(en) ради простых элементов детализации карты, отсюда и название этого объекта. VBSP позволяет областям видимости охватывать элементы детализации, тем самым сокращая их общее количество и время компиляции.

World-vs-detail.png

Выше показан элемент карты (левый цилиндр) и элемент детализации (правый цилиндр). Синие линии показывают границы областей видимости. Элемент карты разделил карту на девять областей произвольной формы, что увеличило время компиляции и незначительно снизило производительность, тогда как элемент детализации ни на что не повлиял.

Особенности

Сравнение применения $translucent(en) и $alphatest(en) материалов на элементах карты (по краям) и элементах детализации (в центре) соответственно.
  • Элементы детализации нельзя использовать для герметизации(en) карты или зон порталов областей.
  • Поскольку элементы детализации не разделяют(en) обычные элементы карты, свет может проникать под ними, если масштаб карты освещения(en) другой поверхности превышает примыкающие размеры самого элемента детализации. Если столкнулись с этим, разделите подстилающий элемент карты на несколько частей (с помощью ⇧ Shift+X) и покройте закрываемую часть неотрисовываемой(en) текстурой.
    • Из-за этого эффекта элементы детализации, закрывающие значительные площади поверхностей, будут неэффективны, если поверхность под ними будет отрисовывается! Грани элементов геометрии карты, полностью закрытые объектами func_detail, следует покрывать неотображаемой(en) служебной текстурой.
    • Detail brushes do chop each other, however. Vanilla VBSP(en) does not support detail levels as seen in GoldSrc HLBSP(en), so all detail brushes will chop each over with no bias.
Tip.pngСовет: DeathByNuke's fork of VBSP(en) has %CompileChopLow, %CompileChopHigh, and %CompileChopAll material map compile flags(en) which give some control over what chops what.
  • Поверхности очень тонких (толщиной около 2 единиц) элементов детализации исчезают на некотором расстоянии. В качестве обходного решения используйте вместо них func_brush(en).
  • Элементы карты, покрытые полупрозрачными(en) и/или прозрачными(en) текстурами, всё равно разделяют области видимости(en), и может понадобиться их преобразование в func_detail. Они не могут герметизируют пространство карты.
    • Деформированные повехности не влияют на расчёт видимости (VIS) и не изолируют карту, поэтому их не нужно преобразовывать в func_detail. Никогда не преобразовывайте деформированные повехности в объекты.
  • В некоторых случаях элементы детализации могут объединяться с гранями соседних элементов детализации, а иногда и элементов карты, что может привести к созданию областей видимости.
  • В обычных условиях, каждое соприкасание элемента детализации с элементом карты учитывается и оптимизируется VBSP(en). Такое соединение называют Т-стыком или индексом воды, и существует ограничение на количество Т-стыков, которые VBSP будет пытаться обработать (65'535). Чрезмерное использование элементов детализации, соприкасающихся с геометрией карты, может привести к прерыванию компиляции VBSP с ошибкой. Использование параметра -notjunc позволяет пропустить эту оптимизацию, однако приведёт к появлению визуальных дефектов.
Note.pngПримечание: По неизвестным причинам наличие воды приводит к резкому росту числа Т-стыков. Эта проблема устраняется, удалением объёмов воды или измением их формы.
PlacementTip.pngОбходной приём: Use VBSP++ VBSP++ to prevent exceeding the t-junction from causing a map to not compile. This does not increase the t-junction limit; instead, it fixes the first 65535 t-junctions, and leaves any subsequent t-junctions unfixed, but this is better than not fixing any t-junctions.
Cpp.pngИсправление кода: See this GitHub PR for how to implement VBSP++'s t-junction fix to your own VBSP fork.

Подходящие элементы карты

От привокзальной площади Сити-17 мало что останется, если убрать элементы детализации (а также объекты и реквизит). Valve упустила только несколько элементов геометрии карты...

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

  • Колонны, постаменты и опоры
  • Отдельно стоящие стенки
  • Подвесные мостки
  • Ступени лестниц (создавайте под ними сплошной клиновидный элемент карты)
  • Небольшие строения
  • Повёрнутые элементы карты
  • Очень мелкие или тонкие элементы карты

Ключ-параметры

Minimum / Maximum DX Level (mindxlevel / maxdxlevel) <целое число(en) выбор> (удалено начиная с Left 4 Dead) Obsolete
Устарело.
Влияет только при запуске VBSP с параметром -dxlevel, поскольку элементы карты на самом деле отображаются в процессе игры независимо от используемой версии DirectX.
Name (targetname) <объект источник(en)>
Имя этого объекта. Оно отображается на 2D-видах в Hammer и Отчёте об объектах (Entity Report)(en). Не влияет ни на игровой процесс, ни на компиляцию карты.
Origin (origin) <координаты(en)> Отсутствует в FGD!
Смещение геометрии на указанное значение в скомпилированном BSP. (Используется для вхождений; не учитывается непосредственно)
Подтвердить:Probably also supports angles for a similar reason.

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