Друзья, хочу поделиться опытом, который приобрел в процессе практического изучения дисциплины, как фотограмметрия. Буду рад, если кто-нибудь из вас выскажет свое мнение, поправит меня или укажет на ошибки, которые допустил. Возможно эта статья по изучению мною фотограмметрии поможет и будет полезна Вам. Моя работа описана на примере фотосъемки природы в городском парке, в Центральной полосе России, в период август–сентябрь 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).
Следующий этап работы включает в себя настройки фотоаппарата, камеры, изображения и подготовку необходимого оборудования для съемки.
- Объектив. Мой опыт и инструкция советует отдавать предпочтение объективам с фиксированным фокусным расстоянием: 35mm, 50mm, 85mm. При использовании объективов с переменным фокусным расстоянием, установите трансфокатор в одно из крайних положений (минимум или максимум). В противном случае каждый зум-объектив потребует отдельной калибровки. Вариативность моделей камер/объективов и значений фокусных расстояний рекомендую свести к минимуму.
- Настройка камеры: Предпочтительно использование снимков RAW формата, конвертированных в формат TIFF без сжатия, так как конвертация в формат JPG делает изображения более шумными, снижая их качество. Рекомендую осуществлять съемку с максимальным возможным разрешением. Значение ISO советую снизить до минимального, чтобы уменьшить шум. Для достижения достаточной глубины резкости рекомендую уменьшить значение диафрагмы, F-Stop 11+. Важно, чтобы все части объекта съемки были четкими, не размытыми. Скорость затвора должна быть достаточно высокой, чтобы предотвратить размытость, вызванную возможными движениями, желательно 1/125+.
- Изображения: PhotoScan оперирует исходными снимками. Не следует деформировать фотографий, то есть не следует масштабировать, обрезать, поворачивать или иным образом модифицировать исходные снимки.
- Что нам может еще пригодится: штатив, монопод, пульт дистанционного управления для фотоаппарата, поляризационный светофильтр, можно еще с собой взять небольшой хромакей (одноцветный фон) лучше подойдет синий цвет, вдруг нам захочется заснять небольшие объекты, и чтобы их отделить нам понадобиться фон, чтобы в последующем легко сделать маску для данных фотографий.
Этап съёмки
После нужной подготовки и выбрав благоприятный день, лучше всего подойдет облачная погода она самая благоприятная для фотосъемки, нам нужно нейтральное освещение, потому как при дальнейших действиях мы получим 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 который нам поможет выбрать настройки экспорта текстур для дальнейшего места их применения.
Вот что у нас было и вот то что мы быстро и без особых усилий получили.
И так подведем итог, такая дисциплина как Фотограмметрия очень интересная, нужная и может помочь здорово ускорить рабочий процесс, в создании объектов окружении (деревья, растения, камни и т.д.), предметов интерьера (микрофон, музыкальная колонка, кресло и т.д.), органика (человек, черепаха и т.д.), ландшафт и строения и т.д. Применение Фотограмметрии очень широко!
Ну, что же, друзья процесс завершен. Открыт к Вашим вопросам в личку и общению в опыте работ.
С наилучшими пожеланиями, Евгений А.
Автор: Baks1402