Друзья, хочу поделиться опытом, который приобрел в процессе практического изучения дисциплины, как фотограмметрия. Буду рад, если кто-нибудь из вас выскажет свое мнение, поправит меня или укажет на ошибки, которые допустил. Возможно эта статья по изучению мною фотограмметрии поможет и будет полезна Вам. Моя работа описана на примере фотосъемки природы в городском парке, в Центральной полосе России, в период август–сентябрь 2017 г.

Итак, начнем с самого начала: прочитав и просмотрев определенное количество информации по данной тематике, я выбрал программу Agisoft PhotoScan, которая помогает получить 3d модели, текстурированные на основе исходных изображений. Взяв на вооружение инструкцию от Agisoft PhotoScan — по правильной фотосъемке, правил которой, нужно придерживаться, чтобы получить наилучший результат. Известно, что существует множество программ по данной тематике: Photoscan (Agisoft), 123D Catch (Autodesk), ReCap360 (Autodesk), Arch3D (Epoch project), Bundler/PMVS2, Apero/MicMac, 3DF Zephyr (3DFlow), Photomodeller scanner (EOS systems), Smart3D (Acute3D).

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

  1. Объектив. Мой опыт и инструкция советует отдавать предпочтение объективам с фиксированным фокусным расстоянием: 35mm, 50mm, 85mm. При использовании объективов с переменным фокусным расстоянием, установите трансфокатор в одно из крайних положений (минимум или максимум). В противном случае каждый зум-объектив потребует отдельной калибровки. Вариативность моделей камер/объективов и значений фокусных расстояний рекомендую свести к минимуму.
  2. Настройка камеры: Предпочтительно использование снимков RAW формата, конвертированных в формат TIFF без сжатия, так как конвертация в формат JPG делает изображения более шумными, снижая их качество. Рекомендую осуществлять съемку с максимальным возможным разрешением. Значение ISO советую снизить до минимального, чтобы уменьшить шум. Для достижения достаточной глубины резкости рекомендую уменьшить значение диафрагмы, F-Stop 11+. Важно, чтобы все части объекта съемки были четкими, не размытыми. Скорость затвора должна быть достаточно высокой, чтобы предотвратить размытость, вызванную возможными движениями, желательно 1/125+.
  3. Изображения: PhotoScan оперирует исходными снимками. Не следует деформировать фотографий, то есть не следует масштабировать, обрезать, поворачивать или иным образом модифицировать исходные снимки.
  4. Что нам может еще пригодится: штатив, монопод, пульт дистанционного управления для фотоаппарата, поляризационный светофильтр, можно еще с собой взять небольшой хромакей (одноцветный фон) лучше подойдет синий цвет, вдруг нам захочется заснять небольшие объекты, и чтобы их отделить нам понадобиться фон, чтобы в последующем легко сделать маску для данных фотографий.

Этап съёмки


После нужной подготовки и выбрав благоприятный день, лучше всего подойдет облачная погода она самая благоприятная для фотосъемки, нам нужно нейтральное освещение, потому как при дальнейших действиях мы получим 3d модель c текстурой и выставим в нужное освещение, конечно можно и отснять объект в солнечную погоду — если вам нужна, только 3d модель и в данном случае текстуру можно будет поправить в Photoshop, но это дополнительные манипуляции, об этом способе напишу дальше.

Отправляемся в лесной парк или в то место где находится нужный нам объект. Итак, приехав на место съёмки, старался найти более интересные объекты с ярко выраженной фактурой. Природа создает по своей красоте и форме такие экземпляры с неповторимым колоритом, узором от которых невозможно оторвать взгляд, наша задача состоит в том, чтобы позаимствовать всё это великолепие и перенести в наш 3d мир. Приступим к фотосъемке.

