Ixeris
Мод Ixeris убирает просадки FPS при движении мыши в Minecraft: рендер уезжает в отдельный поток, а ввод на Windows читается пачками. На мыши 8000 Гц прирост до x10.
Ixeris (Иксерис) - клиентский мод для Майнкрафт, который чинит неприятную и малоизвестную проблему: просадку FPS в тот самый момент, когда вы двигаете мышью. Звучит как мелочь, но на деле разница огромная. В тестах разработчика на игровой мыши с частотой опроса 8000 Гц счётчик кадров подскакивает с 12 до 121 FPS. Это не опечатка, а честный десятикратный прирост.
Мод отлично дополняет классические оптимизаторы вроде Sodium: тот разгружает рендер чанков, а Ixeris убирает узкое место в обработке ввода. Конфликтов между ними нет, так что ставить Иксерис поверх сборки с Содиумом не просто можно, а нужно. У проекта открытый исходный код и около 11 миллионов скачиваний, что для узкоутилитарного мода говорит о многом.
Откуда вообще берутся фризы при движении мыши
Когда вы крутите камеру, игре правда есть чем заняться: пересчитать видимость чанков, собрать новый кадр. Это нормальная нагрузка. Проблема в другом. Нативный код, который опрашивает события мыши и клавиатуры, устроен неэффективно, а каждый вызов из Java в сторону нативной библиотеки (так называемый JNI upcall) тоже стоит процессорного времени. В итоге CPU греется на сам опрос ввода вместо того, чтобы рисовать кадры.
Сильнее всего это бьёт по Windows. Особенно если у вас игровая мышь с высокой частотой опроса: обычная офисная шлёт 125 событий в секунду, а топовые игровые - 1000, 2000 и даже 8000. Каждое событие ванильный Minecraft обрабатывает по одному, и на 8000 Гц клиент честно захлёбывается. Отсюда парадокс: дорогая мышь на мощном железе даёт 12 FPS просто потому, что вы ей шевельнули.
Что делает мод
Ixeris решает проблему двумя основными приёмами:
- Многопоточный опрос событий (Threaded Event Polling). В ванилле рендер и опрос событий крутятся в одном потоке и мешают друг другу. Мод разводит их: опрос остаётся на главном потоке, а всё остальное, включая отрисовку, переезжает в отдельный рендер-поток. Пока мышь флудит событиями, рендер не простаивает.
- Буферизованный raw input (только Windows). Вместо неэффективного
GetRawInputData(один вызов на каждое событие) используетсяGetRawInputBuffer, который забирает события пачкой - один вызов на всю очередь. А поскольку эта работа перенесена в Java-код, накладные расходы JNI испаряются полностью.
По факту это мод, который ничего не добавляет в игру визуально. Он просто отдаёт вам кадры, которые Windows и ванильный клиент до этого тихо съедали.
Тесты и цифры
Замеры делались после полной загрузки мира, когда частота кадров успела стабилизироваться. Никакой синтетики, обычная игра.
Тест 1: в игре
Сравнение FPS с захваченным курсором (невидимым, как в обычном геймплее). Суперплоский мир без сущностей, Windows, где буферизованный ввод включён по умолчанию. Колонка "без буфера" показывает Ixeris с принудительно выключенной опцией буферизации, чтобы был виден вклад каждой из двух оптимизаций отдельно.
| Частота опроса | Без Ixeris | Ixeris, без буфера | Ixeris, с буфером |
|---|---|---|---|
| 8000 Гц | 12 FPS | 83 FPS (6.9x) | 121 FPS (10.1x) |
| 2000 Гц | 76 FPS | 114 FPS (1.50x) | 135 FPS (1.78x) |
| 500 Гц | 134 FPS | 145 FPS (1.08x) | 151 FPS (1.13x) |
Закономерность простая: чем выше частота опроса мыши, тем яростнее выигрыш. На 8000 Гц мод буквально воскрешает клиент. На скромных 500 Гц прирост уже не драматичный, но всё равно приятный.
Тест 2: в меню
Здесь курсор не захвачен, то есть видим, как на экране паузы F3+Esc. В таком режиме raw input не используется вообще - игре нужна реальная позиция курсора, а не относительное смещение мыши. Частота опроса 1000 Гц. Первый столбец - FPS в покое, следующие два - при быстрых движениях мышью по окну игры, без мода и с ним. Учтите, замер делался ещё на первом релизе Ixeris, и с тех пор мод сильно поумнел.
| FPS без движения | Без Ixeris | С Ixeris | |
|---|---|---|---|
| Windows | 233 FPS | 133 FPS | 165 FPS (1.24x) |
| Linux (X11) | 358 FPS | 320 FPS | 355 FPS (1.11x) |
| Linux (Wayland) | 364 FPS | 289 FPS | 298 FPS (1.03x) |
Windows снова выигрывает больше всех - плюс 24% к плавности. На Wayland прирост почти нулевой: там стек ввода и без мода работает заметно адекватнее.
Совет по совместимости
В отчётах игроков Ixeris регулярно стоит рядом с Sodium, Distant Horizons, Axiom, FPS Reducer и Cubes Without Borders, и жалоб на конфликты не замечено. Для сборки на производительность это однозначный must-have, особенно если вы играете на Windows.
А вот с SpecialK (инжектором для глобального снижения задержек) зафиксирована несовместимость. Если пользуетесь им, перед установкой мода его лучше отключить.
Технические детали
Потокобезопасность
Разнос рендера и опроса событий по разным потокам - дело тонкое, и автор подошёл к нему серьёзно. Колбэки, зарегистрированные через glfwSet*Callback, выполняются на рендер-потоке. Вызовы функций GLFW, которые по документации обязаны идти с главного потока, при обращении с других потоков перенаправляются на главный. Часть таких вызовов возвращается сразу, если её можно безопасно отложить, остальные блокируют вызывающего до завершения. Начиная с версии 3.1.0 требования потокобезопасности из документации GLFW соблюдаются строго, так что мод крашить игру по race condition не должен.
Кэширование состояний GLFW
Большинство функций GLFW требуют вызова с главного потока, но многие моды дёргают их с рендер-потока. Чтобы постоянные перегоны между потоками не съели весь выигрыш, Ixeris кэширует часто используемые состояния GLFW и отдаёт их с любого потока напрямую. Кэши безопасны и лишних задержек не создают.
Улучшенный ограничитель FPS
Ванильный лимитер кадров (в версиях до 26.1) устроен криво: для сна потока он использует glfwWaitEventsTimeout, а эту функцию нельзя вызывать с рендер-потока, так что с Ixeris она работала бы неоптимально. Мод переписывает лимитер по гибридной схеме - точный сон, а когда оставшееся время ожидания становится мизерным, переход на спин-ожидание. Кадр выходит ровно в срок, без микрофризов на ровном месте.
Глоссарий
- Главный поток - поток, на котором запускается игра. Большинство функций GLFW обязаны вызываться именно здесь, и именно он отвечает за опрос событий.
- Рендер-поток - делает всё, что игра обычно делает, кроме опроса событий.
В ванильном Minecraft это один и тот же поток. Ixeris как раз разрывает это единство.
Совместимость и версии
Мод чисто клиентский - на сервер его ставить не нужно, другим игрокам на вашем сервере он тоже не потребуется. Доступны сборки под Fabric, Forge, NeoForge и Quilt. Список поддерживаемых версий широкий: Minecraft 1.16.5, 1.18.2, 1.19.2, 1.19.4, линейки 1.20.x и 1.21.x, а также свежие 26.1.x, 26.2 и 26.3. Актуальная ветка мода - 4.6.8, в последнем обновлении, помимо прочего, исправлен краш на NeoForge 26.3. Буферизованный ввод при желании можно выключить в настройках, что пригодится для диагностики, если какой-то другой мод начнёт капризничать.
Кому стоит скачать Ixeris
Коротко: всем, у кого игровая мышь с частотой опроса 1000 Гц и выше и система на Windows. Для вас прирост будет не косметическим, а ударным. Владельцам обычных мышей на 125 Гц и игрокам на Linux мод тоже не помешает, но эффект будет скромнее. И если вы собираете клиент на производительность вокруг Sodium и Ириса, оставьте в модпапке место и под Иксерис - он закрывает дыру, которую рендерные оптимизаторы в принципе не трогают.
Часто задаваемые вопросы
Совместимость
Создатели
Детали
Версии мода Ixeris
Доступно 989 версий. Сначала показаны самые популярные и самые свежие.