Оптимизация гизмо
Производительность наших инструментов визуализации (гизмо) оставляла желать лучшего. На крупных сценах редактор начинал ощутимо подтормаживать, превращая работу в мучение.
На этой неделе мы предприняли первые шаги по исправлению ситуации, оптимизировав процесс отрисовки гизмо.
Для наглядности: время рендеринга гизмо в основной сцене «My Summer Cottage» сократилось с 55 мс до 19 мс. Это значительный прогресс, но результат всё ещё далёк от идеала, поэтому в будущем мы уделим этой системе ещё больше внимания.

Микростаттеры VSync и задержка ввода
Мы обнаружили проблему в работе вертикальной синхронизации (VSync) и ограничителя частоты кадров, которая провоцировала микрофризы и увеличивала инпут-лаг.
При включенном VSync монитор отображает один кадр за цикл обновления. Если значение fps_max превышает частоту обновления экрана, игра генерирует кадры быстрее, чем система успевает их выводить, из-за чего они выстраиваются в очередь. В итоге время отрисовки становится неравномерным — от 5 мс до 30 мс, — что воспринимается как «дерганая» картинка, даже если средний показатель FPS остается высоким. Кроме того, это создает задержку ввода, так как готовый кадр простаивает в ожидании вывода.
Для более точной диагностики подобных проблем мы внедрили overlay_fps — экранный инструмент мониторинга, включающий график времени кадров в реальном времени, гистограмму распределения и данные о нагрузке на GPU.


Разделение ключевых кадров в Movie Maker
Теперь в контекстном меню Movie Maker появилась функция разбиения ключевых кадров на отдельные блоки.
Такие блоки могут перекрываться, что позволяет выполнять резкие переходы (hard cuts) между значениями параметров, сохраняя при этом плавную интерполяцию по краям.
Стили HtmlPanel
Наш компонент HtmlPanel предназначен для отрисовки HTML-разметки в интерфейсе (по аналогии с форматированным текстом). Мы используем его в меню паузы и других элементах, чтобы избежать перегрузки системы полноценным браузером.
Ранее стилизация этих элементов была крайне скудной, но теперь мы привели их в порядок — они выглядят так же аккуратно, как на странице пакета.


Улучшения сетевого кода
Огромное спасибо нашему участнику сообщества Josh Mobley, чьи исправления помогли устранить ряд проблем с надежностью сети.
Лобби, создаваемые при запуске, теперь работают асинхронно. Это значит, что Networking.IsActive корректно определяется сразу в методе OnStart, без задержки в один кадр. Также исправлена ошибка, при которой свойства SyncFlags.FromHost (авторитарные для хоста) некорректно перезаписывались клиентскими сообщениями обновления. Кроме того, была устранена проблема, из-за которой одиночные снимки состояния сети (snapshots) могли приходить с опозданием.
Помимо исправлений, мы позаботились о том, чтобы «простаивающие» игроки не отключались от сервера: теперь «пульс» (heartbeats) отправляется как надежный пакет, поэтому отсутствие активности больше не приведет к автоматическому выбросу из игры. А если вы решите изучить сетевой трафик, Джош также обновил оверлей «Debug Network Calls», сделав отображение передаваемых данных гораздо более наглядным.

