Предложения по оптимизации нагрузки на CPU и балансировке механики ядерного удара

Привет, команда War Thunder!

Играю в War Thunder на ПК со следующей конфигурацией: процессор Intel Core i5‑13490F, видеокарта Intel Arc B580, 16 ГБ ОЗУ. На этой сборке отчётливо видна проблема неравномерной загрузки CPU и нестабильного фреймтайма, а также есть вопрос баланса по механике ядерного удара. Ниже подробно расписал обе проблемы и конкретные предложения по их решению.

1. Проблема: неравномерная загрузка ядер CPU и нестабильный фреймтайм

Что наблюдаю. В боях (особенно в напряжённых моментах) нагрузка стабильно держится на 1–2 ядрах, остальные почти не задействованы. При этом средний FPS может быть высоким, но фреймтайм «плавает»: появляются микрофризы и подтормаживания. Эффект заметен даже на современной сборке — то есть проблема не в железе, а в том, как игра распределяет задачи.

Как фиксировал. Замеры делал в MSI Afterburner и HWiNFO: отчётливо видно, что при пиковой нагрузке 1–2 ядра уходят в 80–100%, а остальные остаются на уровне 5–15%. В моменты фризов график фреймтайма (frametime) резко «прыгает» вверх, что совпадает по времени с активными событиями боя (появление большого количества объектов, взрывы, дым, трассировка).

Почему это критично. Неравномерная загрузка приводит к тому, что «узким горлышком» становится одно-два ядра, и даже мощный процессор не может раскрыть свой потенциал. В результате страдает плавность картинки и отзывчивость управления — это особенно важно в динамичных режимах.

Понимаю ограничения. Я осознаю, что простое «разнести всё по потокам» не всегда повышает производительность: из‑за синхронизации потоков, блокировок и накладных расходов ситуация может стать даже хуже. Поэтому предлагаю не глобальную переделку движка, а точечную оптимизацию там, где она даст реальный выигрыш.

Конкретные предложения:

  • Профайлинг ключевых участков кода. Прошу провести профайлинг (например, через VTune или встроенные инструменты) по следующим зонам: физика/коллизии, рендер, обработка сетевого трафика, загрузка ассетов. Это позволит точно определить «горячие» участки, которые сильнее всего влияют на время кадра.
  • Оптимизация планировщика задач. В тех местах, где задачи независимы (подготовка команд рендера, расчёт сетевых пакетов, обработка ассетов), имеет смысл разнести их по разным потокам, минимизируя частые синхронизации. Если синхронизация занимает значительную часть времени, выигрыш от многоядерности исчезает.
  • Минимизация ложного разделения кэша (false sharing). При параллельной работе важно, чтобы потоки не «мешали» друг другу на уровне кэша процессора. Выравнивание данных и разделение структур под разные потоки могут заметно снизить накладные расходы.
  • Work-stealing планировщик задач. Использование планировщика, который позволяет потокам брать задачи из общей очереди и «забирать» задачи у других потоков при простое, помогает лучше загружать все ядра даже при неравномерной нагрузке.
  • Асинхронная загрузка ассетов. Частые микрофризы нередко связаны с блокирующей загрузкой текстур и моделей. Перенос этих операций в фоновые потоки без остановки основного цикла игры сделает геймплей ощутимо плавнее.

Готов предоставить дополнительные данные по своей конфигурации и замерам (скриншоты, логи, графики), если это поможет в анализе проблемы.

2. Проблема: высокий порог для механики ядерного удара и её низкая доступность

Суть проблемы. Сейчас порог для получения возможности вызвать ядерный удар составляет 2500 очков в реалистичных боях либо 20 очков воздушного события в аркадных боях. В скоротечных матчах не каждый игрок успевает набрать нужное количество очков, даже если играет активно и приносит пользу команде. В итоге механика ощущается как почти недостижимая для большинства игроков, а не как значимая награда.

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

  • Привязка к боевому рейтингу (БР). Чем выше БР техники в бою, тем выше порог; чем ниже — тем ниже. Это сохранит баланс и не даст «нафармить» ядерную бомбу на низкоуровневой технике.
  • Адаптация под темп матча. Если средняя продолжительность боя и общий счёт в матче низкие, порог можно немного снижать, чтобы награда оставалась достижимой.
  • Учёт вклада в бой. Альтернативно, можно учитывать не только очки, но и другие метрики (урон, помощь союзникам, захват точек) — чтобы игрок, который реально помогает команде, мог претендовать на награду даже без максимального количества фрагов.

Вам уже был дан ответ про многопоточность и указан адрес предложки.

Закрыто.