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).
| Свойство | Тип | Смысл |
|---|---|---|
bDistanceFog | bool | Включает туман в зоне |
bClearToFogColor | bool | Красит весь фон за туманом в цвет тумана. Заодно прячет шов скайбокса и белую дальнюю плоскость (far plane) |
DistanceFogColor | color | Цвет тумана. В экспортированном T3D записывается как FColor в порядке B, G, R, A |
DistanceFogStart | float | Где туман начинается (0% непрозрачности), в единицах KF |
DistanceFogEnd | float | Где туман полностью непрозрачен (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 во вьюпорте редактора включает и выключает туман, пока вы работаете.