Геймдев
#статьи

Что такое фотограмметрия — и как с её помощью создавать игровые ассеты

Переносим объекты из реальной жизни в 3D-графику.

Иллюстрация: Катя Павловская для Skillbox Media

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

Из этого материала вы узнаете:


Что такое фотограмметрия

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

3D-сканирование людей методом фотограмметрии технически сложнее, так как человек — живое существо. Даже находясь в неподвижном положении, он будет дышать и моргать. Поэтому для корректного захвата деталей человеческого лица используют десятки камер. Более подробно об этом процессе можно узнать из доклада, посвящённого созданию лицевой анимации Marvel’s Guardian of the Galaxy.

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

Примеры игр с использованием ассетов, полученных в результате фотограмметрии

The Vanishing of Ethan Carter

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

Скриншот: The Vanishing of Ethan Carter / The Astronauts

После релиза The Vanishing of Ethan Carter фотограмметрия стала востребованной как в инди, так и в высокобюджетных проектах. Согласно исследованию Digital Games Research Association (DIGRA), c 2014 по 2019 год фотограмметрию использовали создатели как минимум 26 вышедших в этот период игр — и ещё семи проектов, которые на тот момент находились в разработке (среди них, к примеру, ныне вышедшие The Beast Inside или Serious Sam 4).

Battlefield V

При разработке карт для шутера Battlefield V студия DICE снимала природный ландшафт, объекты из реальной жизни и архитектуру — при этом не только с помощью камер, но и используя дроны.

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

Forza Motorsport 7

Когда необходимо перенести в 3D объекты огромных масштабов, применяется комплексный подход с использованием фотограмметрии и лазерного сканирования. Так, когда команда Turn 10 Studios снимала контент для будущей трассы в Дубае, выяснилось, что фотоснимков для объектов, референсов ландшафта и PBR-текстур недостаточно. В частности из-за того, что по ним было сложно восстановить настоящий размер гористой местности. К тому же часть ландшафта было невозможно охватить камерами со всех сторон.

Тогда разработчики прибегли к использованию лазерного сканирования с помощью системы Leica, с технологией LiDAR. Этот метод позволил разработчикам создать максимально подробные превизы для художников. Помимо отсканированного объекта с реальными размерами в 3ds Max, на руках у специалистов были фотореференсы и готовые PBR-материалы. Оставалось только использовать контент, полученный в результате лазерного сканирования, и воссоздать на его основе реалистичные игровые ассеты. В итоге LiDAR давал точную информацию о масштабе и рельефе окружения, а фотограмметрия помогла его финализировать.

Софт для фотограмметрии

Большинство программ для фотограмметрии работают по следующей схеме:

  • анализ загруженных фотографий;
  • генерация облака точек;
  • формирование готового меша;
  • первичная обработка и экспорт.

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

Meshroom

Разработчик: AliceVision

Сайт программы

Лицензия: бесплатная

В отличие от многих специализированных программ, Meshroom бесплатна и хорошо справляется со сканированием статичных объектов. Это значит, что она подойдёт как любителям, так и продвинутым пользователям. В Сети можно найти немало подробных видеоуроков по Meshroom, что поможет начинающим быстро освоить работу с программой. Одним из существенных недостатков Meshroom считают её изначальную эксклюзивность для Nvidia из-за встроенного фреймворка для вычислений CUDA. Но проблему можно решить, установив расширение MeshroomCL, которое поддерживает и другие графические процессоры.

Agisoft Metashape

Разработчик: Agisoft

Сайт программы

Стоимость лицензии: 179 долларов / 3499 долларов; есть пробный 30-дневный период

Многофункциональный инструмент от российской компании. В стандартной версии доступно создание 3D-моделей с фотореалистичными текстурами и расширенным редактированием, обработка снимков, снятых с разных фотокамер, а также сшивание панорам в 360°. Совместима со всеми видеокартами. Из минусов пользователи отмечают долгую обработку и сложный интерфейс.

Substance 3D Sampler

Разработчик: Adobe

Сайт программы

Стоимость лицензии: 49,99 доллара в месяц за весь пакет инструментов Substance 3D

