func_detail
func_detail - это внутренний брашевая энтити, доступно для всех игр на движке
Source. Это не совсем объёмный объект, а скорее способ перемещения всех содержащихся в нём элементов карты в Мир с пометкой признаком детализации CONTENTS_DETAIL, в результате чего они перестают влиять на видимость и не разделяют грани обычных элементов карты. Все элементы карты, не образующие 'основную' геометрию карты (и не преобразованные в объекты), должны быть элементами детализации, за исключением полупрозрачного стекла (у которого существует проблема сортировки альфа-канала, если оно не является геометрией карты).
Valve предоставила пример карты sourcesdk_content\hl2\mapsrc\sdk_func_detail.vmf. Вы также можете загрузить исходники карт HL2 и скрыть элементы детализации с помощью автоматической видовой группы, чтобы увидеть, где именно Valve их использовала.
r_drawfuncdetail 0, чтобы скрыть элементы детализации на любой карте в процессе игры. Элементы карты, использующие материалы с параметром %CompileDetail, всегда будут обрабатываться аналогично преобразованным в func_detail.
Разделение объектов func_detail используется для удобства редактирования: 5 элементов в одном func_detail будут обработаны так же, как 5 отдельных func_detail с каждым элементом по отдельности.
Элементы карты, представляющие собой воду и слизь, не могут быть элементами детализации. VBSP автоматически удаляет признак детализации из жидкостей, а изменение VBSP для отключения этой особенности делает жидкости невидимыми в игре (но в них по-прежнему можно будет плавать).
Эффекты
Цель создания объёмного объекта для элементов детализации - предотвращение создания избыточного количества областей видимости ради простых элементов детализации карты, отсюда и название этого объекта. VBSP позволяет областям видимости охватывать элементы детализации, тем самым сокращая их общее количество и время компиляции.
Выше показан элемент карты (левый цилиндр) и элемент детализации (правый цилиндр). Синие линии показывают границы областей видимости. Элемент карты разделил карту на девять областей произвольной формы, что увеличило время компиляции и незначительно снизило производительность, тогда как элемент детализации ни на что не повлиял.
Особенности
- Элементы детализации нельзя использовать для герметизации карты или зон порталов областей.
- Поскольку элементы детализации не разделяют обычные элементы карты, свет может проникать под ними, если масштаб карты освещения другой поверхности превышает примыкающие размеры самого элемента детализации. Если столкнулись с этим, разделите подстилающий элемент карты на несколько частей (с помощью ⇧ Shift+X) и покройте закрываемую часть неотрисовываемой текстурой.
- Из-за этого эффекта элементы детализации, закрывающие значительные площади поверхностей, будут неэффективны, если поверхность под ними будет отрисовывается! Грани элементов геометрии карты, полностью закрытые объектами func_detail, следует покрывать неотображаемой служебной текстурой.
- Detail brushes do chop each other, however. Vanilla VBSP does not support detail levels as seen in
HLBSP, so all detail brushes will chop each over with no bias.
Совет: DeathByNuke's fork of VBSP has %CompileChopLow,%CompileChopHigh, and%CompileChopAllmaterial map compile flags which give some control over what chops what.
- Поверхности очень тонких (толщиной около 2 единиц) элементов детализации исчезают на некотором расстоянии. В качестве обходного решения используйте вместо них func_brush.
- Элементы карты, покрытые полупрозрачными и/или прозрачными текстурами, всё равно разделяют области видимости, и может понадобиться их преобразование в func_detail. Они не могут герметизируют пространство карты.
- Деформированные повехности не влияют на расчёт видимости (VIS) и не изолируют карту, поэтому их не нужно преобразовывать в func_detail. Никогда не преобразовывайте деформированные повехности в объекты.
- В некоторых случаях элементы детализации могут объединяться с гранями соседних элементов детализации, а иногда и элементов карты, что может привести к созданию областей видимости.
- В обычных условиях, каждое соприкасание элемента детализации с элементом карты учитывается и оптимизируется VBSP. Такое соединение называют Т-стыком или индексом воды, и существует ограничение на количество Т-стыков, которые VBSP будет пытаться обработать (65'535). Чрезмерное использование элементов детализации, соприкасающихся с геометрией карты, может привести к прерыванию компиляции VBSP с ошибкой. Использование параметра
-notjuncпозволяет пропустить эту оптимизацию, однако приведёт к появлению визуальных дефектов.
Примечание: По неизвестным причинам наличие воды приводит к резкому росту числа Т-стыков. Эта проблема устраняется, удалением объёмов воды или измением их формы.
Обходной приём: Use
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.
Исправление кода: See this GitHub PR for how to implement VBSP++'s t-junction fix to your own VBSP fork.
Подходящие элементы карты
Любой элемент карты, который незначительно перекрывает обзор игрока, следует преобразовать в элемент детализации. Примеры подобных элементов:
- Колонны, постаменты и опоры
- Отдельно стоящие стенки
- Подвесные мостки
- Ступени лестниц (создавайте под ними сплошной клиновидный элемент карты)
- Небольшие строения
- Повёрнутые элементы карты
- Очень мелкие или тонкие элементы карты
Ключ-параметры
-
Minimum / Maximum DX Level (mindxlevel / maxdxlevel) <целое число выбор>(удалено начиная с
)
-
Устарело.
Влияет только при запуске VBSP с параметром-dxlevel, поскольку элементы карты на самом деле отображаются в процессе игры независимо от используемой версии DirectX.
- Name (targetname) <объект источник>
- Имя этого объекта. Оно отображается на 2D-видах в Hammer и Отчёте об объектах (Entity Report). Не влияет ни на игровой процесс, ни на компиляцию карты.
- Origin (origin) <координаты> Отсутствует в FGD!
-
Смещение геометрии на указанное значение в скомпилированном BSP. (Используется для вхождений; не учитывается непосредственно)
Подтвердить:Probably also supports angles for a similar reason.
Смотреть также
- Оптимизация (создание карт)
- func_detail_illusionary - нематериальная версия этого объекта, которую можно добавить в сторонние компиляторы