Для осуществления процесса фотосъемки необходимо, снимая каждый последующий кадр обеспечить перекрытие между кадрами примерно 60%, именно эти 60% будут формировать нашу модель с текстурой. Разрешение желательно максимальное, какое может позволить ваш фотоаппарат, нужно обойти объект полностью, т.е. совершить обход 360% и сделать примерно 36 снимков на 1 круг, кругов съемки может быть несколько. Повторюсь, ни в коем случае не нужно зумить, если нужно зафиксировать какие-то детали, то нужно подойти ближе, присесть или прилечь, чтобы сделать нужный снимок. Если у объекта есть вогнутости и выпуклости, и съемка ведется только стоя и снизу объект не снимается, то тогда в некоторых местах, которые смотрят «нормалями» в землю и не попадают в кадр, в этих областях будут дыры на 3d модели и соответственно отсутствовать текстура, такие моменты мы поправим дальше в программах, но лучше этого избегать с самого начала. Должен заменить еще важный момент, стремитесь, чтобы не попадали веточки и трава в кадр, которые находятся возле корней и у основания нужных нам объектов, потому что в последующем эти объекты отпечатаются на нашей текстуре, и мы будем ее чистить, что в некоторых случаях неизбежно. Я нашел вот этот интересный пень.



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

Обработка фотографий и создание 3d модели


Многим известно, что есть программы по редактированию Raw форматов одни из них, CameraRaw и Lightroom, я остановился на Lightroom.

Далее импортируем все наши Raw снимки в Lightroom и совершаем следующие настройки. Highlights понижаем, а Shadows повышаем, убираем хроматическую аберрацию и искажение линзы. На основе настройки одной фотографии создаем Preset, чтобы в дальнейшем ускорить процесс обработки фотографий, их может быть разное количество от нескольких десятков до нескольких тысяч, в зависимости какая у вас задача и сколько у вас объектов съёмки.



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



Добавляем фотографии


Открываем Agisoft PhotoScan и добавляем наши фотографии. Для достижения наилучших результатов, необходимо закрыть маской все второстепенные объекты на исходных фотографиях. Создаем маски вокруг объекта, маски можно создать разными путями в PhotoScan Lasso и потом добавить выделение или в Photoshop так же Lasso tool, но еще создать Actions, чтобы пропустить рутинный процесс создания маски, добавления ее в канал и сохранения файла. Если проводили съемки в студии и у вас был однородный фон, то вам нужно зайти в Tools / Import mask и применить метод From Background к выбранным камерам. Можно вообще обойтись без создания масок, но это усложнит процесс.





Выравнивание фотографий


На этом этапе PhotoScan определяет положение камер и строит разреженное облако точек на основании фотографий.



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

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

Алгоритм оценки качества изображения анализирует контраст между пикселями, когда есть много контраста, тогда изображение воспринимается как хорошие. Единственный способ убедиться, что все ваши изображения нормальные, визуально проверить их на 200% зума. Ужасно скучная работа. Самые плохие изображения те, которые сильно размыты, можно отключить.



Следующим действием выделяем наш объект инструментом Selection и нажимаем Crop и так чистим наш объект. Клавиша Space помогает нам переключаться между инструментами, например, выделение и навигацией.



Задание области построения


Откорректируем Box, в этом на поможет NumPad он дает возможность переключаться между камерами, перспективой и ортогональной проекцией.



Построение плотного облака точек


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

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



Вот что у нас получилось.



После небольшой чистки объекта инструментами выделения мы получаем вот такой результат.



Построение полигональной модели


Теперь на основании полученного плотного облака точек можно построить трехмерную полигональную модель.
Тип поверхности: Карта высот.
Исходные данные: Плотное облако.
Количество полигонов: Высокое (в скобках рядом со значением параметра
указано максимальное число полигонов в модели, которая будет построена.
Значения, предлагаемые программой, рассчитываются на основании данных
о количестве точек в плотном облаке).
Интерполяция: Включена (по умолчанию).
Вот наш результат 3d модели







Редактирование полученной геометрии


Выбираем Edit и нажимаем Gradual Selection, выделятся красным цветом все отдельные кусочки геометрии, которые нам нужно удалить.



После этого нам нужно закрыть все отверстия в нашем объекте, для этого выбираем Tools, Mesh, Close Holes.



Экспорт модели




Теперь экспортируем нашу модель в Zbrush для дальнейшего редактирования.

Создаем low-poly модель


Импортируем модель в Zbrush и дублируем,



применяем команду Zremesher и экспортируем в Maya.



Импортируем модель в Maya выполняем операцию Extrude и экспортируем обратно в Zbrush.



В Zbrush применяем операцию DynaMesh и Zremesher,





экспортируем в Maya и удаляем не нужные полигоны. Конечно можно сетку low- poly еще доводить ручками и сократить еще полигоны, но сейчас я этого делать не буду. Если у вас есть желание, то можете попробовать и написать о результате, все файлы я прикреплю к статье.