Новый инструмент для фотограмметрии в экосистеме Adobe. Преимущества в том, что полученный 3D-объект можно легко интегрировать в другие инструменты Substance, а затем доработать меш и текстуры. Substance 3D Sampler вышла несколько месяцев назад. В некоторых обзорах указывают на проблемы с импортом фотографий и неточностью в передаче деталей по сравнению с аналогами.

3DF Zephyr

Разработчик: 3Dflow

Сайт программы

Стоимость лицензии: от 0 до 4200 евро

Любители и начинающие пользователи могут начать с бесплатной версии 3DF Zephyr Free, в которой можно загрузить до 50 фотографий на сеанс сканирования, что подойдёт для создания небольших 3D-объектов с простой геометрией. Для более детальных ассетов в контексте игрового окружения подойдёт версия 3DF Zephyr Lite: в ней нет ограничений по загрузке фотографий и форматов по экспорту текстур. Из-за фреймворка CUDA программа работает только с видеокартами Nvidia. В случае с AMD программа будет работать, но в разы медленнее, так как вся нагрузка пойдёт на центральный процессор.

RealityCapture

Разработчик: Capturing Reality, Epic Games

Сайт программы

Стоимость лицензии: от 10 до 3750 долларов

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

Что касается функционала, то в Reality Capture доступен импорт данных с фото, видео, лазерного сканирования, генерация карт нормалей/смещения и большой выбор расширений для экспорта. Как и Meshroom, RealityCapture поддерживает генерацию отсканированного меша только при наличии карты Nvidia из-за использования фреймворка CUDA 3.0, поэтому владельцам AMD Radeon придётся рассмотреть альтернативы.

Весной 2022 года состоялся релиз RealityScan — бесплатного приложения от Capturing Reality для iOS (разработчики обещают версию для Android в течение текущего года). С помощью него можно снимать объект на камеры iPhone или iPad с разных ракурсов и получать готовую 3D-модель с возможностью интеграции в Unreal Engine.

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

Более простые и доступные варианты фотограмметрии

В последние годы всё больше набирают популярность мобильные приложения для фотограмметрии: камеры в смартфонах стали мощнее, а в iPhone (с выходом моделей 12 Pro и iPhone 12 Pro Max) и iPad Pro стала доступна технология LiDAR. На сегодняшний день на рынке мобильных приложений есть как платные, так и бесплатные инструменты и для Android, и для iOS. С ними можно создать качественный скан 3D-объекта и в дальнейшем интегрировать его в свой проект.

Среди универсальных приложений можно отметить Polycam. В нём есть возможность бесплатной обработки фото, интеграция с порталом Sketchfab, а встроенная функция LiDAR охватывает большие пространства. В результате Интернет заполонили трёхмерные модели комнат пользователей, что стало своеобразным мемом. Рассмотрим работу Polycam на практике.

Как работает Polycam

Загружаем приложение и открываем его. Создаём аккаунт. На данный момент в Polycam доступно три режима 3D-сканирования.

Скриншот: Polycam / Polycam Inc.
  • LiDAR (для владельцев iPhone/iPad) — сканирование больших пространств с учётом деталей;
  • Room (для владельцев iPhone/iPad) — сканирование основной планировки помещений: во время записи видео фиксируются углы, окна и дверные проёмы;
  • Фото (доступно в iOS и Android) — сеанс фотограмметрии, который в Polycam называется фотозахватом. По умолчанию в нём стоит режим записи, при котором приложение автоматически делает снимки объекта под разными углами по мере вращения камеры вокруг цели. При переключении на режим со значком фотокамеры все кадры придётся делать вручную.

В рамках фотограмметрии нас интересует режим «‎Фото», поэтому мы будем работать в нём. В качестве эксперимента попробуем отсканировать игровую фигурку Сэма Бриджеса, чтобы в дальнейшем «оживить‎» её в визуализации. Для мобильного приложения подойдёт любой объект с более или менее простой конструкцией. Впрочем, можно выбрать и более сложную форму, но в этом случае есть риск получить менее точный результат, и в дальнейшем объект придётся тщательней дорабатывать вручную непосредственно в программе для 3D-моделирования.

