Маппинг и SDK

Killing Floor SDK: CullDistance и туман расстояния, и как их связать

Две настройки движка решают, как далеко рисуется карта Killing Floor: CullDistance у акторов и туман расстояния у зон. По отдельности они дают либо низкий FPS, либо некрасивое «выныривание» объектов. Вместе — самый дешёвый рычаг производительности у маппера. Эта статья-глоссарий объясняет обе настройки и даёт правило их связки. Всё относится к Killing Floor 1 и другим картам на Unreal Engine 2.5 (ветка UT2004).

CullDistance

Actor.CullDistance — это свойство актора, число (float) в единицах Unreal, а не отдельный объект. Его задают у конкретных акторов, чаще всего у StaticMeshActor (в редакторе: Display → CullDistance).

  • Что делает: движок перестаёт рисовать актор, когда камера дальше CullDistance.
  • 0 — никогда не отсекать: актор рисуется на любой дистанции. Это значение по умолчанию.
  • Ставьте на пропы, а не на геометрию мира. Деревья, ящики, трава, бочки и другие расставленные статик-меши — кандидаты. BSP-оболочку карты (стены, пол) не отсекайте никогда: при взгляде вдаль появятся дыры.
  • Почему это важно в KF: внутри одной большой зоны нет автоматического отсечения перекрытых объектов (occlusion culling): пропы за другими объектами всё равно рисуются. На плотной карте с 1000–2600 акторами и 300–400 тыс. треугольников пропов всё рисуется каждый кадр, и FPS проседает, как только игрок смотрит вглубь карты. Отсечение по расстоянию лечит это без потери качества вблизи.
  • Отсекает по расстоянию, а не по видимости. Слишком маленькое значение даёт заметное «выныривание» пропов, слишком большое ничего не даёт. Подбирайте под размер карты и дальность обзора.

Для ориентира: у карт, конвертированных из Source или GoldSrc, масштаб около 1,9165 единицы KF на единицу Source, то есть 8000 единиц KF ≈ 4175 единиц Source ≈ 80 метров.

Туман расстояния

Туман расстояния — набор свойств ZoneInfo. Он радиальный: густеет с удалением от камеры. На открытой карте его обычно ставят на зону, которая покрывает всю карту (ZoneInfo0).

СвойствоТипСмысл
bDistanceFogboolВключает туман в зоне
bClearToFogColorboolКрасит весь фон за туманом в цвет тумана. Заодно прячет шов скайбокса и белую дальнюю плоскость (far plane)
DistanceFogColorcolorЦвет тумана. В экспортированном T3D записывается как FColor в порядке B, G, R, A
DistanceFogStartfloatГде туман начинается (0% непрозрачности), в единицах KF
DistanceFogEndfloatГде туман полностью непрозрачен (100%). Дальше виден только цвет тумана

Значения класса по умолчанию: DistanceFogStart=3000, DistanceFogEnd=8000, цвет (128,128,128).

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

Как их связать

Туман и отсечение всегда идут в паре. Настраивайте их от одного значения — дистанции отсечения:

DistanceFogEnd   ≈ 0.92 × CullDistance
DistanceFogStart ≈ 0.45 × DistanceFogEnd
  • Когда конец тумана чуть раньше дистанции отсечения, проп к моменту исчезновения уже полностью спрятан в тумане и пропадает незаметно, а не «выныривает».
  • Начало тумана примерно на 45% от конца даёт плавное нарастание густоты, а не резкую полосу.

Пример для CullDistance=8000: DistanceFogEnd≈7360, DistanceFogStart≈3310, плюс bDistanceFog=True и bClearToFogColor=True.

Что ещё учесть

  • Туман между зонами переключается по положению игрока, а не по линии взгляда, поэтому другой туман в соседней комнате меняется в момент прохода через портал.
  • Частичный туман расстояния считается преградой для линии видимости при спавне мобов, даже если он не непрозрачный.
  • Игроки на слабых ПК могут уменьшить дальность прорисовки в своих настройках; всё равно настраивайте под большинство.
  • Клавиша F во вьюпорте редактора включает и выключает туман, пока вы работаете.