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

В контексте 3d-моделей фотограмметрия — это процесс создания 3D-моделей из отсканированных объектов.

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

Используя фотограмметрию, мы берём входящие данные, то есть фотографии, и пропускаем их через конвейер или набор обрабатывающих их методов. Данные из этих процессов или выходной информации участвуют в создании готовой 3D-модели.


В этом туториале мы используем несколько фотографий статуи дракона для создания детализированной 3D-модели, подчистим её в Blender и импортируем результат в тёмную и мрачную сцену деревни викингов.

Также вы научитесь:

  • Выбирать хороший объект для фотосканирования.
  • Делать подходящие фотографии.
  • Решать, когда и где делать фотографии.
  • Убирать плохие фотографии.
  • Использовать Meshroom для создания 3D-сканов.
  • Импортировать модели в Blender для очистки и ретуши.
  • Уменьшать количество полигонов.
  • Подготавливать и импортировать 3D-модели в Unity.



Приступаем к работе


Примечание: для выполнения фотосканирования в Meshroom за разумное время требуется довольно мощный компьютер.

Скачайте материалы проекта. Далее распакуйте файл zip в удобное для вас место.

Архив содержит файлы проектов Starter и Final, до которых мы доберёмся позже.

Примечание: нужно будет скачать ещё один файл, но подробнее об этом ниже.

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

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

Поиск хороших объектов для съёмки


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

  • Плоские основания.
  • Достаточная контрастность цветов или оттенков.
  • Не слишком тёмные, иначе будет сложно различить детали.
  • Не слишком большие, иначе будет сложно обходить объекты и снимать их с разных углов.

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

Хорошим примером этого являются камни из The Tales Factory в Unity Asset Store.


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


Что касается фотографий, то есть определённые условия и время суток, позволяющие создавать качественные фотосканы.

Если у вас есть студия в помещении и освещение, то можно смоделировать эти условия самостоятельно. Если их нет, то придётся работать на открытом воздухе.

При работе на открытом воздухе помните о следующем:

  • Делайте фотографии при дневном свете.
  • Лучше всего подходит пасмурное небо. Облака рассеивают освещение, что приводит к более равномерному распределению света по модели.
  • Сухость — это хорошо, влажность — это плохо! В условиях влажности вы, скорее всего, получите больше отражений на готовом результате. В некоторых случаях на 3D-модели даже будут яркие блики, разрушающие реализм.

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

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

Съёмка фотографий


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

Скачать фотографии скульптуры дракона (файл zip, 695 МБ)

Далее извлеките файл zip в удобное для вас место и откройте папку. Вы увидите примерно 100 фотографий скульптуры дракона, сделанные с разных углов и высот.


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

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

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

Настройки камеры


Чтобы получить однородно выглядящий набор фотографий, переключите камеру в ручной режим или режим pro. Большинство камер смартфонов позволяют переключаться в этот режим, а DSLR-камеры всегда имеют ручной режим или режим M.

  • Сначала установите режим Fixed для ISO. Эта настройка изменяет чувствительность датчика цифровой камеры к освещению. Чем выше значения, тем проще делать фотографии в темноте, но они получаются более шумными. При хорошем освещении на открытом воздухе обычно можно устанавливать значение 100 или 200. Для фотосканируемых изображений всегда выбирайте фиксированное значение.
  • Если вы новичок в фотографии, используйте режим фиксированного затвора или фиксированной апертуры. Иногда они называются режимами Priority. Это помогает зафиксировать один из параметров, позволяя камере управлять другими параметрами для сохранения равномерной выдержки. Это тоже делается для получения хорошо освещённых фотографий.
  • При съёмке фотографий они всегда должны быть в фокусе. Избегайте размытых изображений.
  • Всегда делайте снимки в одной ориентации, альбомной или портретной.


Для полудня и пасмурного освещения в этой ситуации подошло фиксированное значение ISO 200.

Создание фотосканов при помощи Meshroom


Meshroom — это open-source-приложение для фотограмметрии, которое можно использовать для создания 3D-моделей из фотографий. Мы будем использовать его для создания фотоскана скульптуры дракона.

Скачайте последнюю версию отсюда и установите её. Для запуска ПО потребуется Windows или Linux.

После запуска Meshroom вы увидите основной интерфейс. В этом режиме можно делать всё необходимое для создания фотосканов.

Вот краткое описание каждой части основного интерфейса:


  1. Сюда перетаскиваются фотографии, которые нужно воссоздать в 3D.
  2. Image Viewer — это просто окно предварительного просмотра для отдельных фотографий.
  3. После начала процесса в окне 3D Viewer будут отображаться результаты воссоздания объекта. Также в нём демонстрируются различные углы, под которыми сделаны фотографии, на основании метаданных, полученных программой из изображений.
  4. В Graph Editor отображается конвейер процессов, выполняемых приложением для воссоздания объекта в 3D. Каждый этап представлен узлом (нодом, Node). На каждом этапе происходит серия вводов и выводов с обработкой. Фотографии проходят через этот конвейер, а результат каждого этапа передаётся на следующий этап.
  5. В окне Node можно получить доступ к подробностям отдельных нодов в Graph Editor. Здесь можно изменять настройки каждого нода, но в рамках нашего туториала достаточно будет настроек по умолчанию.

