Как сделать стереографические фотографии

Создаём стереофото в домашних условиях!

Название «линзовый растр» знают немногие. Но видели его, я думаю, все. Вспомним переливающиеся под рифлёными пластиковыми поверхностями изображения – календарики, открытки, сувениры. Полосы на этом пластике образованы лежащими плотно друг к другу полуцилиндрами.

Изображение под линзовым растром состоит из полосок разных ракурсов изображения. Благодаря растру левый и правый глаз видят на одном и том же участке поверхности разные изображения.

Принцип действия линзового растра. Левый и правый глаз видят на одном и том же участке поверхности разные изображения

Принцип действия линзового растра. Левый и правый глаз видят на одном и том же участке поверхности разные изображения

Процесс создания стереофотографии в общих чертах достаточно прост.

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

А теперь, убедившись в том, что всё просто, давайте посмотрим, как оно на самом деле. Потому что каждый из обозначенных этапов процесса имеет свои особенности и тонкости, и лучше сначала семь раз отмерить, чем семь раз отснять и впоследствии убедиться, что отснятые снимки ни на что не годны.

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

Но для знакомства с технологией мы выберем что-нибудь попроще.

Сам процесс съёмки стереоракурсов может выполняться разными способами. Если это съёмка пейзажей и отдалённых объектов, камеру можно двигать прямолинейно, слева направо или справа налево, перемещаясь приставными шагами. В этом случае наше смещение в масштабах кадра невелико. Если же объект находится близко, перемещать камеру надо по окружности, центр которой находится внутри объекта. Иначе на втором-третьем кадре снимаемый объект просто исчезнет из поля зрения.

Величина смещения камеры в обоих случаях тоже не может быть произвольной: от неё зависят резкость итогового изображения, глубина резкости и размер картинки, который мы сможем напечатать.

В общем, перед началом съёмки желательно написать её сценарий и рассчитать все параметры съёмки с помощью программки MultiStereobase, которая входит в комплект поставки программы PhotoProjector Easy. Это программное обеспечение было любезно предоставлено мне его разработчиком – Евгенией Вазенмиллер.

Источник

О создании бюджетных стереоизображений на пальцах (стереограмма, анаглиф, стереоскоп)

Тема сегдоняшнего разговора — бинокулярное зрение, причём сегодня даже до ста строк кода не дотянем. Умея рендерить трёхмерные сцены, было бы глупо пройти мимо стерепар, сегодня будем рисовать примерно вот такое:

Как сделать стереографические фотографии

Безумие разработчиков Magic Carpet не даёт мне покоя. Для тех, кто не застал, эта игра позволяла делать 3Д рендер и в анаглиф, и в стереограммы в основных настройках, просто доступных в меню! Мозг это взрывало просто конкретно.

Параллакс

Итак, приступим. Для начала, благодаря чему вообще наш зрительный аппарат позволяет воспринимать глубину? Есть такое умное слово «параллакс». Если на пальцах, то давайте сфокусируем взгляд на экране. Всё, что находится в плоскости экрана, для нашего мозга существует в единичном экземпляре. А вот если вдруг муха пролетит перед экраном, то (если мы не меняем взгляда!) наш мозг её зарегистрирует в двух экземплярах. А заодно и паук на стене за экраном тоже раздваивается, причём направление раздвоения зависит от того, находится объект перед точкой фокуса или позади:

Как сделать стереографические фотографии

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

Давайте преставим, что наш экран — это окно в виртуальный мир 🙂

Как сделать стереографические фотографии

Наша задача — нарисовать две картинки с тем, что будет видно через это «окно». Картинок будет две, по одной на каждый глаз, на схеме выше я их показал красно-синим «бутербродом». Давайте пока не будем заморачиваться, как именно мы скормим эти картинки зрительному аппарату, нам нужно просто сохранить два файла. Конкретно меня интересует, как эти изображения можно получить при помощи нашего трассировщика лучей.

Ну, положим, направление взляда не меняется, это вектор (0,0,-1). Допустим, положение камеры мы можем сдвинуть на межглазное расстояние, что же ещё? Есть одна маленькая тонкость: конус взгляда через наше «окно» несимметричен. А наш рейтрейсер умеет рендерить только симметричный конус взгляда:

Как сделать стереографические фотографии

