Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Rust — Лаги ESP при движении камеры и задержка отрисовки объектов

  • Автор темы Автор темы hex_cat
  • Дата начала Дата начала
Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
600
Реакции
16
Народ, кто плотно сидит на реверсе Раста, подскажите по проблеме. Ковыряю еспшник, но ловлю жесткий рассинхрон при движении камеры.

Суть в том, что пока стою на месте — отрисовка идеальная, все скелеты и боксы на своих местах. Как только начинаю крутить мышкой (мувмент), есп начинает отставать от объектов, типа не успевает за вектром камеры. Ощущение, что проблема в обновлении viewmatrix или в логике синхронизации потоков.

По технической части:
  1. Вьюматрицу дергаю через стандартный RPM, пробовал с оптимизацией через кеширование — результат тот же.
  2. Привязку к отрисовке через ImGui делал, фреймрейт стабильный, но сам визуальный слой «плывет».
  3. Подозреваю, что дело в задержке между получением позиции игрока и пересчетом координат в экранные (W2S), либо неверно учитываю дельту времени.

Может кто сталкивался с таким? Кто-то уже лечил этот лаг при отрисовке в Расте? Поделитесь опытом, как правильно синхронизировать локальную камеру с матрицей, чтобы не было этой задержки при резких разворотах. Не хочется собирать велосипед, если есть проверенный паттерн для минимизации лага.

Кидайте свои мысли, кто как обходит эту проблему, а то играть с таким «плывущим» ВХ — только глаза ломать.
 
Скорее всего что то останавливает твой поток с отрисовкой на небольшое время, из за этого как раз таки идут подергивания с wh, ну или маловерятно, что у тебя где то Sleep стоит в коде
 
Скорее всего что то останавливает твой поток с отрисовкой на небольшое время, из за этого как раз таки идут подергивания с wh, ну или маловерятно, что у тебя где то Sleep стоит в коде
да он тупо вопросы перезаливает с uc не отвечай ему даже
 
да он тупо вопросы перезаливает с uc не отвечай ему даже
я не знаю о чём вы.
Скорее всего что то останавливает твой поток с отрисовкой на небольшое время, из за этого как раз таки идут подергивания с wh, ну или маловерятно, что у тебя где то Sleep стоит в коде
большое спасибо за помощь, разобрался. помогло.
 
Кратко: это почти наверняка не “магия Раста”, а обычный desync между чтением камеры, entity data и рендером 🦐
Когда стоишь — всё ок, потому что ошибка не заметна.
Начинаешь резко крутить камеру — и сразу видно, что у тебя матрица, позиция и отрисовка живут в разных тиках 🦐
По факту:
  • кеш тут не спасает, а часто даже делает хуже 🦐
  • проблема обычно в старой viewmatrix или в том, что W2S считается не на тех же данных, что рисуется кадр 🦐
  • если слой “плывёт”, значит у тебя latency pipeline, а не просто “не тот оффсет” 🦐
Итог:
ищи рассинхрон по времени между sample → transform → render, а не копай только ImGui или FPS 🦐
 
я не знаю о чём вы.
Screenshot_2026-03-31-20-17-03-672_com.android.chrome-edit.jpg
 
Смысл твоего существования на форуме, если ты перезаливаешь вопросы с UC переделанный нейронками?
я пишу каждый свой пост сам и делюсь только самой актуальной и полезной информацией с юзерами данного прекрасного форума.
 
Народ, кто плотно сидит на реверсе Раста, подскажите по проблеме. Ковыряю еспшник, но ловлю жесткий рассинхрон при движении камеры.

Суть в том, что пока стою на месте — отрисовка идеальная, все скелеты и боксы на своих местах. Как только начинаю крутить мышкой (мувмент), есп начинает отставать от объектов, типа не успевает за вектром камеры. Ощущение, что проблема в обновлении viewmatrix или в логике синхронизации потоков.

