Выбрать главу

Это могли придумать несколько веков назад. На CеBIT 2000 мы ехали еще без дисплея. Уже была готовая численная модель, и мы показывали макет: рассчитали картинки, распечатали их на струйном принтере и закрепили канцелярскими зажимами к разнесенным по глубине стеклам. Если рассматривать такую конструкцию с определенного расстояния на свет, то будет видна объемная картинка. Есть довольно смешные фотографии, как наши высокопоставленные чиновники разглядывали такой самодельный «дисплей».

Вы говорили, что между панелями установлена маска. Зачем она нужна?

— Маска — это диффузор. Она необходима для того, чтобы бороться с муаром. Муар-эффект наблюдается при наложении любых регулярных структур: заборов, сетки рабицы и т. п. Его можно наблюдать и дома: например, если посмотреть на тюль, сложенный вдвое.

На LCD-панелях есть различимая черная решетка: на экран наклеена непрозрачная пленка, в которой вырезаны маленькие отверстия по форме пикселов, а промежутки образуют сетку. И когда мы устанавливаем два экрана друг за другом, эти сетки накладываются и появляется муар. (Кстати, сейчас многие производители LCD-панелей создают трудности для нашей технологии: ради улучшения контрастности они увеличивают ширину черной маски между пикселами.) Поэтому мы и устанавливаем диффузор — это такая тонкая пленка, которая слегка размывает изображение с заднего экрана и тем самым убирает тонкие полоски черной межпиксельной решетки. В результате остается только одна сетка (на переднем экране), а значит, решается проблема муара. Кроме того, диффузор значительно увеличивает угол обзора.

А как вы рассчитываете изображения для экранов?

— Для этого решается задача, аналогичная компьютерной томографии. У нас есть стереопара — то есть два изображения, соответствующие тому, что должен видеть каждый глаз. И надо так подобрать картинки для переднего и заднего экранов, чтобы при проецировании они складывались в заданную стереопару. Решение этой задачи — сложная математическая проблема[Здесь возникает так называемое уравнение Фредгольма первого рода. Эта задача некорректна, а ее решение неустойчиво]. Поэтому было решено использовать нейронные сети. Каждому пикселу ставится в соответствие по нейрону, а связи и весовые коэффициенты вычисляются из соображения геометрии прохождения лучей. Нейроны связаны тогда и только тогда, когда через соответствующие им пикселы проходит луч, попадающий в левый или правый глаз. Коэффициенты же подбираются в соответствии с характеристиками используемых LCD-панелей и диффузора.

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

И сколько длится просчет одного кадра?

— Сначала алгоритм был реализован на CPU, и расчет одного кадра занимал не меньше двух минут. На современных процессорах все равно будет порядка одной минуты. В любом случае, для приложений реального времени это слишком много.

Лет шесть назад мой коллега, старший научный сотрудник Института высокопроизводительных вычислительных систем РАН Евгений Епихин заметил, что графическая карта имеет более мощный процессор, чем популярный тогда Pentium. В результате мы стали думать, как использовать GPU для нашей задачи. Оказалось, что при использовании нейросети задача идеально ложится на графический процессор. Довольно быстро мы смогли добиться гораздо более высокой производительности системы (около пятнадцати кадров в секунду).

Подождите, но ведь 2000 год — это максимум второй GeForce. А значит, ни о каких шейдерах и речи не шло?

— Конечно, пиксельных шейдеров тогда еще не было. Но нам удалось обойтись и без них. Мы воспользовались структурой предложенной системы, которая позволила представить трехмерный объект в виде суперпозиции двухмерных изображений. А для работы с плоскими объектами нам хватило стандартных операций с текстурами. Таким образом, мы «подручными средствами» смоделировали действие нашей нейронной сети. При этом получается огромный выигрыш по скорости, поскольку все операции выполняются на GPU, который именно под эти операции и оптимизирован.