Фото: Леон Балбери

Подготовка к сеансу фотограмметрии

Требования к съёмкам объекта для фотограмметрии во многом схожи с требованиями к съёмке поверхностей будущих PBR-текстур.

  • Если объект находится на улице — желательно снимать его в облачную погоду. Если в помещении — нужно выставить рассеянный свет.
  • Чтобы избежать искажений, необходимо перемещать смартфон вокруг объекта медленно и под прямым углом. В зависимости от размеров объекта можно настроить фокус на панели сбоку (1x / 2,5x) и расположить гаджет так, чтобы изображение в камере не было размытым.
  • Убедитесь, что на выбранном для съёмки объекте нет отражающих/прозрачных деталей: программа не распознаёт их во время анализа. Это касается не только мобильных, но и десктопных приложений.
  • Делайте больше кадров под разными углами. Чем больше таких снимков — тем больше вероятность, что программа лучше обработает детали. Область перекрытия должна занимать не менее 50%.

Обработка и экспорт

Закончив серию снимков, нажимаем на кнопку «Выполнено‎». Перед отправкой в облако определяемся с качеством (обычно это Raw). Обычно процесс обработки фото занимает 5–10 минут.

Примечание

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

Список доступных заданий, за которые можно заработать фотозахваты
Скриншот: Polycam / Polycam Inc.

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

Скриншот: Polycam / Polycam Inc.

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

Демонстрация редактора обрезки лишних деталей в формате цилиндра
Скриншот: Polycam / Polycam Inc.

Сохраняем объект (крайний значок в правом углу) и переходим в настройки экспорта. В разделе Export to можно выбрать софт, в который мы хотим интегрировать нашу модель. В данном случае выбран Blender, так как дальнейшую обработку мы будем проводить именно в этой программе.

Скриншот: Polycam / Polycam Inc.

В бесплатной версии Polycam доступен только формат .GLTF. После этого мы можем выбрать, куда загрузить объект: в мессенджер — или же в облако, откуда затем объект можно скачать на жёсткий диск.

Примечание

Чтобы загрузить .GLTF-файл в Blender, потребуется установить аддон Import-Export: .gLTF 2.0 format. Он находится в настройках программы, в меню аддонов — достаточно набрать название выше в поиске и поставить напротив него галочку.

Обработка 3D-скана после фотограмметрии в Blender

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

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

Полигональная сетка отсканированной модели. Оранжевым отмечены границы меша стойки, по которым будет проходить отсечение
Скриншот: Blender / Blender Foundation

И хотя фигурка, отсканированная в Polycam, получилась достаточно детальной для своего небольшого размера, она тоже нуждается в коррекции. Запускаем Blender, импортируем в него модель, выравниваем её по центру и оцениваем план работ. Помимо того, что нужно избавиться от пластиковой стойки, необходимо почистить‎ полигональную сетку, поработать в режиме Sculpting над чёлкой (часть её получилась плоской), переделать топологию, запечь и доработать текстуры.

Избавляемся от лишнего

Начнем с удаления лишних частей. Существует множество техник отсечения лишней геометрии в Blender. Здесь многое зависит от исходного меша и желаемого результата. Можно обрезать вершины в ортогональной перспективе, а затем достроить их вручную — или же назначить группы вершин, выделить нужную часть и отсечь лишнее. Также можно использовать инструмент Box Trim в режиме Sculpting, который делится на сам Box Trim (для ровных площадей) и Lasso Trim (для обрезания углов или мелких частей — этот метод работает не всегда).

Рассмотрим технику обрезания с помощью модификатора Логический (Boolean). Создаём куб, включаем режим сетки и подгоняем его структуру под модель таким образом, чтобы лишние части меша — в частности стойка — остались за его пределами. В этом поможет ортогональный режим.

Разметка предполагаемого среза
Скриншот: Blender / Blender Foundation

Далее выделяем модель и добавляем модификатор Логический (Boolean). В качестве Объекта (Object) указываем Куб (Cube) и вместо Разницы (Difference) выбираем Пересечение (Intersect). Применяем и при необходимости повторяем операцию, изменив размер и расположение куба.

Удаление оставшихся частей меша модификатором. В этом случае уже используют Разницу (Difference), так как удаляется всё, что затрагивает площадь куба
Изображение: Blender / Blender Foundation

Если сейчас включить отображение шейдеров во вьюпорте, на поверхности отсканированного объекта можно заметить дефекты — искажение нормалей на пересечении участках UV-островов, которые хаотично сгенерировал Polycam. Это связано с тем, что геометрия объекта изменилась. Чтобы исправить эти артефакты, пересчитаем нормали с помощью модификатора Взвешенная Нормаль (Weighted Normal).

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

Теперь поработаем в режиме Sculpting: удалим шумы, которые появились в результате фотограмметрии, и сделаем одни детали более выпуклыми, а другие, наоборот, сведём на нет (в частности шов от съёмной причёски, проходящий поперёк головы). После того как все манипуляции с моделированием и редактированием меша выполнены, ещё раз применяем модификатор Взвешенная Нормаль (Weighted Normal).

Сглаживание шумов и создание нового рельефа причёски в режиме Sculpting
Изображение: Blender / Blender Foundation

После доработки в меше наверняка остались лишние грани и вершины. Очистим полигональную сетку в режиме редактирования: Меш (Mesh) — Очистка (Clean up) — Растворить вырожденные элементы (Degenerate Dissolve). После этого выберем Объединить по расстоянию (Merge by Distance). В конце применяем на модель Гладкое затенение (Shade Smooth). Избавившись от лишнего, можно приступить к упрощению топологии. В данной модели сейчас порядка 38 000 полигонов, что по меркам ассета очень много. Поэтому следующим шагом будет создание низкополигональной модели и перенос на неё деталей с оригинала.

Трансформация в low-poly-модель и оптимизация топологии

В объектном режиме создаем дубликат меша (Shift +D). Во избежание путаницы переименуем оба меша, пометив, что первый — высокополигональный, а второй — будущий низкополигональный. Скрываем первую модель из вьюпорта.

Стрелкой отмечен значок скрытия объекта
Скриншот: Blender / Blender Foundation

Теперь нам нужно сделать ремеш — задать новую топологию модели с помощью автоматической генерации. В этом процессе важно соблюдение баланса между количеством полигонов и итоговым качеством меша. Существует несколько способов ремеша в Blender. Рассмотрим варианты с примерами, на основе которых вы можете подобрать идеальный вариант оптимизации полигональной сетки для своего 3D-скана.

  • Воксельный ремеш. Заходим в настройки данных объекта (зелёный значок), открываем параметр Remesh, включаем Воксель (Voxel) и подбираем оптимальный Размер вокселя (Voxel Size) под модель (ориентир на тысячные доли). Оставляем галочки напротив пунктов Исправить полюса (Fix Poles) и Объём (Volume). Нажимаем Воксельный ремеш (Voxel Remesh). После этого количество полигонов сократится примерно в несколько раз, и модель обретёт новую квадратную полигональную сетку.
  • QuadriFlow. Режим Квад (Quad) также находится в разделе Remesh. Переходим в него и нажимаем Ремеш QuadriFlow (QuadriFlow Remesh). Отмечаем галочкой Сохранять остроту (Preserve Sharp) и Сохранить оболочку меша (Preserve Mesh Boundary), выставляем предполагаемое Количество граней (Number of Faces), Вариации случайности, используемой алгоритмом (Seed), подтверждаем выбор и смотрим результат. На скриншотах ниже можно увидеть, что в этом случае топология объекта выполнена гораздо чище.

Недостаток этих двух подходов в том, что они генерируют квадратную сетку, которую воспринимают не все игровые движки.

  • Использование модификатора Упрощение (Decimate). В настройках выбираем Схлопнуть (Collapse) и уменьшаем значение Соотношения (Ratio) таким образом, чтобы максимально уменьшить количество полигонов, но сохранить изначальный объём меша.