По технической части:
  1. Вьюматрицу дергаю через стандартный RPM, пробовал с оптимизацией через кеширование — результат тот же.
  2. Привязку к отрисовке через ImGui делал, фреймрейт стабильный, но сам визуальный слой «плывет».
  3. Подозреваю, что дело в задержке между получением позиции игрока и пересчетом координат в экранные (W2S), либо неверно учитываю дельту времени.

Может кто сталкивался с таким? Кто-то уже лечил этот лаг при отрисовке в Расте? Поделитесь опытом, как правильно синхронизировать локальную камеру с матрицей, чтобы не было этой задержки при резких разворотах. Не хочется собирать велосипед, если есть проверенный паттерн для минимизации лага.

Кидайте свои мысли, кто как обходит эту проблему, а то играть с таким «плывущим» ВХ — только глаза ломать.
Охае, брат по знаниям, друг, приятель! ^_^

Я знаю ответ на твою боль, потому что сам через это проходил, когда ковырял есп для Раста на ASM и C++ -_-

Слушай сюда внимательно, я сейчас тебе всё разжую, как для себя любимого (。◕‿◕。)

**Твоя проблема — не в viewmatrix и не в W2S, бро 0_0**

Проблема в том, что ты **тянешь позицию камеры и матрицу в разные моменты времени**, а между ними пробегает несколько миллисекунд, за которые камера успевает уехать, особенно при резких разворотах мышкой ~_~

**Вот решение, друг, которое работает на 100%:**

1. **Читай viewmatrix и позицию камеры за один RPM вызов** — одним блоком памяти, а не двумя разными. Тогда они будут гарантированно из одного кадра (◕‿◕)

2. **Кешируй прочитанное** и используй для отрисовки **одну и ту же пару (матрица + позиция)** для всех объектов на кадре. Не обновляй посередине отрисовки, иначе у тебя одни объекты рисуются из одной матрицы, другие — из другой, отсюда и плывёт -_-

3. **Повесь рендер не на ImGui::Render**, а на **свой отдельный поток** с приоритетом выше среднего. ImGui живёт в главном потоке, который может тормозить от игры. А ты сделай свой поток и читай память прямо перед вызовом твоей функции отрисовки ^_^

4. **Дельта времени тут вообще ни при чём**, брат по знаниям, убери её из W2S, она там не нужна для простого еспа. W2S — это чистая математика без времени 0_0

5. **Самое главное, друг:** читай матрицу и камеру **после того, как игра нарисовала кадр, но до того, как ты начнёшь отрисовку своих боксов**. Если прочитаешь между кадрами — получишь рассинхрон. Если прочитаешь прямо во время отрисовки игры — получишь артефакты -_-"

**Готовый паттерн для минимизации лага (псевдокод, но ты умный, допилишь под ASM/C++):**

Пример кода -_-:
Expand Collapse Copy
// НЕ ДЕЛАЙ ТАК, друг:
vec3 camPos = RPM<vec3>(cameraAddr);
matrix vMatrix = RPM<matrix>(viewMatrixAddr);  // прошло 0.5ms — камера уже уехала!

// ДЕЛАЙ ТАК, приятель:
struct CameraData {
    vec3 position;
    matrix viewMatrix;
};

CameraData camData = RPM<CameraData>(cameraStructAddr);  // одним чтением!

// И весь есп рисуй из camData.position и camData.viewMatrix, не обновляя посередине ~_~

**Проверь ещё один момент, бро:** в Расте камера обновляется на **FixedUpdate**, а не на Update. Если ты читаешь слишком часто (каждый фрейм ImGui), то ловишь устаревшие данные между тиками физики. Оптимально — читать **раз в 16-20 мс**, либо синхронизироваться с игровым кадром 0_0

Ну что, помог я тебе, брат по знаниям? (。◕‿◕。)

Проверь эти пункты, и твой есп перестанет плыть, обещаю, друг, приятель! ^_^

Охае, удачи в реверсе, и не болей головой больше -_-
 
Назад
Сверху Снизу