Импорт фотографий в Meshroom


Перейдите к скачанным фотографиям скульптуры дракона. Затем перетащите их в окно Images приложения Meshroom.

Фотографии в порядке имён файлов отобразятся в окне Images.


Далее нажмите на File ► Save As…, выберите новое расположение папки на диске и сохраните проект как Dragon.mg.


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

Начинаем процесс воссоздания Meshroom


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


Пока процесс выполняется, можно отслеживать ход его выполнения в окне Graph Editor. Обратите внимание на небольшие цветные индикаторы выполнения на каждом ноде. Процессор вашего компьютера, скорее всего, достигнет завершения через 15-30 минут, это зависит от его скорости.


После завершения полученный скан отобразится в окне 3D Viewer.


Теперь зажмите левую клавишу мыши и перетаскивайте курсор, чтобы вращать модель или среднюю клавишу мыши и перетаскивайте курсор для панорамного перемещения камеры в окне 3D-вида. Насладитесь 3D-моделью, которую помог создать ваш процессор!


Далее откройте папку, в которую сохранили файл проекта Meshroom. В ней вы найдёте папку MeshroomCache. Именно сюда выводились файлы отсканированного объекта.


Импорт в Blender


Далее мы воспользуемся популярным приложением создания 3D-графики для импорта скана 3D-модели дракона и его очистки, чтобы подготовить импортировать в Unity.

Если у вас нет Blender версии 2.80 или выше, то скачайте и установите его. Скачать его можно здесь.

После завершения установки запустите Blender.

Если вы новичок в Blender, то ничего не бойтесь и расслабьтесь! Хотя его интерфейс и управление могут сбивать с толку, здесь вы найдёте многие полезные для нас сочетания клавиш и скриншоты.

После открытия экрана запуска Blender нажмите на General в разделе New File. По умолчанию новый файл содержит объект-куб. Нажмите на куб, чтобы выбрать его, затем нажмите Delete, чтобы от него избавиться. Теперь у нас есть свободное место для работы:


Далее нажмите на File ► Import ► Wavefront (.obj). Перейдите в папку MeshroomCache, в которую Meshroom сохранил файлы модели отсканированного объекта. В этой папке найдите модель в подпапке MeshroomCache/Texturing/GUID. GUID это имя папки со случайным идентификатором, назначаемым после завершения сканирования.

Затем дважды нажмите на texturedMesh.obj для импортирования скана в Blender.


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


Начнём с того, что получим представление о том, как по умолчанию выглядит отфотосканированный дракон. Нажмите на кнопку Viewport Shading в основном окне Blender, чтобы включить полное затенение и текстурирование этого окна.


Затем нажмите и удерживайте Shift + среднюю клавишу мыши, чтобы перетащить окно так, чтобы основная модель дракона находилась посередине экрана. Удерживайте среднюю клавишу мыши и перетаскивайте курсор для вращения окна. Приближать и удалять камеру можно колесом мыши.

Посмотрите, как хорошо выглядит скан по умолчанию. Отличная работа!


Вносим исправления в Blender


Модель сложна и имеет большое количество вершин и деталей. Теперь мы уменьшим количество полигонов при помощи быстрого и эффективного модификатора Blender под названием Decimate.

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

На панели Scene Collection редактора Blender нажмите texturedMesh ► Modifiers ► Add Modifier.


В списке выберите Decimate.


Появится небольшое поле настройки с опциями Decimate.

Выберите Collapse со значением Ratio, равным 0.1, а Factor, равным 2.0. Затем нажмите на Apply.

Это уменьшит детализацию всей модели и снизит количество вершин примерно в 10 раз! Вы не заметите особой потери деталей, но профилировщик Unity и скорость игры будут вам благодарны!

Избавляемся от травы


Теперь нам нужно заняться самым очевидным.

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

Теперь сосредоточимся на удалении из меша травы.

В Blender переключимся из Object Mode в Edit Mode. Для этого можно использовать UI или нажать Tab на клавиатуре.


Обратите внимание на изменения в окне: теперь там отображаются вершины дракона, и все они выделены.


Выбираем вершины


Далее мы выберем только те вершины, которые относятся к траве вокруг основания дракона, а затем удалим их.

Учтите, для следующего этапа потребуется много терпения.

Сначала выберем инструмент Select Lasso, нажав Shift + Space, L. (Shift и Space одновременно, а затем L).

Или воспользуемся панелью UI для выбора инструмента Select Lasso.


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