Экспортируем в UVLayout и создаем UV развертку.

Создаем текстуру цвета


Импортируем low-poly с готовой UV- разверткой в Zbrush и выполняем команду ProjectAll, dist. нужно повысить и с каждым разом понижать что бы не было артефактов, тут же в Zbrush запекаем Displacement map. Экспортируем полученную после Project High-poly.





Открываем PhotoScan и удаляем модель на ее место через меню Tools импортируем полученную High-poly модель.





После того как импортировали модель, создаем текстуру в формате Tif и экспортируем ее.



Открываем текстуру в Photoshop и Magic wand Tool нажимаем на участок где отсутствует текстура и на этом месте черное пятно.



Выбираем инструмент Lasso и в меню Edit выбираем команду Fill, заливка с учётом содержимого (Content-Aware Fill).



Вот что у нас получилось, буквально несколько секунд и текстура готова.



Конечно можно пойти другими способами, например, Stamp и ручками закрашивать все пробелы. Так же можно при помощи других программ, например, 3D – Coat, импортировать High-poly и текстуру цвета в и инструментом Stamp закрасить нужные места на текстуре, такие же манипуляции можно повторить и в Substance Painter, так же можно в Zbrush инструментом DraqRect, но это все долго и возможно в какой-то ситуации именно так и нужно будет пойти одним из этих путей.

Запекание и создание текстур


1. Запускаем Substance Painter, создаем новый проект, подгружаем low- poly с готовой UV- разверткой, после создания проекта переходим в меню TextureSet Settings и нажимаем Bake textures. В окне запекания убираем не нужные нам карты, подгружаем High-poly из PhotoScan. Запеченные карты будут автоматически вставлены в соответствующие слоты в настройках TextureSet.



2. Следующим этапом мы заменим нашу low- poly модель на High- poly. для того чтобы при генерации дополнительных текстур таких как specular, roughness и др. мы могли отчетливо просматривать нужную нам текстуру.



3. Генерируем нужные нам карты, так как текстурирование по каналам очень увлекательное занятие, вместе с различными фильтрами и очень гибкими генераторами, которые нам очень сильно помогут в этом и ускорят весь рабочий процесс получения нужных текстур. Например, создаём слой заливку (Add fill layers), заливаем нужным цветом или текстурой, отключаем все не нужные каналы, к слою заливка подключаем маску черную или белую, генераторы, фильтры, в общем творчество Вам в руки.

4. После получения нужного результата мы можем создать Smart materials, для того чтобы в последующем не повторять одни и те же действия, ведь мы стремимся облегчить и ускорить рабочий процесс, так как время — это ресурс который не вернуть и не купить.

5. Когда мы полностью довольны полученным результатом, можем экспортировать все нужные нам текстуры в различные рендеры/движки для дальнейшей визуализации. В Export document есть Config который нам поможет выбрать настройки экспорта текстур для дальнейшего места их применения.

Вот что у нас было и вот то что мы быстро и без особых усилий получили.



И так подведем итог, такая дисциплина как Фотограмметрия очень интересная, нужная и может помочь здорово ускорить рабочий процесс, в создании объектов окружении (деревья, растения, камни и т.д.), предметов интерьера (микрофон, музыкальная колонка, кресло и т.д.), органика (человек, черепаха и т.д.), ландшафт и строения и т.д. Применение Фотограмметрии очень широко!

Ну, что же, друзья процесс завершен. Открыт к Вашим вопросам в личку и общению в опыте работ.

С наилучшими пожеланиями, Евгений А.

Материалы

Комментарии (22)


  1. engine9
    06.10.2017 00:04

    Сканировал объективами 85 мм и 100 мм объекты многометровых масштабов: здания, целые районы города. Так же очень мелкие объекты, вроде древних пуговиц, потускневших монет. Алгоритм «собирал» снимки в модели без особых проблем.


    1. ibragim_pascal
      06.10.2017 14:04

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


      1. thelongrunsmoke
        06.10.2017 14:11

        Используя ряд синхронизированных камер, теоретически, возможно.


      1. Baks1402 Автор
        06.10.2017 14:13

        Добрый день, можете, пример


  1. thelongrunsmoke
    06.10.2017 12:51

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


  1. LbG0tHNk
    06.10.2017 14:13

    Скажите пожалуйста, а можно ли эту технику использовать для рендеринга супер мелких предметов, например червей и паразитов снятых на микроскоп? Думаю будут проблемы с поворачиванием этих друзей для разных POV (тем более в той же позе). Кто-нибудь сталкивался с таким? Какие-нибудь советы\рекомендации?


    1. Baks1402 Автор
      06.10.2017 14:22
      +1

      Нужно пробовать, а поворачивать не самого червя, а то на чем он лежит.


    1. Akon32
      06.10.2017 14:29

      Они же плоские и прозрачные? Наверно нужны будут несколько другие алгоритмы, чем для объёмных тел.


    1. engine9
      06.10.2017 17:58

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


  1. moooV
    06.10.2017 15:35
    +1

    Работаю уже третий год на японскую студию сканирования (avatta.net) — перепробовали вообще весь доступный софт. Так вот, быстрее и _качественнее_, чем RealityCapture нет ни чего.
    Да, он очень дорогой и у них он куплен, но только он выдает что-то приемлемое на реальных задачах (что все равно надо чистить потом в браше). На втором месте Photoscan, но он уже практически непригоден.


    1. engine9
      06.10.2017 17:59

      А под линукс совсем ничего нет из бесплатного? Даже при наличии «идеальных» фотографий?


      1. moooV
        06.10.2017 18:47
        +1

        Вся индустрия по части создания контента windows-only. Линукс используется только на рендер-фермах, где ему и место.
        Некоторый софт, конечно, дублируется нативно под макос/лин — мая, нюк, катана, движки рендера (используем Arnold), но на этом, скорее, все. Ну и версии обычно не первой свежести, даже официальные. А крякнутых ждать под линь еще дольше, так что нафиг нужно.
        Про фотограмметрию вообще сказать не могу, тк даже не рассматривался линукс, когда тестировали программы.

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


      1. pav5000
        06.10.2017 19:19

        Из бесплатного ещё есть OpenMVS. Качество будет не топовое, но бесплатно, опенсорсно и автоматизировать легко.


        1. engine9
          09.10.2017 12:30

          Спасибо!


    1. Dark_Daiver
      06.10.2017 18:54

      Если не секрет, чем ретоположите сканы головы/тела? (Если ретоположите)


      1. moooV
        06.10.2017 19:01

        Макс, браш, материалы и рендер — мая+арнольд, сборка шотов — нюк.


        1. moooV
          06.10.2017 19:13
          +1

          Но нужна адовая доработка напильником даже после realitycapture. Photoscan уже создает на порядок больше работы — просто на грани сигнал/шум.
          Вот прямо сейчас (пока рендерится превьюшка, пишу на хабр) делаю проект.

          Что пришло от реконструкции в RC и что надо чистить:


          Что получается после длительного процесса чистки, рисования текстур, настройки материалов, сборки сцены, итд (чуть больше месяца):


          Полностью рендер не публикую по соображениям нда. Его конкретно не оговаривалось, но на всякий случай.


          1. Dark_Daiver
            06.10.2017 19:22

            Вроде не так уж плохо. На удивление хорошие брови. Забавно, что много ереси на губах и на шапке. Есть идеи почему так?
            Опять же, если не секрет, стараетесь ли привести каждый скан к одной и той же топологии?


            1. moooV
              06.10.2017 19:44

              Брови убираются нафиг и делаются новые волосами.

              Губы — блестящая поверхность, с этим даже RC не справляется.
              Прислали мне однажды сканы трех девочек в глянцевых платьях — там от платьев почти ни чего не осталось, одни дыры. В итоге я бОльшую часть этих долбаных платьев моделил с нуля.

              как вставить видео не нашел, так что ссылка

              Глянец — бич фотограмметрии.

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

              Топология одна и та же, тк в основном мне присылают девочек.


              1. Dark_Daiver
                06.10.2017 19:51

                >Губы — блестящая поверхность, с этим даже RC не справляется.
                Я как-то забыл о существовании помады. Просто на тех сканах, что делались при мне проблем с губами не было, но то были сканы мужиков.

                Если текстура не нужна, то есть крутая тема с детской присыпкой =) Даже при не особо хорошем освещении/малом числом камер получается неплохо


                1. moooV
                  06.10.2017 19:53

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


              1. pav5000
                09.10.2017 12:32

                Я думал, лицо пудрят какой-нибудь очень матовой пудрой, чтобы ничего не бликовало.