пятница, 27 июня 2014 г.

Оптические мышки. Что такое DPI и CPI. Для чайников.


В последнее время стало модным ассоциировать высокое значение DPI оптической мыши с высокой точностью её сенсора. Производители игровых девайсов в рекламных буклетах не стесняются прибавить десяток восклицательных знаков к цифре dpi своей новой «революционной мышки» (3200!!! DPI, 6400 DPI!!!!!, 12000 DPI!!!!!!). Рынок диктует свои правила. Конечно, современный мир крайне технологичен, и у обычного человека просто не хватает времени разобраться во всяких телевизорах, андроидах, автомобилях и прочих модных штуках. Что уже говорить о какой-то мышке. Но мы попробуем разобраться, что же такое на самом деле DPI и зачем оно нужно.

Откуда растут ноги

Для начала разберемся, каким образом у людей высокое значение DPI ассоциируется с высокой точность. Скорее всего, тут работате простая аналогия с фотоаппаратом. Все знают, 0.3 mpx (мегапикселя), как на старых телефонах – это плохо: смазанная картинка, плохо видны детали. А вот 8 mpx как в iPhone – это хорошо, потому что все видно очень четко. «Так, наверное, и в мышках», - думают люди, - «в них же тоже есть пиксели». Ведь DPI формально означает "Dots Per Inch", т.е. буквально «ТОЧЕК НА ДЮЙМ». Т.е. больше точек, - лучше видны детали поверхности, – следовательно, мышка может различать даже самые мелкие свои движения. И это позволяет в играх точнее наводить курсор/прицел. Вот и все объяснение. Правильно? Логично? Логично, но, к сожаленью, В КОРНЕ НЕПРАВИЛЬНО!

Как работает оптическая мышь

Сенсоры оптических мышек действительно работают по принципу фотокамеры – они постоянно фотографируют поверхность, по которой ездит мышь и, сравнивая между собой полученные снимки, определяют куда двигается мышь. А для регистрации снимков используются матрицы, состоящие из светочувствительных элементов, т.е. пикселей. Вот что собой представляют матрицы некоторых игровых сенсоров (также указано максимальное значение dpi):

Microsoft 3.0/1.1, сенсор MLT04 ST, 400 dpi, 22х22 светочувствительных элементов

Logitech MX518, сенсор Avago 3080, 1600 dpi, 30х30 светочувствительных элементов

Logitech G400, сенсор Avago 3095, 3500 dpi, 30x30 светочувствительных элементов

Как видно, размеры самих сенсоров в пикселях крайне невелики! Например для сенсора 30х30 общее число пикселей будет 30x30=900 px , в то время как даже у старого фотоаппарата на 0.3 мегапикселя размер сенсора будет 640х480=307200 px! Откуда тогда берутся числа DPI?

Оптическое разрешение мыши

Дело в том, что в оптических мышках, изображение поверхности, по которой мы водим мышь, попадает на сенсор через увеличивающую линзу (Рисунок 1). Увеличение необходимо, чтобы лучше различать текстуру поверхности. Если посмотреть на обычный черный коврик для мыши, то он вроде бы везде одинаковый. Но взгляните на него под микроскопом – и каждый миллиметр поверхности будет по-своему уникален! Таким образом, на сенсор оптической мышки попадает лишь небольшая часть поверхности в виде квадрата. Обозначим сторону этого квадрата L. Если сенсор имеет NxN светочувствительных элементов, то (следите за руками) значение DPI сенсора будет равно:


DPI = N/L
ИМЕННО ТАК!

Это так называемое "базовое" или "оптическое" разрешение мыши.

Очевидно, что для увеличения DPI, достаточно просто уменьшить площадь поверхности, которую будет видеть сенсор, т.е. поставить более сильную линзу. Но даже в этом случае сенсор будет работать с изображениями, полученными только своей маленькой матрицей. Поэтому DPI напрямую не имеет никакого отношения к точности мышки. Это просто характеристика, показывающая какую площадь поверхности охватывает сенсор, и зависит от свойств линзы и размера светочувствительной матрицы сенсора.

Тем не менее, на разных расстояниях сенсор может по-разному различать поверхность, лучше либо хуже. И именно это в наибольшей степени определяет точность сенсора!

Сильное увеличение (высокое значение dpi) приводит к тому, что в сенсор попадает слишком мало света и фотографии становятся "шумными" (вспомните цветные пятна на фотографиях, сделанных ночью). А слабое увеличение (низкое значение dpi) не позволяет сенсору "видеть" текстуру поверхности. Кроме того, качество самих светочувствительных элементов тоже играет важную роль. В современных игровых мышках базовое разрешение находится в диапазоне 400-800 dpi.

DPI vs CPI

Полученные матрицей фотографии сенсор сравнивает между собой и по смещению рисунков определяет направление и скорость движения мышки. При этом, минимальное расстояние, пройденное мышью, которое может физически зарегистрировать её сенсор – это расстояние, которое фиксирует по крайней мере ОДИН светочувствительный элемент. Т.е. при перемещении мышки на расстояние L сенсор может считать максимум N движений. Поэтому для мышек более правильным будет использовать аббревиатуру CPIcounts per inch, т.е. количество считываний на дюйм.

  Для тех, у кого по-прежнему возникают трудности с пониманием dpi/cpi, предлагаю внимательно проанализировать следующую картинку (Рисунок 2).

DPI = CPI!


"Цифровое" разрешение мыши

Современные методы сравнивания изображений позволяют определять параметры движения с субпиксельной точностью. Т.е. даже если на матрице изображение сместилось всего на один пиксель, сенсор может определить смешение на 5-10 пикселей! В сенсоре Pixart PMW3366, соотношение "один пиксель - одно считывание" выполняется лишь при 800 dpi. А максимальные для этого сенсора 12000 dpi достигаются его возможностью выдавать 16 считываний на один реальный пиксель.

При таком подходе, требования к качеству исходного изображения становятся еще более жесткими. Любой лишний "шумок" может катастрофически влиять на качество трекинга. Именно поэтому, для большинства сенсоров КАЧЕСТВО ТРЕКИНГА ЛУЧШЕ НА НИЗКИХ DPI. Почему так?

Если еще раз посмотреть на рисунок с разными линзами, можно заметить, что пиксели на матрице показаны либо полностью белыми, либо полностью черными. Это сделано для упрощения понимания dpi. В действительности все не совсем так. Вот как выглядит реальное изображение поверхности, полученное сенсором мыши (logitech g502, PMW3366):

Фотографии поверхности, сделанные сенсором PMW3366

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

Цифровое увеличение dpi
Математически такой алгоритм работает очень точно. Но в реальности у любого фотоэлемента есть "шум". Это значит, что интенсивность цвета на нем может случайно изменяться, даже если мышь вообще никуда не движется. И если заставить сенсор ловить самые маленькие изменения яркости (т.е. установить очень высокие значение DPI/CPI!), то сенсор может принять случайное изменение яркости вследствие шума за реальное движение!

Зачем нам высокие dpi?

Считывания, выдаваемые сенсором, обрабатываются операционной системой. При стандартных настройках указателя мышки в Windows одно считывание означает перемещение курсора ровно на одну точку на экране. А количество точек на экране зависит от разрешения монитора. Если разрешение экрана установлено 1920*1680, то мышь с 1600 dpi пройдет весь экран слева направо, если её передвинуть на 1920/1600=1.14 дюйма, т.е. всего за три сантиметра, а мышь с 3500 dpi – за 1.5 см! Т.е. ЧЕМ БОЛЬШЕ CPI (DPI) ТЕМ БЫСТРЕЕ МЫШКА БЕГАЕТ ПО ЭКРАНУ! И это, пожалуй, единственное явное преимущество высоких CPI – они позволяют комфортно водить мышкой по экранам с большим разрешением. Правда, для сегодняшних разрешений вполне хватает и 1000-3000 cpi.

В 3D играх каждое считывания обрабатываются немного по-другому: одно считывание означает поворот на некоторый заданный угол. Как правило, этот угол имеет такую величину, что для комфортной игры будет вполне достаточно и 400 dpi
.
Отметим, что в случае с мышкой Logitech MX518, минимальное расстояние, которое различит сенсор мыши при её перемещении будет равно L/N=1/DPI=1/1600 0,000625 дюйма, т.е. примерно 0,015 мм! В случае с Microsoft 3.0/1.1 (400 cpi) это расстояние будет равно 0,0625 мм. Очевидно, что чем больше CPI, ТЕМ СЛОЖНЕЕ навести мышку на конкретный пиксель на экране. Это похоже на прохождение гоночной трассы – вписываться в повороты легче на маленькой скорости (т.е. на малых CPI).

Отсюда мораль: ЧРЕЗМЕРНОЕ УВЕЛИЧЕНИЕ DPI ДЛЯ ПОЛЬЗОВАТЕЛЯ НЕ ИМЕЕТ НИКАКОГО СМЫСЛА.

Однако это совсем не значит, что мышки с высокими значениями dpi плохие. Скорее наоборот. Высокое значение dpi чаще всего означает, что в устройстве действительно установлен мощный сенсор. Другое дело, что даже для самых лучших сенсоров dpi лучше ставить поменьше. А производителям нужны продажи, вот они и делают упор на большие цифры, это привлекает покупателей.

Переключение dpi

Есть один момент. Многие мышки имеют кнопку переключения CPI. Что это значит? Допустим мы переключились с 1600 cpi на 800. В этом случае, сенсор просто будет пропускать каждое второе считывание. А если переключимся на 400 dpi – сенсор будет пропускать 3 считывания из четырех. Именно по этой причине, мы говорим именно о максимальном значении CPI (DPI) сенсора. Выше него, увы, сенсор правильно работать не может. Что будет, если мы захотим наши максимальные значения 1600 cpi превратить в 3200? Мышь просто будет «придумывать» считывания, лежащие между двумя «реальными» считываниями. И такое явление не редкость. Кроме того, изменение CPI также может происходить "программно", например при помощи программного обеспечения мыши. Но это происходит уже вне сенсора, и далеко не всегда благополучно сказывается на точности и скорости отклика сенсора.

Практический урок. SS Kinzu V2 и SS Kana

Как ни странно, обе мышки имеют один и тот же оптический сенсор PixArt PAW3305. Размер матрицы 32х32 элемента. Единственное, чем они отличаются – это линзой. В Кане она увеличивает изображение в два раза слабее. Что в итоге? Поскольку сенсор Каны видит в два раза больше поверхности, это позволило чуть ли не вдвое увеличить максимальную скорость движения, при которой сенсор все еще считывает движения. В случае с Kinzu V2 любое резкое движение просто опрокинет ваш прицел в пол. Но есть и обратная сторона медали. Поскольку сенсор Каны видит в два раза больше поверхности, согласно формуле CPI=N/L, получится, что его реальные CPI уменьшаться в два раза! И если у Кинзу максимальное значение CPI равно 3200, то у Каны оно становится равным 1600. Но производитель SteelSeries заявляет для Каны максимальное CPI такое же как и у Кинзу, т.е. 3200!!! Вот и получается, что сенсору приходится просто вставлять между каждыми своими реальными считываниями одно придуманное, что приводит к ужасной точности Каны на 3200 CPI. Такие вот маркетинговые дела.



ЧИТАЙТЕ ТАКЖЕ
какой сенсор мыши лучше? Часть 3-2. Проблемы PMW3310, S3988, PMW3366
время отклика кнопок мыши
анонс SteelSeries Rival 700