С каждого угла обзора лассо аккуратно выбирает вершины травы вокруг основания дракона. Между каждыми операциями выбора нажимайте Shift, чтобы новые выбираемые области добавлялись к уже выбранным вершинам.

Вот GIF, иллюстрирующий этот процесс:


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

Если вы выбрали некоторые вершины, которые не хотите удалять, то нажмите на них по отдельности Shift + левой клавишей мыши, чтобы убрать их из выбранных вершин.

Выбрав всю траву и окружающие её вершины, нажмите Delete ► Vertices, чтобы удалить их.



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

После завершения вы увидите подобную устрашающую картину:


Закрываем основание меша


Теперь перейдите в Edit Mode, если ещё не находитесь в нём. Переключение режимов выполняется нажатием клавиши Tab. Затем выберите всю нижнюю границу вершин меша дракона при помощи инструмента Select и удерживая Shift. Для этого потребуется терпение.


Или можно использовать для этого инструмент Select Lasoo.


Выбрав вершины, нажмите Vertex Smooth Vertices.


Это немного сгладит выбранное нами кольцо вершин.

Теперь выберите инструмент 3D Cursor, нажав Shift + Space, Space и расположите его на уровне самой нижней вершины в выбранной нижней границе, нажав левую клавишу мыши. Для определения самой нижней вершины можно панорамировать и вращать окно просмотра, чтобы посмотреть на дракона сбоку.

Затем нажмите клавишу . («точка») для выбора Pivot Point, далее выберите 3D Cursor, чтобы использовать в качестве опорной точки позицию 3D-курсора.

Далее нажмите S, Z, 0, Enter (это ноль, а не O). Эта серия команд отмасштабирует все выбранные вершины до той же высоты, что и у опорной точки, которую мы создали при помощи 3D-курсора.

Теперь мы получили примерно такой меш:


Наконец, нажмите Vertex ► New Edge/Face from Vertices.

Так мы создадим новое основание для дракона, закрыв все выбранные вершины и создав новую грань.



Перемещаем дракона


Затем вернёмся в Object Mode, нажав Tab, и выберем объект texturedMesh. Переместим дракона к точке начала координат сцены с помощью инструмента Move, нажав Shift + Space, G. Применим инструмент Rotate, нажав Shift + Space Bar, R, и повернём его в нужное положение.

Теперь выберем инструмент 3D Cursor и нажмём примерно посередине спины дракона. Нажмём F3, введём Set Origin и нажмём Enter. Далее выберем в появившемся списке команд Origin to 3D Cursor.

В середине 3D-курсора появится жёлтая точка, обозначающая новую точку начала координат модели.


Мы готовы экспортировать модель!

Далее нажмём File ► Export ► Wavefront (.obj).

Выберите Path Mode ► Copy и убедитесь, что в Export Settings выбрана опция Selection Only. Сохраните файл как Dragon.obj в удобном для вас месте.


Значение Copy параметра Path Mode экспорта гарантирует, что текстуры копируются и на них указываются ссылки из той же папки, где находится модель .obj. Это позволяет избежать проблем с потерянными текстурами при импорте в Unity.

Переносим всё в Unity


Теперь откроем проект Starter в Unity, а затем откроем сцену Assets/RW/Scenes/PhotoscanDragon. Найдём пустой пьедестал между камнями в деревне. Именно здесь мы установим отфотосканированную модель дракона.


Теперь перетащим экспортированную модель и связанные с ней экспортированные файлы в папку проекта Assets/RW/Models/Dragon.


Затем воспользуемся окном Hierarchy Unity для нахождения GameObject FocalPoint. Перетащим модель Assets/RW/Models/Dragon/Dragon.obj в сцену, и сделаем её дочерней относительно GameObject FocalPoint.


Теперь изменим позицию и поворот компонента Transform объекта Dragon следующим образом:

  • Position: (X:-33.32, Y:0.53, Z:5.08)
  • Rotation: (X:-2.229, Y:90, Z:-0.6)


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

Теперь нажмите Play и полюбуйтесь нашим собственным отфотосканированным драконом, взятым из реального мира и воссозданного в полном 3D.


Куда двигаться дальше?


Готовый проект можно скачать по ссылке в начале статьи.

Чтобы добиться результата, мы сделали множество шагов, узнав при этом о фотограмметрии, редактировании 3D-мешей в Blender, операциях с вершинами и переносе всей модели в Unity!

Я бы хотел поблагодарить The Tales Factory из Unity Asset Store за то, что позволили мне использовать ассет Photoscanned MountainsRocks PBR в сцене Dragon Viking Village.

Рекомендую изучить их превосходные фотосканированные ассеты.

Следующие действия зависят от вас. Что бы вы хотели воссоздать и встроить в свои Unity-проекты? Ниже представлены ресурсы и дополнительное чтение, которые могут вам помочь в дальнейшей работе: