Основа затворного метода (PageFlip) - разделение вывода ракурсов по времени. Каждый полный кадр, выводимый на дисплей (монитор, проектор, телевизор,…), ставится в соответствие левому или правому ракурсу. Разделение происходит с помощью очков, которые синхронно затемняют один глаз (если в данный момент на экране выводится правый ракурс, то левый глаз должен быть закрыт, и наоборот).
В идеале очерёдность левых и правых ракурсов должна быть LRLRLRLRLR…, то есть после каждого левого ракурса должен выводится правый ракурс, после него снова левый и так далее. В этом случае инертность сетчатки нашего глаза позволяет ‘запоминать’ изображение для закрытого глаза на время, когда уже выводится изображение для другого глаза, и мы воспринимаем стереоизображение. Чем меньше интервалы закрытого состояния шторки очков - тем комфортнее просмотр.
Практической реализации этого метода сопутствует целая гора проблем, как технических, так и программных. Реализация очков не представляет особой сложности - это очки с жидкокристаллическими окошками, которые темнеют при подаче напряжения. Очки можно сравнивать:
- По размеру окошек/шторок (чем больше - тем лучше, лидером по прежнему является модель ‘Панорама’ от СТЭЛ).
- По прозрачности(падение яркости) в неактивном состоянии (не существует абсолютно прозрачных очков, поэтому очень часто рекомендуется повышать настройки яркости или гаммы на время просмотра стерео).
- По непрозрачности в закрытом состоянии (при неполном затемнении происходит взаимопроникновение ракурсов - гхост).
- По эргономическим параметрам (размеры, вес, способ крепления).
- По способу синхронизации (проводные и беспроводные).
Для управления любыми затворными очками необходим также контроллер. Контроллер выполняет функцию управления очками. За время существования очков было выпущено множество контроллеров разнообразного исполнения:
- Встроенный в видеокарту контроллер (профессиональные видеоадаптеры, топовые видеокарты ASUS Deluxe много лет назад).
- Переходник между видеокартой и монитором (eDimensional, X3D, СТЭЛ,…).
- Внешнее управление (COM, USB - NVIDIA 3DVISION).
Проблемы мониторов: ЖК и ЭЛТ
Контроллер выполняет очень важную функцию, как правило очки продаются неразрывно с контроллерами, хотя большинство моделей взаимносовместимы от различных производителей. Когда затворный метод впервые появился на рынке, он был предназначен для ЭЛТ мониторов (мониторы на электронно-лучевой трубке). Эти динозавры (называют их так потому что они были очень большими и практически вымерли) как нельзя лучше подходили для затворной технологии. При затворном методе частота вывода изображения очень важна - при частоте монитора в 120 герц каждый глаз будет видеть ракурс только с частотой 60 герц, что очень немного (наиболее комфортный уровень достигается при частоте 85 герц и выше). Естественный недостаток затворного метода - повышенная усталость глаз в следствие низкой частоты.
Однако на смену большим и нерасторопным ЭЛТ мониторам пришли ЖК мониторы (жидко-кристаллические). Эти тоненькие и лёгкие мониторы быстро завоевали рынок, как только их цена стала меньше ЭЛТ-аналогов. Но эта статья не о сравнении ЭЛТ и ЖК технологий в целом, в данном случае нас интересует только несколько принципиальных различий, которые стали причиной глубокого затишья на рынке затворного стерео.
В ЭЛТ-мониторе изображение рисуется каждый раз заново, а предыдущее ‘исчезает’ с некоторой очень малой задержкой, то есть между кадрами возникает небольшая прослойка времени чёрного экрана. В ЖК-мониторе изображение постоянно отображается. Поскольку основной целью повышения частоты обновления ЭЛТ мониторов была комфортность просмотра (превысить порог инертности сетчатки глаза, чтобы изображение не мерцало в следствии его постоянного затухания), то для ЖК-мониторов стандартом частоты обновления была выбрана частота в 60 герц. Нет мерцания - нет проблем и нет необходимости более высокой частоты, решили производители тогда. Если смотреть затворное стерео на ЭЛТ мониторе с частотой 60 герц, то на глаз мы получим всего 30 герц, что чрезвычайно мало!
Однако низкая частота обновления кадров вовсе не единственная проблема ЖК-мониторов. Как уже отмечалось выше - ЖК монитор не мерцает в принципе. Обновление кадров происходит попиксельно - то есть при поступлении сигнала цвет пикселя меняется на новый. Оказывается, время смены одного цвета на другой во-первых, очень велико (на первых моделях оно было значительно выше интервала между кадрами в 60 герц!), а во-вторых, зависит от перехода (то есть от текущего цвета и нового цвета). Таким образом, если бы обычный контроллер затворных очков подключить к обычному ЖК-монитору, то вместо полного ракурса для каждого глаза мы бы увидели полную кашу от разных ракурсов!
С развитием технологий скорость переключения пикселей была значительно повышена, но до сих пор недостижима реакция, аналогичная ЭЛТ мониторам. Решение проблемы медленных пикселей было найдено весьма простое - ‘умный’ контроллер теперь закрывает шторки очков не синхронно левый/правый, а с задержками открытия. То есть, по сути - очки теперь большую часть времени закрыты. Такой приём даёт некоторую ‘передышку’ медленным пикселям, давая им возможность переключиться на новый цвет. Поскольку 60 герц пополам = 30 герц мало даже даже для полноценного затворного стерео с ЭЛТ монитором, необходимо было выпустить новые мониторы с бОльшей частотой. И такие мониторы были выпущены - так называемые ‘стерео-совместимые’ 120-герцовые ЖК мониторы под эгидой NVIDIA (для поддержки их нового продукта - собственных затворных очков 3DVISION).
Таким образом, спустя нескольких лет затишья затворного стерео (когда ЭЛТ мониторы были практически убраны с рынка, а новых совместимых ЖК мониторов ещё не было), пользователи получили новые продукты. Необходимо учесть, что пониженное время открытия шторок не прошло бесследно - утомляемость глаз будет по прежнему высокой (и скорее всего выше чем на хорошем ЭЛТ мониторе со старым контроллером). Кроме того, используемые приёмы позволяют лишь частично решить проблемы медленных пикселей - при недостаточной калибровке задержек (необходима калибровка для каждой совместимой модели!!!) или отклонений в конкретном экземпляре монитора часть пикселей не будет успевать переключить цвет и как следствие будет возникать гхостинг (взаимопроникновение ракурсов).
Проблемы программной поддержки
Всё это время мы обсуждали проблемы мониторов, однако существует ещё более неприятная проблема, которая ‘боком’ выходит и для обычных потребителей. Дело в том, что прямая поддержка затворного стерео в программе весьма проблематична. Ведь программа, по сути, должна:
- просчитать два разных ракурса;
- поочерёдно выводить их на монитор до готовности новой пары ракурсов;
- сообщать контроллеру очков какой ракурс выводится на монитор в данный момент времени.
Наиболее оптимальным для программирования 3D-графики является поддержка стерео со стороны популярного API, а таковых сегодня только 2 - это мульти-платформенный OpenGL и Direct3D от Microsoft. Таким образом, задачу поддержки конкретного стерео-оборудования можно было бы переложить на плечи разработчиков драйверов.
И поддержка стерео была введена много лет назад, но только в OpenGL. Direct3D не предлагала никаких средств для ручной стерео-визуализации до выхода Windows 8. С точки зрения OpenGL, поддержка заключается в специальном режиме рендеринга - Quad Buffered stereo; в этом режиме создаётся 4ре буфера кадра. Если быстро просветить далёкого от технологий рендеринга (от слова render - рисовать), то изначально создавался только один буфер кадра. Буфер в данном случае - это картинка, которая должна отображаться на экране (например - окно приложения). Если буфер один, то его изменение в реальном времени отображается на экране монитора. Такое поведение сегодня бы вызвало вывод на экран огромного числа артефактов - промежуточных результатов просчёта. Для предотвращения вывода мусора на экран пришли к использованию двойной буферизации (Double Buffer). Теперь, один буфер предназначался для отображения на экране, а второй - для просчёта нового изображения; по окончании вычислений/обновлений поступает команда поменять буферы местами (после чего всё продолжалось по кругу). Quad Buffer по сути представляет из себя две пары двойных буферов, где один для левого ракурса а второй - для правого.
Поддержка стерео на уровне графической библиотеки - очень удобное решение. С точки зрения видеодрайвера, реализующего поддержку затворного стерео, ему в любом случае необходимо постоянно выводить на монитор новый кадр и при наличии левого и правого кадра - просто чередовать их (а также управлять контроллером очков, но об этом чуть позже)! Программисту необходимо лишь создать контекст с поддержкой квадробуфера и рисовать 2 ракурса самостоятельно - также, как он бы рисовал моно.
Звучит здорово, но возникает несколько проблем. Во-первых, принципиальная позиция производителей видеокарт - Quad Buffer только для профессионального сегмента. Таким образом, увидеть технологию в действии на домашнем игровом компьютере, даже с тандемом игровых видеокарт топового сегмента, попросту не получится - драйвер блокирует такие попытки (для любопытных, можете почитать информацию про softQuadro и softFireGL, впервые программную блокировку профессиональных возможностей в обычных игровых картах обнаружил автор программы RivaTuner). Во-вторых, квадробуфер недоступен для абсолютного большинства разработчиков игр, использующих в своих проектах API Direct3D от Microsoft. Ну и в-третьих, поддержка тех или иных стерео-устройств со стороны производителя видеокарт - не всегда самое оптимальное решение. Производитель может попросту отказаться от поддержки конкретного устройства или затребовать непосильную цену за её введение.
Увы, программисты, желающие управлять затворными очками на обычном домашнем компьютере остаются у разбитого корыта. Ещё одним потайным ключиком для поддержки стерео является так называемый стереодрайвер - некая надстройка над видеодрайвером, позволяющая осуществлять стереовывод. Именно таким решением долгое время пользуются игроки - стереодрайвер NVIDIA. Но это решение иного уровня - драйвер осуществляет стереовывод, управление стерео-устройствами, но НЕ позволяет формировать стереовывод программисту.
А к чему собственно говоря так нужна эта поддержка со стороны драйвера? Может всё гораздо проще и можно обойтись без него? Основной принцип затворного стерео - вывод на монитор левого, правого ракурсов по очереди. Обычный режим работы видеодрайвера - вывод буфера на монитор по готовности. В таком режиме, на мониторе могут появляться рваные кадры (когда на экран одновременно выводятся части предыдущего и следующего кадра). Этот эффект называют tearing, он особенно заметен при резких движениях в играх и в динамичных сценах фильмов. Сам по себе эффект не сильно мешает в играх (большинство игроков игнорируют этот дефект), однако для реализации затворного стерео эта проблема становится серьёзной - нельзя допустить, чтобы на мониторе одновременно выводилось сразу 2 ракурса.
Впрочем, эта проблема решается относительно просто - надо просто ‘сказать’ драйверу, чтобы он фиксировал кадровую развёртку на монитор с буфером рендеринга. Называется эта опция - Vsync (vertical synchronisation - вертикальная синхронизация). Не будем вспоминать добрыми словами различные реализации и НЕ реализации этого режима разными производителями на разных системах, возникает более серьёзная проблема. Дело в том, что в идеале вывод должен быть в соотношении один кадр на монитор=один ракурс, следующий кадр=следующий ракурс. Любая задержка (один кадр может просчитываться значительно дольше частоты развёртки монитора; задержки самого драйвера; планировщик системы, прерывания файлового ввода/вывода) приводит к тому, что один и тот же ракурс будет выводиться монитором несколько раз подряд. Бороться с этим со стороны пользовательского приложения практически невозможно. Именно поэтому для полноценного затворного стерео так необходима поддержка со стороны драйвера.
Давайте теперь рассмотрим, какие бывают контроллеры для затворных очков и можно ли ими управлять.
Контроллер NVIDIA
Данные контроллеры (NVIDIA) появились относительно недавно (2009 год). Первое что отличает изделие от контроллеров прошлого поколения, это способ подключения - USB, а также поддержка 120-герцовых ЖК мониторов (которые собственно говоря и выпускались для поддержки этого контроллера). Как уже было описано ранее, такая поддержка достигается серьёзными задержками открытия шторок. Коррекция задержек по всей видимости управляется драйвером с помощью некоторой базы данных.
Основное достоинство контроллера - это программная поддержка гиганта, впервые NVIDIA серьёзно взялась за поддержку стерео в играх и заявляет об этом направо и налево. Пользователи получают свежие стерео-драйверы в комплекте с обычными драйверами, поддержку современных игр на видеокартах NVIDIA. Увы, такая горячая любовь обошлась дорого владельцам старых устройств, которых лишили программной поддержки в драйвере NVIDIA.
Основной недостаток контроллера - его закрытость. Не существует никакого открытого интерфейса для управления, и поддержка контроллера для видеокарт других производителей и на операционных системах отличных от Windows Vista+ практически исключена. Как следствие - комплект можно использовать только в полноэкранном режиме. Кроме того, длительные периоды затухания очков приводят к тому, что мерцание наблюдается в первую очередь не на самом мониторе, а от окружающих источников света - которые и рекомендуется отключать. Взаимопроникновение ракурсов в новой технологии никуда не делось, но видоизменилось. На ЖК мониторах такие артефакты заметны на некоторых медленных цветовых переходах, что конечно гораздо приятнее нежели гхостинг на ЭЛТ мониторах (где появляется сильное двоение яркими источниками света при тёмном окружении), но также неидеально (на форумах по-прежнему можно прочитать сообщения о двоении ярких источников света и в некоторых других случаях). Зато можно смело запускать тёмную игру на своём 120герцовом ЖК-мониторе (если конечно не забыть о том, что на сегодняшних вариантах таких мониторов по-прежнему не бывает чёрного цвета - только серый, хотя очки могут это дело исправить…).
Встроенный контроллер
Контроллер, встроенный в видеокарту обладает как правило одним единственным выходом (кругленький) для подключения очков. Основное его преимущество - обеспеченная работа в режиме Quad Buffered stereo, для которого он и предназначен (большинство профессиональных приложений работы с 3D пишутся с поддержкой Quad Buffered stereo, но увы не игры).
Контроллер 3DS-PC3 от СТЭЛ
Данный контроллер отечественного производства (корпорация СТЭЛ), подключается как переходник между видеокартой и монитором. За время своего существования было выпущено уже несколько версий данного контроллера (насколько мне известно - 3 версии). Контроллер поддерживает несколько режимов работы и рассчитан исключительно на ЭЛТ мониторы. Поддерживаемые режимы (на входе контроллера / выходе видеокарты):
- Чистая переменная пара - управление очками происходит по синхро-сигналу вертикальной развёртки от монитора (активируется механической кнопкой на контроллере).
- Переменная пара с голубой линией - ракурсы должны быть помечены специальной голубой линией (режим появился в 3тьей версии контроллера).
- Over/Under - вертикальная стереопара на входе конвертируется в переменную; крайне неудачный режим - заставляет работать монитор с повышенной частотой, в два раза уменьшает вертикальное разрешение стерео-изображения, а также характерен вертикальными смещениями ракурсов.
В предыдущих версиях также присутствовал разъём для подключения внешнего управляющего сигнала. Во всех версиях присутствует кнопка реверса ракурсов - для исправления неправильной очерёдности ракурсов на входе.
Особый интерес представляет так называемая голубая линия. Этот режим не является изобретением СТЭЛ - он (а также его вариация - белая линия) использовался в некоторых контроллерах годами ранее. Суть метода заключается в добавлении к каждому ракурсу голубой линии в определённой позиции и определённой длины. Контроллер определяет эту пометку и закрывает нужную шторку. Однако данный способ вовсе не решает всех проблем - представьте себе, что частота монитора 100 герц, игра генерирует около 30 кадров в секунду - каждый кадр в игре будет показываться в среднем 3 кадра монитора (при отсутствии поддержки затворного стерео со стороны видео-драйвера). А это значит, что частота на каждый глаз серьёзно падает, и кроме того - она не постоянна. Таким образом, голубая линия может быть полезна только при высокой частоте кадров в игре или при поддержке контроллера в драйвере видеокарты.
Данные контроллеры можно использовать с профессиональными картами, со старыми стерео-драйверами NVIDIA для Windows XP а также со стерео драйвером iZ3D в экспериментальном режиме. Также интерес вызывает модель очков от корпорации СТЭЛ под названием ‘Панорама’, благодаря беспрецедентно большому размеру окошек.
Контроллер eDimensional
Контроллер подключается как переходник между видеокартой и монитором. Данные контроллеры (eDimensional) обладают интересными особенностями. Во-первых, в варианте с ИК-передатчиком поддерживаются беспроводные очки (в отличие от контроллеров СТЭЛ), во-вторых есть поддержка чересстрочного режима а в-третьих - начальная поддержка ЖК-мониторов. Поддерживаемые режимы:
- Чистая переменная пара - управление очками происходит по синхро-сигналу вертикальной развёртки от монитора (активируется специальным экранным кодом).
- Переменная пара с синхронизацией по DDC (специальный вывод на разъёме подключения монитора к видеокарте).
- Чересстрочный режим (активируется специальным экранным кодом).
Поддержка чересстрочного режима - входное изображение формируется соединением двух ракурсов, где каждая горизонтальная полоска толщиной в один пиксель поочерёдно соответствует правому и левому ракурсам - очень удобна с программной точки зрения. Несмотря на падение в два раза вертикального расширения, благодаря аппаратной поддержке чересстрочного режима ЭЛТ-мониторами (ЖК мониторы работают только в прогрессивном режиме - поэтому для них этот режим бесполезен), становится возможным использование затворных очков с автоматической синхронизацией ракурсов (никаких срывов), высокой частотой и относительно простой реализацией программной поддержки.
Начиная с некоторой версии, в контроллере появилась начальная поддержка ЖК-мониторов (активируется также специальным экранным кодом). Судя по всему, принцип работы специального режима - смещение по времени открытия затворов (как указывалось выше).
Данные контроллеры можно использовать с профессиональными картами, со старыми стерео-драйверами NVIDIA для Windows XP, со стерео драйвером iZ3D в экспериментальном PageFlip или чересстрочном режимах а также со стерео-драйвером собственного производства (который к сожалению не заслуживает внимания на сегодняшний день). Стоит заметить, что под другими торговыми марками продаются копии таких контроллеров, например X3D.
Самодельный контроллер
Разработка самодельного контроллера для затворных очков сегодня представляет сомнительный интерес (из-за проблем программной поддержки). Полезен он будет разве что для исследований. Тем не менее такие самоделки делаются.
Здесь вы сможете найти схему для сборки контроллера, синхронизируемого по DDC-сигналу (старая статья): Подключение стереоочков к любой видеокарте на процессоре от NVIDIA. Не обращайте внимание на название статьи - написана она очень давно, когда NVIDIA поддерживала затворные очки нескольких сторонних производителей в своих стерео-драйверах.
Вот здесь - миниатюрный контроллер с синхронизацией по Vsync (синхро-сигнал вертикальной развёртки монитора): Адаптер для затворных очков от kostasoft.
А вот схема, предложенная на форуме really.ru, позволяющая корректировать задержки (что необходимо для ЖК-мониторов):
Используете схемы на свой страх и риск.