Что же делать? Читить 🙂
На самом деле, мы можем отрендерить картинки шире, нежели нам нужно, и просто обрезать лишнее:

Как сделать стереографические фотографии

Анаглиф

С общим механизмом рендеринга должно быть понятно, теперь самое время задаться вопросом доставки изображения до нашего мозга. Один из самых простых вариантов это красно-синие очки:

Как сделать стереографические фотографии

Мы просто сделаем два пре-рендера не цветными, а чёрно-белыми, левую картинку запишем в красный канал, а правую — в синий. Получится вот такая картинка:

Как сделать стереографические фотографии

Красное стекло отрежет один канал, а синее стекло отрежет другой, таким образом, глаза получат каждый свою картинку, и мы можем посмотреть на мир в 3D. Вот тут изменения к основному комиту первой статьи, которые показывают и установки камеры для обоих глаз, и сборку каналов.

Анаглифные рендеры — один из самых древних способов просмотра (компьютерных!) стереокартинок. У них много недостатков, например, плохая цветопередача (кстати, попробуйте в зелёный канал финальной картинки записать зелёный канал правого глаза). Одна польза — такие очки легко сделать из подручных материалов.

Стереоскоп

С массовым распространением смартфонов мы вспомнили, что такое стереоскопы (которые, на секундочку, были изобретены в 19м веке)! Несколько лет назад гугл предложил использовать две копеечные линзы (к сожалению, на коленке не делаются), немного картона (валяется повсюду) и смартфон (лежит в кармане) для получения вполне сносных очков виртуальной реальности:

Как сделать стереографические фотографии

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

Как сделать стереографические фотографии

Строго говоря, в зависимости от линзы, может понадобиться коррекция искажения линзы, но я вообще не заморачивался, и на моих очках и так выглядит отлично. Но если очень нужно применить бочкообразное пред-искажение, которое компенсирует искажения от линзы, то вот вот так оно выглядит для моего смартфона и для моих очков:

Как сделать стереографические фотографии

Стереограммы

А что же делать, если вообще не хочется использовать дополнительных приборов? Тогда вариант один — окосеть. Вообще говоря, предыдущей картинки вполне хватает для просмотра стерео, достаточно использовать трюк для просмотра стереограмм. Принципов просмотра стереограмм два: либо сдвигать глаза, либо раздвигать. Вот я нарисовал схему, на которой показываю, как можно смотреть на предыдущую картинку. Предыдущая картинка двойная, два красных штриха на схеме показывают два изображения на левой сетчатке, два синих — на правой.

Как сделать стереографические фотографии

Если мы сфокусируем взгляд на экране, то из четырёх изображений у нас получится два. Если скосим глаза к носу, то вполне возможно показать мозгу «три» картинки. И наоборот, если раздвинуть глаза, то тоже можно получить «три» картинки. Наложение центральных картинок и даст мозгу стереоэффект.

Разным людям эти приёмы даются по-разному, я, например, совсем не умею глаза сдвигать, зато с лёгкостью развожу. Важно то, что стереограмма построенная для одного способа, должна этим же способом и просматриваться, иначе получается инвертированная карта глубин (см. отрицательный и положительный параллакс). Проблема такого способа просмотра стерео в том, что очень сложно сильно сдвинуть глаза относительно нормального состояния, поэтому приходится довольствоваться маленькими картинками. А что делать, если хочется больших? Давайте полностью пожертвуем цветом, и захотим получить только восприятие глубины. Забегая вперёд, вот картинка, которую мы получим в конце этой части:

Как сделать стереографические фотографии

Эта стереогрмма создана для «разведения» глаз (wall-eyed stereogram). Тем, кто предпочитает обратный способ просматривания, картинку брать тут. Если вы не привыкли к стереограммам, попробуйте разные условия: картинка на полный экран, маленькая картинка, яркий свет, темнота. Задача развести глаза так, чтобы две соседние вретикальные полоски совпали. Проще всего фокусироваться на левой верхней части картинки, т.к. она плоская. Мне, например, мешает окружение хабра, я открываю картинку на полный экран. Не забудьте с неё убрать мышку!

Не довольствуйтесь неполноценным 3D-эффектом. Если вы только смутно осознаёте округлые формы посреди случайных точек наряду с некоторыми слабыми 3D-эффектами, это, конечно, неполная иллюзия! Если смотреть правильно, шарики должны явно выйти из плоскости экрана на зрителя, эффект должен быть стабильным и сохраняться благодаря постоянному и детальному изучению каждой части изображения, как переднего плана, так и фона. У стереопсиса есть гистерезис: как только удаётся получить стабильное изображение, оно становится тем яснее, чем дольше вы смотрите. Чем дальше экран от глаз, тем больше эффект глубины.

Эта стереограмма нарисована по методу, предложенному четверть века назад Thimbleby и др. в их статье «Displaying 3D Images: Algorithms for Single Image Random Dot Stereograms».

Отправная точка

Отправной точкой для отрисовки стереограмм является карта глубины (мы же забыли про цвет). Вот коммит, который рендерит вот такую картинку:

Как сделать стереографические фотографии

Глубины в нашем рендере обрезаны ближней и дальней плоскостями, то есть, самая дальняя точка в моей карте имеет глубину 0, самая ближняя 1.

Основной принцип

Пусть у нас глаза находятся на расстоянии d от экрана. Поместим (воображаемую) дальнюю плоскость (z=0) на том же расстоянии позади экрана. Выберем постоянную μ, которая определит положение ближней плоскости (z=0): она будет на расстоянии μd от дальней. Я в своём коде выбрал μ=1/3. Итого, весь наш мир живёт на расстоянии от d-μd до d за экраном. Пусть у нас определено расстояние e между глазами (в пикселях, в моём коде я выбрал 400 пикселей).

Как сделать стереографические фотографии

Если мы смотрим на точку нашего объекта, отмеченную на схеме красным, то два пикселя, отмеченных зелёным, должны иметь одинаковый цвет в стереограмме. Как найти расстояние между этими пикселями? Очень просто. Если текущая проецируемая точка имеет глубину z, то отношение параллакса к расстоянию между глазами равно отношениям соответствующих глубин: p/e = (d-dμz)/(2d-dμz). Кстати, обратите внимание, что d сокращается и более нигде не участвует! То есть, p/e = (1-μz)/(2-μz), а это означает, что параллакс равняется p=e*(1-μz)/(2-μz) пикселей.

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

Подготавливаем исходную картинку

В этом этапе мы подготовим картинку, на которую позже наложим ограничения параллакса.
Вот тут брать коммит, он рисует вот такую картинку:

Как сделать стереографические фотографии

Обратите внимание, что в целом цвета просто случайные, за исключением того, что я в красном канале положил rand()*sin, чтобы обеспечить периодические волны. Эти волны сделаны с расстоянием в 200 пикселей, это (при выбранных μ=1/3 и e=400) максимальное значение параллакса в нашем мире, оно же дальняя плоскость. Эти волны необязательны, но они облегчат нужную фокусировку зрения.

Рендерим стереограмму

Собственно, полный код, относящийся к стереограмме, выглядит вот так:

Если что, то коммит брать тут. Функция int parallax(const float z) даёт расстояние между пикселями одинакового цвета для текущего значения глубины. Мы рендерим стереограмму построчно, так как строчки независимы между собой (у нас нет вертикального параллакса). Поэтому основной цикл просто пробегает все строчки; для каждой из них мы начинаем с полного неограниченного набора пикселей, на который затем будем накладывать попарные ограничения равенства, и в итоге у нас окажется некое количество кластеров (несвязных) пикселей одного цвета. Например, пиксель с индеком left и пиксель с индексом right должны в итоге оказаться одинаковыми.

Как хранить этот набор ограничений? Самый простой ответ — union–find data structure. Её я описывать не буду, это и так только три строчки кода, можно прочитать в википедии. Основная мысль в том, что для каждого кластера у нас окажется некий «ответственный» за него, он же коренной, пиксель, его мы оставим того цвета, какого он был в исходной картинке, а все остальные пиксели кластера перекрасим:

Заключение

Ну, собственно, и всё. Двадцать строчек кода — и наша стереограмма готова, ломайте глаза и головы, рисуйте картинки! Кстати, просто случайные цвета в стереограмме — это вообще роскошь, в принципе, если постараться, то можно сделать и частичную передачу цвета нашей картинки.

Другие системы просмотра стерео, например, связанные с поляризацией, я вынес за рамки обсуждения, так как они выходят из бюджета ста рублей. Если что упустил, дополняйте и поправляйте!

Источник

Свои стереограммы в онлайн конструкторе

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

Рассмотрим самые популярные сервисы для этого.

Make your own Stereogram

1. PATTERN (Текстура для стереограммы)

Как сделать стереографические фотографии

Сохраните выбор текстуры щелчком по кнопке « Apply Chandes ».

2. MASK (Маска для стереограммы)

Как сделать стереографические фотографии

Выберете маску – черно белую картинку, которая формирует скрытый объем в стереограмме.

После выбора маски, нажмите на кнопку « Apply Changes ».

3. STEREOGRAM (получение готовой стереограммы)

Как сделать стереографические фотографии

Кликните по миниатюре стереограммы. После ее загрузки и просмотра сохраните на свой компьютер. Если вы что то захотите поменять в своей картинке, например выбрать другую текстуру, вернитесь назад, щелкнув по кнопке back в верхней правой части страницы.

Вот, что получилось у меня (кликните по картинке для увеличения):

Как сделать стереографические фотографии

3D Stereogram — нарисуй свою стереограмму

Как сделать стереографические фотографии

В панели инструментов конструктора в нашем распоряжении:

1. Размер кисти, которой вы будете рисовать по белому фону.

2. Жесткая и две разной степени мягкости кисти. К примеру, облака лучше рисовать мягкой кистью.

3. Яркость кисти. Помните, чем ярче точка на маске, тем ближе она к вам будет на стереограмме.

4. Две кнопки: Undo — отменить последнее действие, Redo – вернуть отмененное действие.

5. Выберете цвет текстуры вашей будущей стереокартинки а также ее яркость.

Вот, что получилось из моего детского рисунка (кликните по картинке для увеличения):

Как сделать стереографические фотографии

Может у вас получится лучше?

Желаю вам творческих успехов в этом увлекательном деле.

Источник

Создание стерео картинки

Как человек воспринимает объем? Чем ближе расположен рассматриваемый объект, тем больше наблюдатель «сводит» глаза. Т.о. если рассматриваемый объект расположен на бесконечно удаленном расстоянии, то глаза будут смотреть на него «параллельно».

Теперь рассмотрим как достигнуть иллюзию объема на плоской картинке. Итак, у нас имеется человек с двумя глазами (рис.1): левый глаз O1 и правый O2,а так же плоскость проекции стерео изображения D1D2. Пусть рассматриваемый объект B расположен на расстоянии h от наблюдателя. Тогда для того чтоб «увидеть» его на картинке необходимо совпадение рисунка в точках B1 и B2. Получается мы держим перед собой плоский рисунок и смотрим как бы «сквозь» него. Левый глаз видит точку B1, правый B2, изображения для них на листе совпадают и создается иллюзия того, что на самом деле мы видим объект B, расположенный за плоскостью листа. Т.о. чем больше расстояние между точками B1 и B2,в которых совпадает изображение, тем «дальше» воспринимается объект B.

Пожалуй теории пока достаточно, можно перейти к практике. Для этого понадобится Photoshop и 3dsMAX. В Photoshop’е создадим текстуру, из которой в последствии будет построено стерео изображение. Несколько рекомендаций: чем больше на текстуре деталей, тем лучше получиться окончательный вариант (с однотонными вообще ничего не получиться); высота текстуры должна совпадать с высотой изображения (поэтому сразу надо определить размер финального стерео изображения); а ширина зависит от того, где вы собираетесь в дальнейшем использовать полученную картинку. На рис.1 величина d_max как раз соответствует ширине текстуры, поэтому в реальности (на экране монитора или после распечатки) она не должна превышать расстояния между глазами a. В тоже время чем больше пикселей по ширине будет в исходной текстуре, тем более качественным получиться окончательный результат. У меня получилась вот такая текстура:

Ширина ее 100 пикселей, а высота 600 (в итоге рассчитываю получить стерео изображение размером 800 на 600 пикселей). Хотя лучше сделать ее так, чтоб она тайлилась по горизонтали. Далее создаем или открывает любой 3D-объект в MAX’е. Я для этого использовал модель осы:

Для результата не пригодятся ни материалы, ни сторонние рендеры, ни источники света. Поэтому если все это имеется в сцене, то назначаем на все стандартный материал, удаляем все источники света и используем Default Scanline Renderer. Теперь можно приступить к написанию скрипта. Для этого в меню Max’а выбираем MAXScript->New Script и откроется окно редактирование скриптов. Наш скрипт будет иметь свой собственный интерфейс. Это можно реализовать двумя способами: на панели Utilites или в отдельном окне. Выберем первый вариант и создадим новую скрипт-утилиту:

utility stereoImg «Stereo Image»

— утилита создания стерео изображения

Сохраним ее с названием stereoImg.ms и отправим ее на просчет. Для этого надо в меню редактора скриптов выбрать Tools->Evaluate All или нажать комбинацию клавиш Ctrl+E. После этого наша утилита приобрела свой интерфейс (рис.4) и единственное что можно с ней сделать – это открыть и закрыть.

Итак, список необходимых элементов: две группы Texture и Render. В группе Texture имеется метка, в которой будет отображаться информация о текстуре, и кнопка, запускающая диалог открытия файла с текстурой. В группе Render – спиннер (определяет ширину рендера), метка (информация о высоте рендера), спиннер (качество стерео изображения), индикатор процесса, кнопка выбора объекта и «самая главная» кнопка запускающая скрипт на просчет. Для этого в тело утилиты надо добавить следующие строки:

group «Texture:»

group «Render:»

В самом начале тела утилиты (перед описанием пользовательских элементов) определим локальные переменные, необходимые для создания стерео изображения:

— определение локальных переменных

Осталось прописать обработчики событий от элементов пользовательского интерфейса. Описание всех событий должно быть следующим образом: on do( ). Для начала опишем поведение MAX’а на нажатие кнопки загрузки текстуры. Что должно происходить: открыться окно диалога выбора файла, после выбора файла текстуры она загружается в MAX, выводиться на форму информация о размере текстуры и ее название, далее инициируются локальные переменные и настраиваются глобальные параметры рендера.

on b_T_img pressed do

height = T_img.height

l_R_h.caption = «height:» + height as String

renderHeight = height

Определим вид, который мы желаем получит на стерео изображении. Для этого нам понадобиться камера. Если в сцене уже имеются камеры с «нужным» видом – отлично, можно использовать их. Если нет, то необходимо создать камеру. Проще всего перейти к виду Perspective, где выбрать необходимый ракурс. После чего создать камеру из вида: в главном меню Create->Cameras->CreateCameraFromView или Crtl+C. Вспомним теорию, там были такие параметры как H – расстояние до максимально удаленного объекта и h_max – расстояние от плоскости проецирования до максимально удаленного объекта. Чтоб не вводить их вручную, будем брать их из свойства камеры, а именно из Clipping Planes. Выберем необходимую камеру, на панели Modify раскроем свиток Parameters, ставим галочку возле Clip Manually. Осталось только настроить Near Clip и Far Clip. Плоскость Near Clip соответствует плоскости проекции стерео изображения, а Far Clip – расстояние до максимально удаленного объекта. Рекомендации: объекты, по которым будет строиться стерео изображение, должна располагаться между Far Clip и Near Clip, Near Clip равно приблизительно половине Far Clip, объекты должны быть расположены подальше от Near Clip и вплотную к Far Clip. Хотя можно этим пренебречь и в дальнейшем экспериментировать с Clipping Planes, для получения более желаемого результата. Т.о. вид настроен, осталось «объяснить» скрипту, что мы будем работать с этой камерой, для этого напишем обработчик нажатия кнопки выбора камеры:

on pb_R_cam picked cam do

После этого ссылка на камеру содержится в pb_R_cam.object.Так же необходимо скрипту отреагировать на изменение пользователем ширины рендера:

on s_R_w changed val do

— обработка изменения ширины рендера

width = s_R_w.value

renderWidth = width

Осталось обработать последнее событие – нажатие «самой главной» кнопки. Опять придется заняться теорией на основе полученной ранее формулы: d/(h-H+h_max))=a/h. Здесь a, H и h_max – констаны. Последние две получаються из Clipping Planes камеры. Определим a, для этого подставим вместо h величину H – крайний случай, когда объект находиться на максимальном расстоянии. Отсюда a=d_max*H/h_max. И последняя формула: d=a*(h-H+h_max)/h – по ней вычисляется расстояние между точками d, изображения в которых совпадают, для того чтоб создавалась иллюзия, что рассматриваемый объект расположен на расстоянии h от наблюдателя.

on b_R_stereo pressed do

— просчет стерео изображения

DOF_img = render camera:pb_R_cam.object outputwidth:width outputheight:height channels:#(#zDepth)

— создание битмапы для будущего стерео изображения

OUT_img = bitmap (width+d_max) height color:black

— заполнение первой полосы текстурой

for x = 0 to (d_max1)do

for y = 0 to (height1) do

prb_R_status.value = 0

— отрисовка стерео изображения

— построчное построение стерео изображения

for y = 0 to (height 1)do

for x = 0 to (width 1) do

— берем из рендера глубины расстояние от камеры до ближайшей точки

dist = (getChannel DOF_img [x,y] #zDepth)[1]

prb_R_status.value =(100 * y / height) as integer

prb_R_status.value = 0

Потом идет построчное сканирование канала глубины (с проверкой на то, чтоб расстояние не превысило Far Clip камеры). На основе этой величины h (в скрипте dist) и полученных ранее формул вычисляется расстояние между повторяющимися пикселами. Таким образом идет построение стерео изображения, попутно обновляется прогресс вычислений. И в конце концов на экран выводиться окончательный результат (рис.7).

Ниже приведен полный листинг скрипт-утилиты с некоторыми улучшениями:

utility stereoImg «Stereo Image»

— утилита создания стерео изображения

— определение локальных переменных

group «Texture:»

group «Render:»

on b_T_img pressed do

height = T_img.height

l_R_h.caption = «height:» + height as String

renderHeight = height

on pb_R_cam picked cam do

on s_R_w changed val do

— обработка изменения ширины рендера

width = s_R_w.value

renderWidth = width

on b_R_stereo pressed do

— просчет стерео изображения

if (height == undefined) or (width == 0) then

messageBox «No texture or invalid size»

return 0

if pb_R_cam.object == undefined then

messageBox «Pick camera first»

return 0

DOF_img = render camera:pb_R_cam.object outputwidth:width outputheight:height channels:#(#zDepth)

— создание битмапы для будущего «расширенного» стерео изображения

— причем ширина умножается на точность

OUT_img = bitmap ((width+d_max)*prec) height color:black

— заполнение первой полосы текстурой

for x = 0 to (d_max1)do

for y = 0 to (height1) do

for i = 0 to (prec1) do

c2 = (getPixels T_img [x+1,y] 1)[1]

if c2 == undefined then c2 = (getPixels T_img [0,y] 1)[1]

prb_R_status.value = 0

— отрисовка «расширенного» стерео изображения

— построчное построение стерео изображения («расширенное»)

for y = 0 to (height 1) do

for x = 0 to (width 1) do

for dx = 0 to (prec 1) do

— берем из рендера глубины расстояние от камеры до ближайшей точки (тут тоже идет линейное сглаживание)

dist = (- (getChannel DOF_img [x,y] #zDepth)[1]*(precdx) (getChannel DOF_img [x,y] #zDepth)[1]*dx)/prec

prb_R_status.value =(100 * y / height) as integer

prb_R_status.value = 0

— получение из «расширенного» «нормальное» стерео изображение

for y = 0 to (height 1) do

for x = 0 to (width + d_max 1) do

c = black

for i = 0 to (prec1) do

prb_R_status.value =(100 * y / height) as integer

prb_R_status.value = 0

Изменение здесь только в алгоритме просчета стерео изображения. Добавилась проверка «от дурака»: просчет не начнется, если не была выбрана текстура и камера. Так же тут был реализован алгоритм «улучшенного» расчета стерео изображения с использованием спиннера «качество». В двух словах в чем это заключается: изображение сначала линейно растягивается и просчет ведется тоже «растянуто», а потом полученный результат сжимается до первоначального размера. Разницу можно увидеть на рис.7, рис.8, рис.9.

На рис.7 качество выставлено в единицу, а на рис.8 и рис.9 – 4 и 8 соответственно. Конечно чем выше качество, тем больше время просчета.

Вот и все. Теперь у нас имеется скрипт-утилита, с помощью которой можно из любого 3D-объекта получить стерео изображение. Очень надеюсь что урок был понятен (для этого надо дружить с геометрией 🙂 и полезен (по крайней мере тем, что можно действительно посмотреть свои модели «в объеме»).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *