Загрузка...

Мышь Mouse guide (тех.часть)

Тема в разделе Девайсы создана пользователем Felans 23 май 2025. (поднята 5 июн 2025 в 21:45) 155 просмотров

Загрузка...
Опрос

Поняли вы что-нибудь из гайда?

Другие смогут видеть, как Вы проголосовали.
  1. Да

    1
    50%
  2. Нет

    1
    50%
  3. Ещё в изучение

    0
    0%
  1. Felans
    Felans Автор темы 23 май 2025 Амбассадор ryzen 329 11 мар 2024
    Всем привет!
    В этом гайде будет тонны текста, но я уверен вы сможете разобраться в этом вопросе!
    (Это не мой полноценный гайд, почти всё я брал с открытых источников)
    (На оформление не было времени)
    Упрощённо сенсор работает так: В мышке установлен инфракрасный светодиод (Infrared LED), который излучает свет на поверхность прямо перед сенсором (CMOS IMAGE SENSOR) благодаря линзе, а затем отражённый свет проходит через вторую линзу и фокусируется (Благодаря линзе поэтому не забывайте убирать пыль) на сенсоре (CMOS IMAGE SENSOR) и получается "снимок", который преобразуется в электрический сигнал и отправляется в DSP (DIGITAL SIGNAL PROCESSOR зависит от модели сенсора) для вычисления Δx (Горизонтальное смещение)/Δy(Вертикальное смещение) (DSP буквально сравнивает кадры и определяет скорость движения/направление) и наконец эти данные направляются в MCU электрическим сигналом, а MCU превращает этот электрический сигнал в электрический сигнал USB / PS/2 и данные направляются в ПК через каждый опредёлённый промежуток времени (Так как хост (USB) запрашивает данные с MCU с определённым интервалом и это называется polling rate, а в случае PS/2 там прерывания, но почти все PS/2 клавиатуры/мыши медленные по другим причинам поэтому забудьте о них) и соответственно создаётся IRQ после этого, а затем ISR -> DPC -> поток обрабатывающий ввод CSRSS(Клавиатура)/DWM(Мышь) (Но в случае W10 у CSRSS появляется ещё один поток для мыши в то время как другой отвечает за клавиатуру) -> ещё один поток DWM обрабатывающий ввод (В случае клавиатуры (CSRSS) этот шаг может скипаться, а с мышью пока что неизвестно) -> поток игры обрабатывающий ввод. Причина по которой USB 2.0 (FULL SPEED) не поддерживает polling rate выше 1000 указана здесь:
    [IMG][IMG]

    Кстати, по этой же причине binterval (Именно через него софт изменяет частоту опроса устройств) работает по разному в зависимости от скорости USB (LOW SPEED (Binterval 1 = 8 мс - 8 фреймов)/FULL SPEED(Binterval 1 = 1 мс - 1 фрейи)/HIGH SPEED(Binterval 1 = 0,125 мс - 1 микро-фрейм). То есть именно это причина того, что даже Dualsense(Контроллер) может работать на частоте 8000 герц). Подробнее здесь
    Насколько быстро мышь может ускоряться от одной точки до другой (Имеется в виду что может обработать сенсор), то есть максимальное ускорение из состояния покоя. Значение измеряется в единицах g (Из курса физики каждому известно что g = 9,8 м/с2). Пример с 70g:
    g = 9,8м/с2
    Конечная скорость (Которую нужно достичь) = 5,1 м/с
    Выражаем ускорение в метрах в секунду в квадрате = 686 м/с2
    Теперь рассчитаем время которой необходимо чтобы достичь скорость 5,1 м/с в миллисекундах = 5,1/686 x 1000 = 7,4 мс
    Как вы понимаете в реальных условиях достичь хотя бы ускорение 25-30g очень трудно.
    Максимальная скорость движения, которую сенсор мыши может обрабатывать безошибочно. Значение измеряется в дюймах в секунду (IPS). Значения выше 250-300 не имеют значения
    Так называется количество снимков, которое делает сенсор в секунду. У новейших сенсоров FRAMERATE более 15000 снимков в секунду вплоть до 20000 и более снимков в секунду. Разрешение снимков невероятно маленькое, ПРИМЕРНО 40x40
    Для начала стоит понять что есть нативное разрешение(DPI/CPI/PPI), сенсора, а есть со сглаживанием/Интерполяцией. Нативное разрешение 3200 = в одном дюйме мышка (DSP) будет видеть 3200 пикселей. То есть регистрация первого ввода будет когда мышь сдвинется на 1/3200 дюйма (А если бы разрешение было 400, то регистрация первого ввода у DSP была бы когда мышь сдвинулась бы на 1/400 дюйма). Именно это причина по которой чем выше нативное разрешение, тем меньше задержка. У новейших сенсоров уже нет интерполяции и даже самое высокое разрешение является нативным (А на относительно старых сглаживание начиналось с значений выше 1900-6400), но объективно чем выше разрешение тем меньше разница поэтому в основном 3200-6400 является достаточно хорошим разрешением. При наличии интерполяции пикселей в дюйме не становится больше для мыши (DSP), а просто к каждому пикселю добавляются "виртуальные пиксели", которые как бы продолжают движение в том же направлению. То есть к примеру при нативном разрешении 400, а у вас стоит 800 вы получите такое:
    Регистрация первого ввода будет когда мышь пройдёт 1/400 дюйма, и условно будет сдвиг вправо на 1 пиксель, но благодаря интерполяции к каждому пикселю добавляется ещё один "виртуальный пиксель" в то же направлении и в итоге вы не получаете задержку, но получаете плохую точность. Не путайте интерполяцию с Angle snapping / Drift correction / Prediction / Line correction на очень старых сенсорах (По непонятной для меня причине его вставляют в настройки новых игровых мышей) где в прошивке зашито то, что если сдвиг от оси x маленький, то сдвига на выходе не будет (То есть к примеру DSP вычислил сдвиг с оси x на 5, но благодаря angle snapping сдвига не будет, так как 5 это слишком мало). На некоторых мышках это можно было отключать, а на некоторых нет. Также на очень высоких DPI есть JITTER (AKA RIPPLE) REDUCTION (AKA DPI DOWNSHIFT или же это могут называть фильтром (MOTION JITTER FILTER, который на мышках Endgame Gear лучше всего отключать), но в любом случае никогда не включайте подобное на мышке) на многих современных сенсорах и эта функция буквально понижает DPI во время состояния покоя и возвращает DPI в норму после прохождения нескольких пикселей, то есть при начале движения, это сделано чтобы предотвратить отправку микро-движений из-за ошибок сенсора/плохой поверхности и так далее. К примеру у FOCUS PRO 35K OPTICAL SENSOR GEN-2 JITTER REDUCTION начинается только с 20000 DPI (Но помните что почти нет сенсоров где JITTER REDUCTION начинается раньше 7500 DPI).
    Не используйте RAW ACCEL (RA), иначе будет потерян смысл высокого DPI:
    [IMG]
    Высота на которой сенсор перестаёт отправлять данные в MCU. то есть данные не поступают в DSP. В основном если вы часто отрываете мышь от поверхности на которой она находится, то вам нужен минимальный LOD, но в зависимости от поверхности и ножек у мыши это может спровоцировать отсутствие ввода в некоторых моментах и в таком случае LOD нужно будет поднять. У Razer на этот случай есть Smart Tracking, то есть автоматическая калибровка LOD на любой поверхности. Также существует Asymmetric cut-off где можно отдельно поставить расстояние отрыва и приземления
    Технология о которой есть куча мифов. Здесь нет смысла описывать как она работает, ведь это проще продемонстрировать:
    [IMG]
    Здесь видно что с Hardware MotionSync задержка не повышается, Но при этом точность повышается значительно, так как берётся более новый репорт от сенсора. Стоит уточнить что в норме без MotionSync регистр (где записываются данные с сенсора) занят первым репортом с сенсора, а второй репорт сенсора игнорируется, а с Firmware MotionSync регистр также занят первым репортом сенсора, но MCU просто отправляет нулевые данные (Они как бы есть, но там пусто) и получается нулевой репорт без данных (null report), а более новый репорт сенсора переходит в новый репорт и в итоге у вас можно сказать polling rate урезан вдвое. В итоге вам нужен Hardware MotionSync, который работает на частоте опроса, которую вы используете. К примеру сенсор 3950 поддерживает Hardware MotionSync даже на 8000 hz и это как раз идеальный вариант если вы играете с такой герцовкой
    Виды свитчей / переключателей (Мышь):
    1. Механический свитч (Бывают SPST/SPDT, но их разница будет важна когда будет идти речь о Debounce) (На первой гифке SPST, так как у SPDT 2 контакта (NO(SET)/NC(RELEASE)), а не 1(NO(SET)), а на второй гифке SPDT). Когда происходит соприкосновение с нижним контактом (NO), то отправляется электрический сигнал в MCU




    [IMG][IMG]
    [IMG]

    2. Оптический свитч. Когда инфракрасный свет начинает попадать на сенсор (Очень чувствительный фотодиод), то он преобразуется в электрический сигнал и отправляется в MCU[IMG]
    [IMG]
    3. Оптический-магнитный свитч. Когда инфракрасный свет перестаёт попадать на сенсор (Очень чувствительный фотодиод), то регистрируется клик (Отправляется сигнал в MCU). Я не хотел добавлять этот свитч, так как это выглядит как несчастная попытка инженеров Steelseries сделать адекватный оптический свитч, но всё же:[IMG]
    [IMG]
    Я не хочу раздувать гайд, поэтому вот LINK на отличное объяснение MOUSE DEBOUNCE (В случае оптических свитчей DEBOUNCE нет, а вот у механических свитчей есть множество имплементаций. SPDT свитчи явно имеют преимущество, так как на них возможно сделать DEBOUNCE без лишней задержки довольно легко, а вот на мышках с SPST в основном DEBOUNCE будет руинить не только задержку клика, но и задержку сенсора, так как MCU будет занят высокоточным таймером (DEBOUNCE TIME) и не сможет обрабатывать сенсор в этот момент и это может перенести данные с сенсора на следующий поллинг, так и наоборот MCU может быть занят данными сенсора и клик будет перенесён на следующий поллинг, но в одном поллинге вполне может быть клик и данные сенсора и это можно увидеть даже в винде, ведь прерывания будут обрабатываться дольше если в них клик и данные сенсора сразу, то есть в итоге у сенсора или клика будет добавлена задержка ещё и в системе). Золотое правило: Ставьте минимальное DEBOUNCE TIME где у вас нет дабл кликов. Существует также Slam-click filter и его тоже следует отключать, так как иначе некоторые ваши клики не будет регать вовсе или это будет добавлять задержку. Что касается Multi-click filter, то его можно оставлять на дефолте (Это касается только мышек Endgame Gear), так как задержку он не изменяет если не считать спам кликами (Если вам нужен спам кликами, то сами выбирайте для себя удобный минимум)[IMG]
    Travel distance = общая дистанция хода свитча, Actuation force = какая сила нужна чтобы был зарегистрирован клик(Чтобы дойти до Actuation point), Actuation point = точка на которой регистрируется клик, Reset point = точка на которой перестаёт регистрироваться клик, Key start force = сила необходимая для начала хода свитча, Key end force = сила необходимая чтобы достичь конца хода свитча. В идеале Actuation point/Reset point и Actuation force должны быть минимальными[IMG]
    [IMG]
    Помните я писал как работает механический свитч? Клик регистрируется при соприкосновении с нижним контактом (NO), но как вы знаете у SPDT свитчей по умолчанию соприкносвение с верхним контактом (NC). Если поставить GX SPEED MODE, то клик будет регистрироваться при потере контакта с верхним контактом (NC), а не при контакте с нижним контактом (NO), то есть клик будет быстрее. Если поставить GX SAFE MODE, то клик будет регистрироваться когда не будет контакта с верхним контактом (NC), но будет контакт с нижним контактом (NO), то есть почти нет разницы с OFF, но со временем свитч будет стареть и там это может помочь предотвратить дабл клики[IMG]
    [IMG]
    Всем спасибо за просмотр моей темы!
     
    23 май 2025 Изменено
    1. Посмотреть предыдущие комментарии (9)
    2. Felans Автор темы
    3. kyOresu
      Felans, я когда то начал смотрел и забил ща посмотрим энивей нечего делать)
  2. ЗелёныйМох
    ЗелёныйМох 24 май 2025 от 200.000₽ играя в CS — https://lolz.live/threads/8621957/ 307 16 фев 2020
    Полезно, когда буду покупать новую мышку, то вернусь сюда. Спасибо за статью
     
Top