В результате полигональная сетка сохранилась, объём модели остался прежним. Но из-за неравномерной структуры могут возникнуть проблемы с отображением нормалей, которые модификатор Взвешенная нормаль (Weighted Normal) уже не исправит.

  • Комплексный подход. Используем режим Квад (Quad), указав количество полигонов примерно в 1,5–2 раза ниже предполагаемого, а после, в режиме редактирования, добавляем треугольники на топологию с помощью модификатора Триангуляция (Triangualte). Он выполняет ту же функцию, что и деление геометрии на трианглы при нажатии CTRL + T в режиме редактирования, но итоговая сетка получается более равномерной.

Уменьшаем остроту новых граней Гладким затенением (Shade Smooth) и при необходимости применяем модификатор Взвешенная нормаль (Weighted Normal).

Закончив с ремешем, переходим к самому сложному этапу — реконструкции UV-развёртки 3D-скана.

Исправление UV-развёртки отсканированного объекта

Если сейчас зайти в раздел UV Editing, можно увидеть хаотично раскиданные отрезки текстурного пространства. Чтобы расположение UV-островов было более логичным, модели потребуется новая UV-развёртка.

Редактор UV и исходное текстурное пространство
Скриншот: Blender / Blender Foundation

В Blender это можно сделать несколькими способами. Для простых объектов типа ваз или камней наверняка будет достаточно Умного UV-проецирования (Smart UV Project). Если модель более сложная, как персонаж из примера, придётся потратить время на расстановку швов.

Как только оптимальная UV-развёртка создана, приступаем к запеканию текстур.

Подготовка к запеканию текстур

Открыв режим Shading, можно увидеть как текстура пришла в негодность из-за нового расположения UV-островов. Переходим в раздел материалов на панели настроек объекта и убираем текущий слот. Проверяем, что оригинальный материал остался на высокополигональном меше.

Удаление оригинального материала
Изображение: Blender / Blender Foundation

Создаём новый материал для low-poly-меша. Нажимаем кнопку +Создать (+New), после чего появится основной шейдер по умолчанию. Добавляем в поле нодов два Изображения-текстуры (Image Texture). Первое будет для диффуз-карты, а второе — для нормалей. В первом нажимаем кнопку +Создать (+New), выбираем имя и указываем предполагаемое разрешение. В данном примере оригинальная текстура выполнена в 4K-разрешении, и мы укажем 4096×4096, но можно выставить и другое значение. Параметр Альфа (Alpha) отмечаем в том случае, если нужна текстура с прозрачным фоном. Остальные опции оставляем как есть и проделываем всё то же самое для будущей карты нормалей.

Пример настроек для Изображения-текстуры в разделе шейдеров
Скриншот: Blender / Blender Foundation

Заходим в настройки рендера и меняем движок на Cycles, так как запекание текстур работает только в нём. Устройством (Device) выбираем GPU-вычисления. Во вкладке Рендеринг (Render) в пункте Max Samples указываем минимальное количество семплов — например, пять, так как мы не будем рендерить картинку или анимацию. Убедитесь, что в Управлении цветом (Color Management) стоит sRGB, а Преобразование вида (View Transform) отмечено как Стандартный (Standard).

Настройки рендера для будущего запекания
Скриншот: Blender / Blender Foundation

Запекание Normal map и Diffuse map

Нормали на низкополигональную модель мы перенесём с помощью модификаторов. Переходим в Layout и добавляем на low-poly-меш модификатор Мультиразрешение (Multiresolution) для подразделения поверхности и последующего переноса нормалей с оригинального меша. Вслед за ним добавляем модификатор Обтягивание (Shrinkwrap).

В первом модификаторе нажимаем Подразделить (Subdivide) два раза. В результате количество полигонов на low-poly-модели увеличится, и новая сетка уловит все детали. В Обтягивании (Shrinkwrap) указываем Целью (Target) оригинальную модель, а в качестве Wrap Method выбираем Проецирование (Project). Возможно, после этого отдельные вершины на модели исказятся. Ставим галочку напротив Инвертировать (Negative) — и все артефакты пропадут. Если они всё же остались, попробуйте выставить небольшое значение (примерно 0,001) в пункте Предел (Limit) и переключить Отбрасывать задние грани (Face Cull) на Сзади (Back). Если ничего из перечисленного не помогает и на отдельных местах остались небольшие дефекты, похожие на сколы, — оставьте как есть, мелкие недочёты можно откорректировать на финальном этапе.

Применяем на меше Гладкое затенение (Shade Smooth), кликнув по нему ПКМ во вьюпорте, иначе будущая карта нормалей будет испещрена квадратами.

Настройки модификатора Обтягивания (Shrinkwrap) в случае появления артефактов на меше
Скриншот: Blender / Blender Foundation

Применяем только модификатор Обтягивание (Shrinkwrap), а в Мультиразрешении (Multiresolution) выставляем Уровень просмотра (Level Viewport) на 0 (иначе детали на текстуру не перенесутся) и приступаем к запеканию нормалей.

Заходим в Shading, выделяем low-poly-меш (если он не выделен), открываем настройки рендера, находим вкладку Запекание (Bake). Отмечаем галочкой Запечь из мультиразрешения (Bake from Multires) — и Тип запекания (Bake Type) автоматически поменяется на Нормали (Normals). Не забудьте указать Размер (Size) Отступа (Margin), значение которого зависит от размера текстуры.

В редакторе шейдеров выделяем нод с текстурой, предназначенной для нормалей и нажимаем кнопку Запечь (Bake). Полученную карту можно сохранить, щёлкнув на значок рядом со вкладкой Вид (View) в левом нижнем углу Изображения* (Image) — Сохранить как… (Save as…) и выбрав оптимальные параметры для файла. Формат выбираем на своё усмотрение (обычно это .PNG), Сжатие (Compression) ставим на 0.

Созданную текстуру можно сразу проверить на меше, подключив её к Принципиальному BSDF (Principled BSDF) через Карту нормалей (Normal Map).

Подключение карты нормалей в разделе Shading
Скриншот: Blender / Blender Foundation

Если результат переноса нормалей устраивает, отключаем модификатор Мультиразрешение (Multiresolution). Возвращаемся в раздел шейдеров и включаем во вьюпорте отображение оригинальной модели. Сначала выделяем её, а затем, удерживая Ctrl (это важно), выделяем также low-poly-меш, после чего заходим в настройки Запекания (Bake) и убираем галочку с пункта Запечь из мультиразрешения (Bake from Multires). В Типе запекания (Bake Type) выбираем Диффуз (Diffuse).

Нам нужно запечь только Цвет (Color), поэтому убираем галочки с позиций Contributions, которые отвечают за запекание света, — Прямое (Direct) и Отражённое (Indirect). Обязательно отмечаем Выделение к активному (Selected to Active) — эта функция отвечает за перенос текстур с одного объекта на другой.

Если low-poly-меш выходит за пределы оригинального меша, устанавливаем Выдавливание (Extrusion), иначе вместе с оригинальной текстурой запекутся и выпирающие участки низкополигональной модели. Значение во многом зависит от геометрии меша, в данном случае достаточно 0,01. После выбираем нод с картой Diffuse и нажимаем кнопку Запечь (Bake). Как правило, обработка диффуз-карт занимает больше времени, поэтому придётся подождать. Полученную текстуру сохраняем, как и предыдущую.

Настройки для запекания диффуз-карты и фрагмент итоговой запечки слева
Скриншот: Blender / Blender Foundation

Теперь осталось только подключить полученные карты к соответствующим слотам в шейдере Принципиальный BSDF (Principled BSDF) и настроить его свойства — например, убрать лишние блики, увеличив параметр Шероховатости (Roughness). При желании можно указать значение IOR, соответствующее типу материала.

Пример настроек шейдера
Скриншот: Blender / Blender Foundation

Последние штрихи в режиме Texture Paint

На текстуре модели остались графические артефакты, которые нужно исправить. Переходим в режим Texture Paint и ищем проблемные места. Выбираем инструмент Клонирование (значок штампа) и, удерживая Ctrl, нажимаем на область, из которой нам нужно взять данные для закрашивания (в ней появится 3D-курсор). Далее точечно закрашиваем проблемный участок ЛКМ. Если вы обладаете продвинутыми художественными навыками, можете дорисовать или переделать некоторые детали стандартной кистью, используя графический планшет.

Пример закраски проблемного участка кистью-штампом
Изображение: Blender / Blender Foundation

Так же можно внести изменения в карту нормалей и убрать лишние выпуклости, включая неисправленные артефакты, которые образовались в результате Обтягивания (Shrinkwrap). После всех изменений не забудьте сохранить результат, нажав на кнопку Сохранить все изображения (Save all Images).

Настало время сравнить итоговый результат с высокополигональной моделью.

Слева — оригинальный 3D-скан, справа — доработанная low-poly-модель
Скриншот: Blender / Blender Foundation

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

Рендер с моделью, полученной в результате фотограмметрии. Для работы использовались ассеты Terrain от FNG, Single Grass от oppne, Grass Variations от RBG_illustrations
Скриншот: Blender / Blender Foundation

В каких программах ещё можно обработать 3D-скан

Разумеется, не все предпочитают Blender. Ниже представлены возможные альтернативы для той или иной стадии коррекции:

  • Очистка меша — любая другая программа для 3D-моделирования, в которой можно первично обработать меш (обрезать лишнее, заделать дыры в полигональной сетке). Также подойдёт утилита Autodesk Meshmixer. Несмотря на то, что инструмент более не поддерживается разработчиком ввиду новой итерации Fusion 360, он до сих пор остаётся актуальным из-за необходимого функционала и свободного скачивания.
  • Сглаживание ненужного рельефа, в том числе шумов, — ZBrush, Autodesk Mudbox, 3DCoat и прочие программы, где доступен режим Sculpting.
  • Ретопология — Instant Meshes, встроенные инструменты в программах для 3D-моделирования.
  • Запекание нормалей — Substance Designer, Marmoset Toolbag.
  • Текстурирование — Substance Painter, 3DCoat и другие программы, где можно работать с текстурами в реальном времени.

Итоги

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

Фото: Леон Балбери

Плюсы фотограмметрии

  • Доступность. На сегодняшний день фотограмметрия перестала быть чем-то недосягаемым благодаря развитию камер в современных смартфонах.
  • Реальный размер. Помимо формы, технология способна определить по снимкам объекта его размер и положение в пространстве. Представьте, что вы отсканировали на смартфон некий архитектурный объект — например, арку или лестницу. При его импорте в уровень игры вам не придётся думать о том, как подстроить его под рост обычного человека. Размеры будут такими же, как и в реальной жизни.
  • Возможность сделать свой проект по-настоящему уникальным. Особенно если прототипами игровых ассетов станут изделия ручной работы (игрушки, фигурки из пластилина и так далее), объекты архитектуры и культуры, которые могут подчеркнуть эпоху игры или национальный колорит сеттинга. Аудитория всегда проявляет интерес к подобному контенту.
  • Дополнительный заработок. На маркетплейсах можно встретить много лотов с ассетами, полученными в результате фотограмметрии. Цены на них, как правило, довольно высокие.
На экране AR-интерфейс приложения RealityScan
Фото: Леон Балбери

Минусы фотограмметрии

  • Не самая высокая точность. В этом отношении фотограмметрия уступает лазерному сканированию.
  • Для хорошего результата без лишних заморочек придётся заложить определённый бюджет. Чтобы получить качественную модель объекта со сложной геометрией, потребуется хорошая фотокамера или передовой смартфон/планшет. Не стоит забывать о том, что лицензии на большинство программ для фотограмметрии и сопутствующий софт тоже не бесплатны.
  • Относительно высокий порог вхождения. Исходному скану в любом случае нужна доработка и оптимизация. Удаление лишних мешей, реконструкция не попавших в область скана участков (разрывы и слияния полигональной сетки), чистка геометрии, ремеш, создание новой UV-развёртки — все эти операции требуют от пользователя дополнительного времени и более продвинутых навыков в программах для 3D-моделирования.
  • Текстурирование модели, полученной методом фотограмметрии, требует определённых художественных навыков. Когда объект сформирован в 3D-модель, на исходном материале могут образоваться различные артефакты текстуры в виде точек и растяжек. Инструмент клонирования не всегда помогает — и в этом случае некоторые участки придётся дорисовывать вручную.

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

Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована