NVIDIA представила технологию создания 3D-моделей на основе фотографий / Хабр
Компания NVIDIA показала приложение GANverse3D, которое с помощью машинного обучения создаёт 3D-модель из одной фотографии. Разработчики компании продемонстрировали подробности, создав модель машины «КИТТ» из телесериала 80-х «Рыцарь дорог».
Приложение GANverse3D создали сотрудники исследовательской лаборатории NVIDIA AI в Торонто. Они рассчитывают, что данная технология поможет архитекторам, разработчикам игр и дизайнерам добавлять модели в свои сцены без опыта в моделировании и без увеличения бюджета.
Из-за того, что датасеты с изображениями объектов со всех сторон являются редкостью, большинство разработчиков тренируют свои программы на синтетических датасетах, например, ShapeNet. Но разработчики GANverse3D пошли другим путём: для создания датасета они использовали генеративно-состязательную сеть (GAN), которая генерировала изображения объекта с разных ракурсов.
На основе полученных изображений приложение GANverse3D собирало 3D-модель объекта с помощью фреймворка DIB-R для Omniverse. После прохождения обучения приложение GANverse3D научилось рендерить объёмную модель из одной-единственной фотографии с одним ракурсом.
Окончательная версия приложения прошла обучение на 55 тысячах автомобилей и превзошла другое приложение, обученное на датасете Pascal3D. Кроме этого, GANverse3D работает с текстурами создаваемой модели. Приложение анализирует освещение, модель и текстуру оригинальной картинки и на основе полученных данных строит полную 3D-модель. Далее художник может использовать Omniverse Kit и PhysX для доработки модели и добавления эффектов.
Автор проекта Джун Гао утверждает, что, так как его приложение тренировалось на реалистичных изображениях, вместо синтетических данных, то получаемые модели лучше подходят для настоящего окружения.
Исследование, которое лежит в основе GANverse3D представят на международной конференции Learning Representations в мае и на конференции Computer Vision and Pattern Recognition в июне.
Нейросеть научили воссоздавать 3D-модель человека по фотографии
Американские и японские разработчики научили нейросеть создавать цветную 3D-модель человека по одной или нескольким фотографиям. Особенность алгоритма заключается в том, что он достаточно качественно воссоздает даже вид со спины, которая не видна на исходном снимке, рассказывают авторы статьи, которая будет представлена на конференции ICCV 2019.
Как сообщается, решение, получившее название PIFu (Pixel-aligned Implicit Function), состоит из двух последовательных сверточных нейросетей, одна из которых анализирует исходный снимок (либо несколько исходных снимков), обнаруживает на нем тело человека и, используя методику под названием «Шагающие кубики», воссоздает по нему 3D-модель, а вторая придает получившейся модели цветность.
Для обучения алгоритма исследователи воспользовались датасетом RenderPeople, состоящем из высококачественных 3D-моделей людей, полученных с помощью фотограмметрических сканеров.
На опубликованном авторами ролике можно видеть, что алгоритм достаточно качественно воссоздает всю модель, в том числе и со спины. Кроме того, в ролике продемонстрировано, что даже наличие трех кадров вместо одного значительно повышает качество итоговой модели. Наконец, авторы показали, что во многих аспектах алгоритм справляется с воссозданием 3D-модели лучше, чем аналогичные алгоритмы других разработчиков.
Примеры работы нейросети. На третьей анимации показано воссоздание 3D-модели по нескольким фотографиям.
По словам исследователей, их разработка — это еще один шаг на пути к созданию методики, позволяющей извлекать 3D-сцены из обычных видео. В дальнейших работах инженеры намерены обучить нейросеть воссоздавать по фотографиям 3D-модели различных предметов.
Источник: N+1
Как сделать объёмную 3D-модель для печати на 3D-принтере из обычной картинки
Если вы хотите сделать из обычного рисунка объемную модель на 3Д принтере, данная инструкция возможно вам поможет. За пару шагов довольно просто можно переделать любую картинку из JPG в объёмную модель для печати на 3Д принтере. Конечно же речь пойдет о простых рисунках, а не портретах и т.д. Сделать логотип, объёмный текст, схемку в объёме и напечатать. Ну мало ли, иногда бывает нужно. Вот и я сегодня озадачился таким вопросом. И оказывается, что ответ не так просто найти.
Сразу скажу. Эта инструкция подойдет скорее для начинающих, только осваивающих 3Д печать и 3Д моделирование людей. Любой специалист конечно же знает всё то, что я покажу ниже. Но все мы начинали с нуля. Поэтому надеюсь, что эта информация окажется полезной для новичков.
Владея 3Д принтером, потихоньку осваиваю Fusion 360. И захотелось мне напечатать довольно симпатичный логотип клуба автомобилистов. Вот и заморочился. Но для инструкции, я возьму вариант попроще. Итак. У нас есть изображение. А нам хочется сделать из него 3д модель для печати на 3Д принтере.
Примерно вот такую:
Да, я взял логотип IXBT. Первый попавшийся, в jpg найденный в поисковике:
Закидываю файл в CorelDRAW. В нем сперва переводим JPG в растр (вкладка «Растровые изображения» выбираем «Преобразовать в растровое изображение») затем выполняем действие «Быстрая трассировка»:
На выходе получаем файл уже готовый к экспорту. Теперь выбираем «Сохранить как» и сохраняем наш файл в формате DXF (это важно):
Затем открываем программу Autodesk Fusion 360. Я делаю 3Д модели именно в этой программе, так как она достаточно проста к освоению, а еще она бесплатная для некоммерческого использования.
В Fusion открываем сохранённый ранее файл, и видим вот такое:
Ну а теперь всё просто. Зажимаем кнопку CTRL и выделяем мышкой каждый элемент. Затем нажимаем кнопку Е и выбираем на какую высоту нам нужно сделать текст в объёме:
Ну и собственно на этом всё. Объёмный текст готов. Остаётся только экспортировать модель в файл STL, скормить его в Cura (или в вашу программу для 3Д печати) и напечатать
У меня вышло вот так:
Я выбрал быструю печать, без подложки. Перед печатью не калибровал стол, поэтому точка перед com потерялась (отвалилась) но это не страшно, потому что печатал я исключительно для примера и наглядности.
Точно так же, можно перевести в STL файл для печати не только текст, но и простенький рисунок, логотип, элемент дизайна и т.д. А уж куда его потом можно применить, зависит только от вашей фантазии. Главное, что теперь у вас есть инструмент по реализации.
Надеюсь данная инструкция была полезна, и я не зря перевёл несколько граммов пластика.
3D-фото на iPhone и iPad
С тех пор как компания Apple внедрила технологию дополненной реальности (AR) в свою продукцию, для пользователей появилось еще больше возможностей для обучения, коммуникаций и развлечений. Это крупнейшая AR-платформа, в чьей основе миллионы мобильных устройств с поддержкой технологии дополненной реальности. Для пользователей доступны множество приложений в AppStore, работающих с данной технологией. Одной из популярных функций AR у владельцев устройств Apple является создание собственной 3D-модели по фото. Разберемся, как это работает.
Важно! Функция создания модели по фото работает только на тех устройствах, в которых предусмотрена разблокировка с помощью распознавания лица!
in3D: 3D-body scanning
В AppStore получила большое распространение программа in3D: 3D body scanning. Приложение бесплатное. Полученную модель можно использовать в различных целях:
- Мода: пользователь получает точные данные о фигуре, что уменьшает риски взятия неточных мерок для создания одежды.
- Развлечения: человек имеет возможность анимировать своего цифрового двойника и создавать забавные стикеры.
- Фитнес: виртуальная модель позволит пользователям iPhone и iPad отслеживать свою физическую форму, что будет для них сильной мотивацией.
- Игры: позволяет игрокам буквально «поместить» себя в игру, чтобы усилить их вовлеченность.
Как пользоваться in3D: 3D body scanning?
- Следует скачать приложение в AppStore: https://apps.apple.com/ru/app/in3d-3d-body-scanning/id1467153183?l=en.
- Далее нужно пройти регистрацию в приложении или войти с Apple и перейти на вкладку Scanner.
- Встаньте в хорошо освещенное место и сделайте скан лица. При удачном сканировании поле распознавания приобретет зеленый цвет. Далее следует совершить повороты головой влево-вправо, вверх-вниз.
- Затем идет сканирование тела. Следует установить устройство на уровне чуть ниже пояса и отойти, чтобы человек поместился в полный рост.
- Далее нужно расположить руки под углом 45°, ладони должны быть сжаты в кулаки.
- На следующем этапе создания модели нужно вернуться к устройству и включить запись. За 5 секунд нужно успеть принять исходное положение, а затем сделать полный оборот вокруг себя.
После всех проведенных манипуляций отснятый материал передается на сервер разработчика, где будет создана 3D-модель. Процесс создания модели может занять несколько часов.
Важно! Для сканирования требуется обязательное наличие камеры TrueDepth.
Следовательно, список доступных устройств ограничивается:
Понравилась статья? Подпишись на наш телеграм канал. Там новости выходят быстрее!
- iPhone X;
- iPhone XS;
- iPhone XR;
- iPhone XS Max;
- iPhone 11;
- iPhone 11 Pro;
- iPhone 11 Pro Max;
- iPad Pro (с Face ID).
Приложение in3D: 3D body scanning полностью бесплатное, как и создание 3D-копии себя. Однако если пользователь захочет создать свою модель для игры GTA V или Second Life, то придется раскошелиться.
Фото: Capture 3D Scan Anything Capture: 3D Scan AnythingЕще одно приложение для создания 3D-модели по фото. Данная программа также использует камеру с технологией TrueDepth. Приложение производит сканирование через фронтальную камеру, используя инфракрасный бластер. Задняя камера в сканировании не участвует.
Нужно нажать на кнопку записи и через несколько секунд программа начинает снимать показания с ИК-камеры, постепенно формируя модель пользователя. В это же время загружается изображение с обычной фронтальной камеры, которое затем накладывается на объект, становясь его текстурой. В конечном счете получается 3D-модель лица. Особенность Capture: 3D Scan Anything в высокой точности отображения одежды.
Роман Владимиров, эксперт по товарам Apple, менеджер компании pedant.ru. Консультант сайта appleiwatch.name, соавтор статей. Работает с продукцией Apple более 10 лет.
Nvidia разработала систему, создающую 3D-модели из фотографий
Создавать игровые 3D-миры скоро будет так же просто, как фотографировать на смартфон. Специалисты компании Nvidia разработали систему, способную спроектировать 3D-модель из любого 2D-изображения.
Используя фотографию любого 2D-объекта, к примеру, птицы, система под названием DIB-R проектирует, как изображение на фото будет выглядеть в трех измерениях. При этом в проекцию входит освещение, структура и глубина.
Аббревиатура DIB-R означает «дифференцируемый интерполяционный визуализатор», то есть система объединяет то, что она «видит» (2D-изображение), и создает версию, основанную на 3D-понимании мира. Это удивительно похоже на то, как люди преобразовывают получаемую глазами 2D-картинку в мысленный образ 3D.
По словам представителей Nvidia, новая разработка имеет очень большое значение для робототехники:
«Чтобы автономный робот мог безопасно и плодотворно взаимодействовать с окружающей средой, он должен уметь чувствовать и понимать свое окружение. В перспективе система DIB-R может улучшить такие способности к восприятию».
В процессе дальнейших разработок специалисты планируют оптимизировать DIB-R и добавить функции, которые, по сути, превратят систему в визуализатор виртуальной реальности. Команда надеется, что в будущем такая система позволит искусственному интеллекту буквально за доли секунд создавать из фотографий полностью погружающие в виртуальную среду 3D-миры:
«Представьте, что вы можете взять фото и получить 3D-модель, то есть теперь вы можете увидеть сфотографированное вами с разных сторон. В перспективе вы сможете попасть внутрь фотографии и рассмотреть ее с разных углов – вы сможете взять фото из старого альбома и превратить их в 3D-изображения, изучив их так, как будто сами там присутствовали».
Возможность визуализировать пространство из фотографий открывает грандиозные возможности для создателей контента. Технологии наподобие Google Maps могут стать полностью погружающими, а главная роль в некоторых компьютерных разработках перейдет от программистов и разработчиков к людям творческих профессий – фотографам и художникам.
Возможно, уже в ближайшем будущем создавать мультиплатформенные компьютерные игры с открытым миром наподобие Skyrim или Grand Theft Auto, над которыми сейчас трудятся сотни людей, сможет небольшая группа специалистов и искусственный интеллект.
Источник
Как делать 3D модели по фотографии | Столярка дома
В программе SketchUp, о которой я писал ранее, есть возможность настраивать координатные оси по реальной фотографии. А затем делать модели, которые будут вписываться в фотографию или повторять объекты на изображении.
Эта функция называется «Совместить фото» Для того, чтобы включить окно с настройками этой функции, нужно в меню «Окно -> Лоток по умолчанию» поставить галочку на пункте «Совместить фото».
Справа появится новая вкладка. Для добавления фотографии, по которой будет строиться модель нужно нажать «+» и добавить нужное вам фото.
В новой вкладке откроется, выбранное изображение и появятся ярко выделенные оси координат и направляющие для настройки.
Для начала, нажав левой кнопкой мыши на центр координат, можно переместить его в подходящее место на фотографии.
Далее красные и зеленые пунктирные направляющие размещаете в подходящих местах фотографии и настраиваете .
При этом смотрите как устанавливается синяя вертикальная ось, она также должна совпасть с вертикальными объектами на фото. После настройки нажмите кнопку «Готово» в окне справа.
Далее можно уже строить модель в натуральную величину.
При построении модели фотография возможно будет скрываться. Это нормально, при нажатии вкладки с фотографией настроенная картинка вернется.
Модель, даже построенная строго по размерам, может оказаться не в масштабе относительно фото. Это настраивается просто, нажав на любую из осей координат и двигая мышкой вдоль оси можно изменить масштаб.
После настройки нажмите на кнопку «Готово» в окне справа.
Модели можно строить также непосредственно по фото, рисуя по элементам на фото, делать плоскости, а затем выдавливанием придавать объем.
Такое моделирование помогает делать реальные изделия, так чтобы они при установке вставали без ошибок.
Кроме описания и фото предлагаю посмотреть видео.
А основы моделирования для начинающих смотрите здесь.
Спасибо что дочитали. Буду рад вашей поддержке в виде лайка и подписки на канал.
Александр.
Облачная фотограмметрия, или Делаем 3D-модель по фотографии / Мастерская
Всё же фотограмметрией данный метод можно назвать с некоторой натяжкой. В чём заключается его идея? Всё очень просто. Мы делаем некоторое количество фотографий одного и того же объекта, причём так, чтобы изображения с двух разных точек съёмки немного пересекались. На основании этих данных можно построить трёхмерную модель снимаемого объекта. Если делать это вручную, то можно получить близкий к идеальному результат. Однако времени на это уйдёт очень много. По-хорошему надо учитывать и множество других факторов: угол наклона и позицию камеры, искажения изображения из-за несовершенства оптики и так далее.
Прикинув объём ручной работы, многие сразу теряют всякий интерес к подобным затеям. Но не всё так плохо. В мире софта уже давно есть программы, которые заметно облегчают этот процесс или как минимум автоматизируют ряд действий. Но и у них есть пара заметных недостатков. Во-первых, для любительских экспериментов стоят они больно много. Во-вторых, эти программы порой требуют значительных вычислительных мощностей. Что же делать? Решение очень простое — воспользоваться специализированными сайтами или, если хотите, облачными сервисами.
Такой подход разом избавляет нас от массы трудностей. Остаётся только сделать подходящие фотографии или снять видео, залить все это на сервер, а на выходе получить приемлемый результат. Недостатки этого метода очевидны: мы не можем контролировать процесс создания 3D-модели и нам приходится ждать, пока обрабатываются исходные данные. Впрочем, для апробирования методики можно с этим смириться. Тем более что рассматриваемые нами сервисы совершенно бесплатны.
Итак, первый сервис, о котором пойдёт речь, — это разработка известной компании Autodesk под названием 123D Catch. Данная программа по сути является клиентом к облачному сервису. Через неё мы отправляем фотографии на удалённый сервер, где и происходит вся обработка. Для скачивания программы надо зарегистрироваться или авторизоваться с помощью учетной записи Facebook. Проект пока что находится на стадии бета-тестирования и не отличается стабильностью, так что с некоторыми его глюками и тормозами придётся смириться. После установки программы на ПК можно приступать к фотосъёмке нужного нам объекта. Для начала настоятельно рекомендуется ознакомиться с обучающими видео. В первом из них приведены основные советы по правильной съёмке объектов.
В принципе, их (советов или требований) не так уж много. Надо избегать прозрачных или блестящих поверхностей и бликов. Не рекомендуется попадание в кадр повторяющихся текстур. Также объект всегда должен быть неподвижным — надо самому перемещаться с камерой вокруг него. Опять-таки кадры должны хоть немного перекрываться. Ну и надо следить за освещением. Желательно чтобы оно было достаточным (без шумов в кадре) и более-менее равномерным. Использование вспышки не рекомендуется. Использовать ли зеркалку или простую мыльницу, а то и вовсе камеру в смартфоне — не так уж принципиально. Лишь бы кадры не были размытыми, а снимаемый объект оставался в фокусе. И ещё один нюанс: особого смысла делать фотографии с полным разрешением в десяток-другой мегапикселей смысла нет. Достаточно будет 3-4 мегапикселей. Важнее, чтобы объект занимал по возможности большую часть кадра. И ещё, ни в коем случае не используйте телескопические или fish-eye объективы!
В любом случае всё «приходит с опытом». Придётся отснять не один десяток фотографий, прежде чем получится достойная модель. Потренируйтесь сначала на каких-нибудь простых геометрических фигурах, расположенных на однородном фоне. Кстати, попытка воссоздать сложные поверхности вроде меха или волос практически наверняка будет провальной. А пока рассмотрим вкратце работу с программой. Тут всё очень просто. После запуска кликаем Create a new Photo Scene и выбираем фотографии, по которым будет строиться объект. Для начала стоит взять набор из 15-20 кадров, снятых с разных ракурсов, но под одним углом к поверхности, на которой стоит объект. Потом можно будет добавить к сцене и другие фото.
Нажимаем кнопку Compute Photo Scene, вводим имя и e-mail и соглашаемся с условиями использования сервиса. Обязательно вводите рабочий почтовый адрес, так как на него потом будут приходить уведомления и ссылки на готовые сцены. Впрочем, если у вас есть желание и время, то в следующем диалоге можно выбрать Wait вместо Email Me. Тогда программа свернётся и в фоне загрузит все фотографии на сервер, дождётся результата и снова активируется. В среднем загрузка файлов на сервер занимает несколько минут, а время выдачи готового результата составляет не более 10-15 минут. Если вы добавляете к сцене ещё несколько фотографий или меняете её, то все файлы заново заливаются на сервер и обсчитываются, что несколько раздражает.
Через некоторое время в 123D Catch будет загружена готовая сцена (в настройках можно задавать её качество, то есть детализацию). Эту сцену необходимо сохранить в небольшой 3dp-файл, который можно будет открыть и на другом ПК, так как фотографии и всё остальное всё равно будет загружено с серверов Autodesk. Готовую сцену можно экспортировать в некоторые популярные форматы (DWG, OBJ и другие). В идеальном случае сервис автоматически будет «сшивать» фотографии в 3D-модель. Но и ему свойственно ошибаться. Необработанные кадры помечаются иконкой с восклицательным знаком. Их можно удалить или же вручную откорректировать, кликнув правой кнопкой мыши и выбрав пункт Manual Stitch.
В открывшемся окне надо отметить одни и те же точки (желательно все четыре) на трёх выбранных фотографиях. После выбора точки на одной-двух фотографиях программа зачастую сама предлагает точку на третьей. Можно кликнуть по ней и точно спозиционировать её при большом увеличении. После корректировки модель снова отправится на обсчёт в облако. Помимо экспорта объекта можно сделать видеоролик, задав позиции камеры и задержку на каждой из них. Например, облёт вокруг модели или панораму (если вы снимали какую-нибудь площадь, находясь в её центре). Видео кодируется уже на клиентской машине, а не в облаке.
Теперь перейдём к двум другим бесплатным сервисам — Hypr3D и My3DScanner, которые отличаются от 123D Catch несколько менее детализированными 3D-моделями на выходе. Оба требуют обязательной регистрации и не предполагают какого-либо вмешательства в процесс рендеринга модели. То есть после загрузки фото или видео вам остаётся только ждать готового результата или, если не повезёт, сообщения об ошибке. Поэтому здесь гораздо важнее сразу же сделать хорошие исходные фотографии. По большому счёту рекомендации по съёмке остаются такими же, как и для 123D Catch. Но есть несколько важных нюансов. Просмотрите список наиболее частых ошибок с примерами того, как делать не надо.
Пример съёмки объекта для Hypr3D
Опять-таки не годятся прозрачные или бликующие, а также движущиеся объекты, нетекстурированный фон (или с повторяющейся структурой), объективы с сильными искажениями, очень однородный или движущийся фон, расфокусировка и смазанность в кадре, неровное и недостаточное освещение, сильный шум на фото и так далее. Съёмка также должна вестись при перемещении камеры вокруг объекта. В итоге должно получиться где-то от 30 до 60 кадров с одним и тем же углом наклона камеры. Короче говоря, здесь тоже придётся помучиться, прежде чем начнут получаться хорошие 3D-модели.
Перейдём к особенностям работы с указанными сервисами. Начнём с Hypr3D. Нажимаем кнопку Upload и переходим к загрузке исходных файлов. Выбираем нужные изображения или видео, вбиваем название и теги для нашего проекта и жмём Submit for processing. У этого сервиса один нюанс: он без проблем работает с видео, снятым на iPhone/iPod Touch (обычно хватает полуминутного ролика с «облётом» объекта), но для всех прочих требует наличия thm-файла. Впрочем, сервису удалось успешно скормить файлы MOV и 3GP, снятые смартфонами.
Обычно отрисовка модели на основе фотографий занимает не более получаса. А вот работа с видеофайлами идёт гораздо дольше, так как фактически они разбиваются на отдельные кадры, что само по себе занимает минимум 20-30 минут. Готовую модель можно просмотреть вместе с текстурами в виде полигональной сетки или облака точек. По умолчанию она выставляется на всеобщее обозрение посетителям сервиса. Сцены экспортируются в форматы DAE, PLY или STL. Последний сразу же можно отправить печататься на 3D-принтере. У Hypr3D есть также платные опции редактирования модели и подготовки её к 3D-печати, а также собственно создания модели из металла, пластика, керамики и других материалов.
My3DScanner генерирует субъективно менее качественные модели, чем Hypr3D. Тем не менее пользоваться им вполне можно. Начать создание проекта надо с выбора пункта My Studio → Create. Задаём имя и загружаем фото или видео, обязательно упакованные в архив. Время обработки зависит от загруженности сервиса. На видео, естественно, уходит больше времени. А вообще даже примерные сроки назвать очень трудно. Один из тестовых примеров обработался за 20 минут, а на другой ушло почти три часа.
Модели можно просматривать в любом браузере с поддержкой WebGL в виде нетекстурированного объекта или облака точек. Экспорт доступен только в форматы OBJ и PLY. У My3DScanner есть забавный глюк: он нередко вполне успешно создаёт неплохую модель отснятого объекта, но при этом накрывает его своеобразным «куполом», тянущимся с краёв подставки, на которой стоит сам объект. В целях экономии создатели сервиса хранят готовые модели в течение нескольких дней, а потом удаляют. Так что позаботьтесь о сохранении ваших «оцифровок» в более надёжном месте.
У всех трёх сервисов качество готовых моделей хоть и удовлетворительное, но всё равно требует ручной доработки. В основном придётся «отрезать» лишние детали или подложку. По крайней мере большую часть работы по оцифровке объекта берёт на себя автоматика. После экспериментов с «облачными» сервисами можно потренироваться работать в standalone-приложениях вроде 3DSom (Strata Foto 3D CX), iModeller, PhotoModeller и других. Возни с ними больше, но и результат гораздо более впечатляющий. Ну а потом можно и вовсе окунуться в мир настоящего 3D-моделирования. Но это уже совсем другая история. Удачи!
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
Создание 3D-моделей с помощью захвата объектов — WWDC21 — Видео
Скачать
♪ Играет басовая музыка ♪ ♪ Майкл Патрик Джонсон: Привет! Меня зовут Майкл Патрик Джонсон, и я инженер в команде захвата объектов.
Сегодня мы с моим коллегой Дэйвом Маккинноном покажем вам, как превращать объекты реального мира в 3D-модели с помощью нашего нового API фотограмметрии в macOS.
Возможно, вы уже знакомы с созданием приложений дополненной реальности с использованием наших фреймворков ARKit и RealityKit.
Возможно, вы также использовали Reality Composer и Reality Converter для создания 3D-моделей для дополненной реальности.
А теперь, с помощью Object Capture API, вы можете легко превращать изображения реальных объектов в подробные 3D-модели.
Допустим, перед вами на кухонном столе лежит свежеиспеченная пицца.
Выглядит аппетитно, правда? Предположим, мы хотим запечатлеть пиццу на переднем плане в виде 3D-модели.
Обычно вам нужно нанять профессионального художника на много часов для моделирования формы и текстуры.
Но, подождите, вам потребовалось всего несколько минут, чтобы испечь в собственной духовке! С Object Capture вы начинаете фотографировать свой объект со всех сторон.
Затем вы копируете изображения на Mac, который поддерживает новый API захвата объектов.
С помощью технологии компьютерного зрения, называемой «фотограмметрия», стопка 2D-изображений превращается в 3D-модель всего за несколько минут.
Выходная модель включает в себя как геометрическую сетку, так и различные карты материалов, и готова для добавления прямо в ваше приложение или просмотра в AR Quick Look.
Теперь давайте рассмотрим каждый из этих шагов более подробно.
Сначала вы фотографируете свой объект со всех сторон.
Изображения можно делать на iPhone или iPad, цифровую зеркальную камеру или даже дрон.
Вам просто нужно убедиться, что вы получаете четкие фотографии со всех сторон вокруг объекта.
Мы предоставим рекомендации по захвату позже в ходе сеанса.
Если вы снимаете на iPhone или iPad, мы можем использовать данные стереофонической глубины с поддерживаемых устройств, чтобы позволить восстановить фактический размер объекта, а также вектор гравитации, чтобы ваша модель автоматически создавалась с правой стороны.
После того, как вы создали папку с изображениями, вам нужно скопировать их на свой Mac, где вы сможете использовать API захвата объектов, чтобы превратить их в 3D-модель всего за несколько минут.
API поддерживается на последних компьютерах Mac на базе процессоров Intel, но будет работать быстрее всего на всех новейших компьютерах Apple Silicon Mac, поскольку мы можем использовать Apple Neural Engine для ускорения наших алгоритмов компьютерного зрения.
Мы также предоставляем HelloPhotogrammetry — пример приложения командной строки, которое поможет вам начать работу.
Вы также можете использовать его непосредственно в папке с изображениями, чтобы попытаться построить модель для себя, прежде чем писать какой-либо код.
Наконец, вы можете просмотреть выходные модели USDZ прямо на своем Mac.
Мы можем предоставить модели с четырьмя уровнями детализации, оптимизированными для различных вариантов использования, которые мы подробнее обсудим позже.
Уменьшенные, средние и полные детали готовы к использованию прямо из коробки, как пицца, показанная здесь.
Raw предназначен для пользовательских рабочих процессов.
Выбрав вывод USDZ на среднем уровне детализации, вы сможете просмотреть новую модель в AR Quick Look прямо на своем iPhone или iPad.
И это все, что нужно для создания реалистичных объектов, оптимизированных для дополненной реальности! О, подождите, помните пиццу раньше? Мы должны признаться.
Это изображение на самом деле не было фотографией, оно было создано с помощью захвата объектов на нескольких пиццах.
Затем эти модели были объединены в эту сцену в инструменте постобработки и визуализированы с использованием трассировки лучей с расширенными картами материалов.
Как видите, Object Capture может поддерживать различные целевые варианты использования, от приложений дополненной реальности на iPhone или iPad до готовых к съемкам производственных ресурсов.
В оставшейся части этого занятия мы покажем вам, как начать работу с API захвата объектов, а затем предложим наши передовые методы для достижения результатов высочайшего качества.
В разделе «Начало работы» мы более подробно рассмотрим API захвата объектов и представим основные концепции кода для создания приложения.
Далее мы обсудим передовые методы захвата изображений, выбора объектов и выбора уровня детализации.
Начнем с основных этапов использования API в macOS.
В этом разделе вы узнаете об основных компонентах API захвата объектов и о том, как их объединить.
Допустим, у нас есть новые крутые кроссовки, которые мы хотим превратить в 3D-модель для просмотра в дополненной реальности.
Здесь мы видим графическую схему основного рабочего процесса, который мы рассмотрим в этом разделе.
В этом процессе есть два основных шага: Настройка, когда мы указываем на наш набор изображений объекта; а затем процесс, где мы запрашиваем создание моделей, которые мы хотим построить.
Сначала мы сосредоточимся на блоке Setup, который состоит из двух подшагов: создание сеанса и последующее подключение связанного с ним выходного потока.
Как только у нас будет действительный сеанс, мы можем использовать его для создания наших моделей.
Первое, что нам нужно сделать, это создать PhotogrammetrySession.
Для создания сеанса предположим, что у вас уже есть папка с изображениями объекта.
Мы предоставили несколько примеров папок захвата изображений в документации по API, чтобы вы могли быстро приступить к работе.
PhotogrammetrySession — это основной класс верхнего уровня в API и главная точка управления.
Сеанс можно рассматривать как контейнер для фиксированного набора изображений, к которым будут применяться алгоритмы фотограмметрии для создания итоговой 3D-модели.
Здесь у нас есть 123 изображения кроссовок HEIC, сделанные с помощью iPhone 12 Pro Max.
В настоящее время существует несколько способов указать набор используемых изображений.
Самый простой — это просто URL-адрес файла в каталоге изображений.
Сеанс будет принимать их один за другим и сообщать обо всех возникших проблемах.
Если в изображения HEIC встроены данные о глубине, они будут автоматически использоваться для восстановления фактического масштаба объекта.
Хотя мы ожидаем, что большинство людей предпочтут входные данные из папок, мы также предлагаем интерфейс для расширенных рабочих процессов, обеспечивающий последовательность пользовательских образцов.
PhotogrammetrySample включает изображение и другие необязательные данные, такие как карта глубины, вектор силы тяжести или пользовательская маска сегментации.
После того, как вы создали сессию из источника ввода, вы будете делать запросы на реконструкцию модели.
Сеанс будет выводить результирующие модели, а также сообщения о состоянии в своем потоке выходных сообщений.
Теперь, когда мы узнали, что такое сеанс, давайте посмотрим, как его создать с помощью API.
Здесь мы видим код для выполнения первоначальной настройки сеанса из папки изображений.
Сеанс PhotogrammetrySession находится в среде RealityKit.
Сначала мы указываем входную папку как URL-адрес файла.
Здесь мы предполагаем, что у нас уже есть папка на локальном диске, содержащая изображения наших кроссовок.
Наконец, мы создаем сеанс, передавая URL-адрес в качестве источника ввода.
Инициализатор выдаст ошибку, если путь не существует или не может быть прочитан.
При желании вы можете указать дополнительные параметры конфигурации, но здесь мы просто будем использовать значения по умолчанию.
Это все, что нужно для создания сеанса! Теперь, когда мы успешно создали объект сеанса, нам нужно подключить выходной поток сеанса, чтобы мы могли обрабатывать сообщения по мере их поступления.
После подключения потока сообщений мы увидим, как запрашивать модели, которые затем поступят в этот поток.
Мы используем AsyncSequence — новую функцию Swift в этом году — для обеспечения потока выходных данных.
Выходные сообщения включают результаты запросов, а также сообщения о состоянии, такие как обновления хода выполнения.
Как только мы выполним первый вызов процесса, сообщения начнут поступать в выходной поток сообщений.
Последовательность выходных сообщений не завершится, пока сессия активна.
Он будет продолжать выдавать сообщения до тех пор, пока сессия не будет деинициализирована или в случае фатальной ошибки.
Теперь давайте подробнее рассмотрим типы сообщений, которые мы будем получать.
После выполнения запроса мы ожидаем периодического получения сообщений requestProgress с оценкой доли выполненных запросов для каждого запроса.
Если вы создаете приложение, которое вызывает API захвата объектов, вы можете использовать их для управления индикатором выполнения для каждого запроса, чтобы указать статус.
После обработки запроса мы получаем сообщение requestComplete, содержащее результирующую полезную нагрузку, например модель или ограничивающую рамку.
Если во время обработки что-то пошло не так, вместо этого для этого запроса будет выведена ошибка requestError.
Для удобства после завершения обработки всех запросов в очереди выводится сообщение processingComplete.
Теперь, когда мы познакомились с концепцией потока вывода сеанса и увидели основные выходные сообщения, давайте взглянем на пример кода, обрабатывающего поток сообщений.
Как только мы это получим, мы посмотрим, как запросить модель.
Вот код, создающий асинхронную задачу, которая обрабатывает сообщения по мере их поступления.
Может показаться, что кода много, но, как мы увидим, большая его часть представляет собой просто диспетчеризацию сообщений.
Мы используем цикл «for try await» для асинхронного перебора сообщений в session.outputs по мере их поступления.
Основная часть кода — это диспетчер сообщений, который включает вывод сообщения.
Вывод представляет собой перечисление с различными типами сообщений и полезной нагрузкой.
Каждый оператор case будет обрабатывать отдельное сообщение.
Давайте пройдемся по ним.
Во-первых, если мы получим сообщение о ходе выполнения, мы просто распечатаем значение.
Обратите внимание, что мы получаем сообщения о ходе выполнения каждого запроса.
В нашем примере, когда запрос завершен, мы ожидаем, что полезной нагрузкой результата будет файл модели с URL-адресом, по которому была сохранена модель.
Сейчас мы увидим, как сделать такой запрос.
Если запрос не выполнен из-за ошибки фотограмметрии, вместо этого мы получим сообщение об ошибке.
После завершения всего набора запросов от вызова процесса создается сообщение processingComplete.
Для приложения командной строки здесь можно выйти из приложения.
Наконец, есть и другие сообщения о состоянии, о которых вы можете прочитать в документации, например, предупреждения об изображениях в папке, которые не удалось загрузить.
Вот и все для обработки сообщений! Эта задача обработки сообщений будет продолжать повторять и обрабатывать сообщения асинхронно до тех пор, пока существует сеанс.
Хорошо, давайте посмотрим, где мы находимся в нашем рабочем процессе.
Мы полностью завершили этап установки и готовы к работе.
Теперь мы готовы делать запросы на обработку моделей.
Прежде чем мы перейдем к коду, давайте подробнее рассмотрим различные типы запросов, которые мы можем делать.
Существует три различных типа данных, которые вы можете получить из сеанса: ModelFile, ModelEntity и BoundingBox.
Эти типы имеют связанный регистр в перечислении Request: modelFile, modelEntity и bounds; каждый с разными параметрами.
Запрос modelFile является наиболее распространенным, и именно его мы будем использовать в нашем основном рабочем процессе.
Вы просто создаете запрос modelFile, указав URL-адрес файла с расширением USDZ, а также уровень детализации.
Существует необязательный параметр геометрии для использования в интерактивном рабочем процессе, но здесь мы его использовать не будем.
Для более сложных конвейеров постобработки, где могут потребоваться выходные форматы USDA или OBJ, вместо этого можно указать URL выходного каталога вместе с уровнем детализации.
Затем сеанс запишет файлы USDA и OBJ в эту папку вместе со всеми упомянутыми активами, такими как текстуры и материалы.
Приложение с графическим интерфейсом также может запрашивать RealityKit ModelEntity и BoundingBox для интерактивного предварительного просмотра и уточнения.
Запрос modelEntity также принимает уровень детализации и необязательную геометрию.
Запрос границ вернет расчетный объем захвата BoundingBox для объекта.
Это поле можно настроить в пользовательском интерфейсе, а затем передать в аргументе геометрии последующего запроса на настройку объема реконструкции.
Чуть позже мы увидим, как это работает.
Большинство запросов также имеют уровень детализации.
Уровень предварительного просмотра предназначен только для интерактивных рабочих процессов.
Очень низкое визуальное качество, но создается быстрее всего.
Основные уровни детализации в порядке возрастания качества и размера: «Уменьшенный», «Средний» и «Полный».
Все эти уровни готовы к использованию прямо из коробки.
Кроме того, уровень Raw предназначен для профессионального использования, и для его правильного использования потребуется рабочий процесс постобработки.
Мы обсудим их более подробно в разделе передового опыта.
Хорошо, теперь, когда мы увидели, какие типы запросов мы можем делать, давайте посмотрим, как это сделать в коде.
Теперь мы увидим, как одновременно сгенерировать две модели за один вызов, каждая с другим именем выходного файла и уровнем детализации.
Здесь мы видим первый вызов процесса в сеансе.
Обратите внимание, что он принимает массив запросов.
Так мы можем запросить сразу две модели.
Мы запросим одну модель с пониженным уровнем детализации и одну со средним уровнем детализации, каждая из которых будет сохранена в отдельный файл USDZ.
Одновременный запрос всех желаемых уровней детализации для захвата объекта в одном вызове позволяет движку совместно выполнять вычисления и создавать все модели быстрее, чем их последовательный запрос.
Вы даже можете запросить все уровни детализации одновременно.
Процесс может немедленно выдать ошибку, если запрос недействителен, например, если невозможно записать местоположение вывода.
Этот вызов возвращается немедленно, и вскоре в выходном потоке начнут появляться сообщения.
И это конец основного рабочего процесса! Вы создаете сеанс с вашими изображениями, подключаете поток вывода, а затем запрашиваете модели.
Время обработки каждой из ваших моделей будет зависеть от количества изображений и уровня качества.
После завершения обработки вы получите выходное сообщение о том, что модель доступна.
Вы можете открыть полученный файл USDZ кроссовок, которые вы создали, прямо на вашем Mac и просмотреть результаты в 3D под любым углом, включая низ.
Позже в этом уроке мы покажем вам, как добиться охвата всех сторон вашего объекта за один сеанс захвата, избегая необходимости объединять несколько захватов вместе.
Отлично выглядит! Теперь, когда вы ознакомились с основным рабочим процессом, мы дадим общий обзор более сложного интерактивного рабочего процесса, который также поддерживает API захвата объектов.
Интерактивный рабочий процесс позволяет внести несколько корректировок в предварительную модель перед окончательной реконструкцией, что может устранить необходимость редактирования модели после производства и оптимизировать использование памяти.
Во-первых, обратите внимание, что этап настройки и этап обработки на обоих концах этого рабочего процесса такие же, как и раньше.
Вы все равно создадите сеанс и подключите выходной поток.
Вы также будете запрашивать окончательные модели, как и раньше.
Однако обратите внимание, что мы добавили блок в середине, где представлен трехмерный пользовательский интерфейс для интерактивного редактирования модели предварительного просмотра.
Этот процесс повторяется до тех пор, пока вы не будете удовлетворены предварительным просмотром.
Затем вы можете продолжить делать окончательные запросы модели, как и раньше.
Сначала вы запрашиваете модель предварительного просмотра, указав запрос модели с уровнем детализации предварительного просмотра.
Модель для предварительного просмотра имеет низкое визуальное качество и создается максимально быстро.
Вы можете запросить файл модели и загрузить его самостоятельно или напрямую запросить объект RealityKit ModelEntity для отображения.
Как правило, одновременно выполняется запрос границ для предварительного просмотра и редактирования тома захвата.
Вы можете настроить объем захвата, чтобы удалить любую нежелательную геометрию в захвате, например пьедестал, необходимый для вертикального удержания объекта во время захвата.
Вы также можете настроить корневое преобразование для масштабирования, перемещения и поворота модели.
Свойство геометрии запроса, которое мы видели ранее, позволяет предоставить объем захвата и относительное корневое преобразование до создания модели.
Выводит 3D-модель, готовую к использованию.
Давайте посмотрим на этот процесс в действии.
Здесь мы видим пример интерактивного приложения захвата объектов, которое мы создали с помощью API для демонстрации этого интерактивного рабочего процесса.
Сначала выбираем папку Images, содержащую изображения декоративного камня, а также выходную папку, куда будет записан итоговый USDZ.
Затем мы нажимаем «Предварительный просмотр», чтобы запросить предварительную модель и предполагаемый объем захвата.
По прошествии некоторого времени появляется предварительная модель нашей скалы и ее объем захвата.
Но предположим, что нам нужна только верхняя часть скалы на выходе, как если бы нижняя часть находилась под землей.
Мы можем настроить ограничивающую рамку, чтобы избежать реконструкции нижней части модели.
Когда мы довольны, мы нажимаем Refine Model, чтобы создать новый предварительный просмотр, ограниченный этим измененным томом захвата.
Это также оптимизирует выходную модель только для этой части.
Когда уточненная модель будет готова, появится новый предварительный просмотр.
Вы можете видеть, что геометрия новой модели была обрезана, чтобы оставаться внутри коробки.
Это полезно для удаления ненужных элементов в кадре, таких как пьедестал, удерживающий объект.
Когда нас устроит обрезанный предварительный просмотр, мы можем выбрать окончательную визуализацию с полной детализацией, которая запускает процесс создания.
Через некоторое время полная детальная модель будет завершена и заменит предварительную модель.
Теперь мы можем видеть полную детализацию реальной модели, которая выглядит великолепно.
Модель сохраняется в выходном каталоге и готова к использованию без необходимости какой-либо дополнительной постобработки.
Вот и все, что нужно для начала работы с новым API захвата объектов.
Мы видели, как создать сеанс из источника ввода, такого как папка с изображениями.
Мы увидели, как подключить асинхронный поток вывода для отправки сообщений.
Затем мы увидели, как одновременно запрашивать две модели с разным уровнем детализации.
Наконец, мы описали интерактивный рабочий процесс на примере приложения RealityKit GUI для ObjectCapture.
Теперь я передам слово моему коллеге Дэйву Маккиннону, который расскажет о лучших методах захвата объектов.
Дэйв Маккиннон: Спасибо, Майкл.
Привет, меня зовут Дэйв Маккиннон, я инженер, работающий в группе захвата объектов.
В следующем разделе мы расскажем о передовых методах, которые помогут вам достичь результатов высочайшего качества.
Сначала мы рассмотрим советы и рекомендации по выбору объекта с нужными характеристиками.
Затем последовало обсуждение того, как контролировать условия окружающей среды и камеру, чтобы получить наилучшие результаты.
Далее мы рассмотрим, как использовать приложение CaptureSample.
Это приложение позволяет делать снимки в дополнение к данным о глубине и гравитации, чтобы восстановить истинный масштаб и ориентацию вашего объекта.
Мы иллюстрируем использование этого приложения как для захвата с руки, так и для захвата с поворотного стола.
Наконец, мы обсудим, как выбрать правильный уровень детализации вывода для вашего варианта использования, а также предоставим несколько ссылок для дальнейшего чтения.
Первое, что нужно учитывать при сканировании, — это выбрать объект с нужными характеристиками.
Для достижения наилучших результатов выберите объект с достаточной детализацией текстуры.
Если объект содержит бестекстурные или прозрачные области, на результирующем скане может отсутствовать детализация.
Кроме того, старайтесь избегать объектов с сильно отражающими областями.
Если объект отражающий, вы получите наилучшие результаты, рассеивая свет при сканировании.
Если вы планируете переворачивать объект во время захвата, убедитесь, что он жёсткий и не меняет форму.
Наконец, если вы хотите отсканировать объект с мелкими деталями поверхности, вам понадобится камера высокого разрешения в дополнение к большому количеству фотографий поверхности крупным планом, чтобы восстановить детали.
Сейчас мы продемонстрируем типичный процесс сканирования.
Во-первых, для достижения наилучших результатов поместите объект на незагроможденный фон, чтобы объект четко выделялся.
Базовый процесс включает в себя медленное перемещение вокруг объекта с однородным захватом его со всех сторон.
Если вы хотите реконструировать нижнюю часть объекта, переверните его и продолжайте снимать изображения.
При съемке старайтесь максимально увеличить часть поля зрения, захватывающую объект.
Это помогает API восстанавливать как можно больше деталей.
Один из способов сделать это — использовать портретный или ландшафтный режим в зависимости от размеров и ориентации объекта.
Также старайтесь поддерживать высокую степень перекрытия между изображениями.
В зависимости от объекта от 20 до 200 изображений крупным планом должно быть достаточно для получения хороших результатов.
Чтобы помочь вам начать снимать высококачественные фотографии с глубиной и гравитацией на iOS, мы предоставляем приложение CaptureSample.
Это можно использовать в качестве отправной точки для ваших собственных приложений.
Написан на SwiftUI и является частью документации для разработчиков.
Это приложение демонстрирует, как делать высококачественные фотографии для захвата объектов.
Имеет ручной режим и режим затвора по времени.
Вы также можете изменить приложение для синхронизации с проигрывателем.
В нем показано, как использовать iPhone и iPad с двойной камерой для сбора данных о глубине и встраивания их прямо в выходные файлы HEIC.
Приложение также показывает, как сохранять данные гравитации.
Вы можете просмотреть свою галерею, чтобы быстро убедиться, что у вас есть все фотографии хорошего качества с глубиной и гравитацией, и удалить неудачные снимки.
Папки Capture сохраняются в папке «Документы» приложения, откуда их легко скопировать на Mac с помощью iCloud или AirDrop.
Существуют также экраны справки, в которых обобщаются некоторые рекомендации по получению хорошего изображения, которые мы обсуждаем в этом разделе.
Вы также можете найти эту информацию в документации для разработчиков.
Для достижения наилучших результатов мы рекомендуем захват поворотного стола.
Чтобы начать работу, вам понадобится установка, как у нас.
Содержит устройство iOS для захвата, но вы также можете использовать цифровую зеркальную фотокамеру; механический поворотный стол для вращения объекта; несколько осветительных панелей в дополнение к легкой палатке.
Цель состоит в том, чтобы обеспечить равномерное освещение и избежать резких теней.
Для этого подойдет легкая палатка.
В этом случае приложение CaptureSample захватывает изображения, используя режим синхронизированного затвора, синхронизированный с движением поворотного стола.
Мы также можем перевернуть объект и сделать несколько проходов поворотным столом, чтобы захватить объект со всех сторон.
Вот результирующий файл USDZ из захвата поворотного стола, показанного в предварительном просмотре на macOS.
Теперь, когда мы рассмотрели советы и рекомендации по захвату изображений, давайте перейдем к нашему последнему разделу о том, как выбрать правильный выход.
Для сканирования доступно множество различных настроек детализации вывода.
Давайте посмотрим.
Вот таблица уровней детализации.
Поддерживаемые уровни показаны слева.
Уменьшенный и Средний оптимизированы для использования в Интернете и на мобильных устройствах, таких как просмотр 3D-контента в AR Quick Look.
Они имеют меньше треугольников и материальных каналов и, следовательно, потребляют меньше памяти.
Модели Full и Raw предназначены для высокопроизводительного интерактивного использования, такого как компьютерные игры или рабочие процессы постпродакшна.
Они имеют высочайшую геометрическую детализацию и позволяют выбирать между обожженными и необожженными материалами.
Пониженный и средний уровни детализации лучше всего подходят для контента, который вы хотите отображать в Интернете или на мобильных устройствах.
В этом случае Object Capture сожмет геометрическую информацию и информацию о материалах из необработанного результата до уровня, подходящего для отображения в приложениях дополненной реальности или с помощью функции быстрого просмотра дополненной реальности.
Оба уровня детализации, «Пониженный» и «Средний», содержат каналы материала PBR диффузного, нормального и окружающего затенения.
Если вы хотите отобразить один скан с высокой детализацией, Medium максимизирует качество по отношению к размеру файла, чтобы дать вам больше геометрических и материальных деталей.
Однако, если вы хотите отобразить несколько сканов в одной и той же сцене, вам следует использовать настройку «Пониженная детализация».
Если вы хотите узнать больше о том, как использовать Object Capture для создания мобильных или веб-приложений дополненной реальности, см. сеанс «AR Quick Look, знакомство с Object Capture».
Экспорт с полным выходным уровнем — отличный выбор для профессиональных рабочих процессов.
В этом случае вы получаете максимально подробную информацию о вашем сканировании.
Full оптимизирует геометрию скана и запекает детали в материал PBR, содержащий информацию о Diffuse, Normal, Ambient Occlusion, Roughness и Displacement.
Мы думаем, что этот выходной уровень даст вам все необходимое для самых сложных рендеров.
Наконец, если вам не нужно запекать материал или у вас есть собственный конвейер для этого, уровень Raw вернет максимальное количество полигонов вместе с максимальной детализацией диффузной текстуры для дальнейшей обработки.
Если вы хотите узнать больше о том, как использовать Object Capture для профессиональных рабочих процессов в macOS, см. раздел «Создание рабочих 3D-процессов с помощью USD».
И наконец, что наиболее важно, если вы планируете использовать сканирование как на iOS, так и на macOS, вы можете выбрать несколько уровней детализации, чтобы убедиться, что у вас есть все правильные результаты для текущих и будущих вариантов использования.
Вот и все.
Давайте вспомним, что мы узнали.
Сначала мы рассмотрели на примере основные концепции API захвата объектов.
Мы показали вам, как создать сеанс захвата объектов и использовать этот сеанс для обработки вашей коллекции изображений для создания 3D-модели.
Мы показали вам пример того, как API может поддерживать приложение интерактивного предварительного просмотра, чтобы вы могли настроить объем захвата и преобразование модели.
Далее мы рассмотрели рекомендации по сканированию.
Мы обсудили, какие типы объектов использовать, а также среду, освещение и настройки камеры, которые дают наилучшие результаты.
Наконец, мы обсудили, как выбрать правильные параметры детализации вывода для вашего приложения.
Если вы хотите узнать, как добавить Object Capture в свое собственное приложение, ознакомьтесь с приложениями для захвата iOS и CLI для обработки macOS, чтобы начать работу.
Наряду с этими приложениями поставляется множество примеров данных, которые воплощают передовой опыт и могут помочь при планировании того, как делать собственные сканы.
Кроме того, ознакомьтесь с подробной документацией по передовым методам онлайн на сайте developer.apple.com, а также с соответствующими сеансами WWDC.
Единственное, что вам остается, это выйти и использовать Object Capture для собственных сканирований.
Мы рады видеть, какие объекты вы будете сканировать и делиться ими.
♪
Преобразование 2D-изображений PNG, JPG в файл модели 3D-сетки STL Бесплатный онлайн-инструмент
Воспользуйтесь нашим бесплатным и быстрым онлайн-инструментом для преобразования файлов .2D-карты высот в форматах PNG и .JPG или логотип в файлы 3D-сетки/модели .STL (стереолитография), подходящие для печати на 3D-принтере или для загрузки в ваш любимый пакет для 3D-редактирования.
Процесс прост: после преобразования вашего изображения в оттенки серого в стандартном режиме наш инструмент исследует ваше 2D-изображение PNG и JPG (карта высот) и на основе яркости каждого пикселя создаст соответствующий «3D» пиксель, где высота пикселя определяется яркостью пикселя.Черный пиксель будет иметь высоту 0 мм и не будет включен в окончательную 3D-модель, однако белый пиксель будет иметь высоту, которую вы укажете после загрузки изображения.
В режиме Extrude наш инструмент обводит края вашего изображения и создает простые, но четкие 3D-модели из изображения, отлично подходящие для простых изображений. Режим Extrude Color также создает чистые 3D-модели, однако вместо изменения высоты модели в зависимости от яркости пикселя цвет пикселя используется непосредственно в окончательной модели для обеспечения цвета.
Файл 3D STL, созданный нашим инструментом, можно распечатать на 3D-принтере или, если вы хотите дополнительно обработать модель, его можно загрузить в большинство пакетов редактирования 3D-сетки, таких как Blender и т. д. Для разработчиков 3D-видеоигр/приложений это — это полезный инструмент для создания файлов 3D-сетки из изображений карт высот для использования в играх и других 3D-приложениях.
Нажмите кнопку » Загрузить файл » выше, чтобы начать. Ваше изображение/карта высот в формате PNG/JPG должно умещаться в пределах 600 x 600 пикселей, если оно больше этого размера, размер изображения будет соответствующим образом изменен.Как только вы отправите свое изображение, оно будет обработано как можно быстрее. Более сложные изображения могут занять больше времени, чем другие, поэтому наберитесь терпения.
Как превратить 2D-фотографии в 3D-модель с помощью Nvidia Kaolin и PyTorch — Учебное пособие по глубокому обучению 3D
Если вы читали мою последнюю статью о GANverse3D, то вы, вероятно, слышали о документе DIB-R, о котором я упоминал несколько раз. Это ключевой документ для 3D Deep Learning 2019 года.
В документе DIB-R представлен улучшенный дифференциальный рендерер как инструмент для решения одной из самых модных сейчас проблем глубокого обучения.
Для создания 3D-объектов из одного 2D-изображения.
Когда документ DIB-R был выпущен еще в 2019 году, он также включал исходный код. Но, к сожалению, отсутствовала модель машинного обучения, необходимая для запуска этого кода.
Это меня очень разочаровало, так как я действительно хотел попробовать это из первых рук.
Хорошей новостью является то, что теперь мы можем попробовать DIB-R из первых рук, потому что Nvidia выпустила часть библиотеки PyTorch Nvidia Kaolin , которая включает DIB-R, тот же дифференциальный рендерер, который использовался в документе DIB-R.
Но лучше всего то, что библиотека также включает в себя руководство, демонстрирующее возможности DIB-R, средства дифференциального рендеринга.
Когда я впервые увидел туториал, должен признаться, что не особо его понял. Кроме того, я даже не был уверен, зачем вообще нужен дифференциальный рендерер.И я даже перепутал дифференциальный рендерер с нейронной сетью, описанной в статье DIB-R, которая способна генерировать 3D-объект из одной 2D-фотографии.
На самом деле это две разные вещи.
Итак, в этом уроке я собираюсь шаг за шагом показать вам, как попробовать учебник DIB-R, а также поделюсь с вами тем, что я узнал о DIB-R и области 3D Deep Learning.
Что такое Nvidia Kaolin
Nvidia Kaolin — это не только библиотека PyTorch.Nvidia Kaolin состоит из двух основных компонентов:
- Приложение Nvidia Omniverse Kaolin — это приложение, созданное Nvidia в помощь исследователям глубокого 3D-обучения, предоставляющее инструмент визуализации наборов 3D-данных, средство создания синтетических наборов данных и даже возможность визуализации 3D-выходных данных, сгенерированных модель во время обучения.
- Библиотека Nvidia Kaolin , PyTorch API, который поддерживает различные 3D-представления, такие как облака точек, сетки и воксельные сетки, а также функции, позволяющие преобразовывать одно представление в другое (kaolin.опс). Библиотека также включает DIB-R , дифференциальный рендерер (kaolin.render), функции для загрузки данных из популярных наборов 3D-данных, таких как Shapenet, функции для загрузки 3D-моделей в различных форматах файлов, таких как obj и usd (kaolin.render). .ио). API для создания 3D контрольных точек ( kaolin.visualize ) и в будущем многое другое.
Учебное пособие по DIB-R
Необходимое программное обеспечение
Для запуска учебника DIB-R вам потребуется:
- Аппаратное обеспечение: Nvidia GPU
- Операционная система: Windows или Linux
Необходимое программное обеспечение:
- Питон 3.7
- Pytorch 1.7.0
- CUDA 11.2 или выше
- Nvidia Kaolin Library
- Nvidia Omniverse Launcher
Использование Anaconda
Мы можем облегчить нашу боль с помощью Анаконды. С Anaconda легко установить несколько версий Python, а с помощью виртуальных сред мы можем значительно снизить вероятность обнаружения несовместимых версий библиотеки.
Если у вас не установлена Anaconda, вы можете следовать этой статье, чтобы завершить установку Anaconda.
CUDA
Прежде чем что-либо устанавливать, убедитесь, что у вас установлена CUDA версии 10.2 или выше. Если нет, возможно, вы захотите прочитать одну из моих недавних статей, в которой я покажу вам, как установить CUDA 11.2.
Создание среды Conda
Давайте начнем с создания среды Conda для всего, что нам нужно установить. Назовем его каолин
$ conda create --name kaolin python=3.7
$ conda активировать каолин
Загрузка Nvidia Kaolin с Github
В рамках подготовки к нашей установке мы собираемся загрузить Nvidia Kaolin с Github.
git clone --recursive https://github.com/NVIDIAGameWorks/kaolin
cd kaolin
Какой выпуск Kaolin использовать
Инструкции по установке Kaolin говорят нам переключить ветку git на последнюю версию Kaolin, которая на сегодняшний день имеет версию 0.9.0. К сожалению, версия 0.9.0 еще не включает руководство по DIB-R. Учебник DIB-R есть только в основной ветке.
По этой причине мы собираемся выполнить настройку Kaolin непосредственно из ветки master.
Установите Pytorch 1.7.1
Прежде чем мы сможем установить Nvidia Kaolin, нам нужно установить PyTorch.
Чтобы упростить задачу, давайте установим Pytorch с Conda:
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 -c pytorch
Установите приложение Nvidia Kaolin
Прежде чем мы попытаемся запустить учебник DIB-R, хотя это и не является обязательным, желательно установить приложение Nvidia Kaolin.
Приложение Nvidia Kaolin поможет нам визуализировать 3D-модель, в данном случае часы, с которыми мы собираемся обучать DIB-R.И это также поможет нам визуализировать более широкий набор данных, откуда берутся эти часы.
Мы также будем использовать этот инструмент позже для создания дополнительных обучающих данных для другого 3D-объекта, который мы выберем из набора данных кухни.
Установите Nvidia Omniverse Laucher
Прежде чем установить Nvidia Omniverse, нам сначала нужно загрузить и установить Nvidia Omniverse Launcher. В приведенном ниже видео от Nvidia показаны точные шаги.
Установите приложение Nvidia Kaolin из программы запуска Nvidia Omniverse
Теперь, когда Nvidia Omniverse установлен, мы можем установить Nvidia Kaolin App.
Давайте откроем Nvidia Omniverse Launcher и выберем вкладку EXCHANGE .
Затем нажимаем APPS и ищем Kaolin. Затем вы можете загрузить и установить приложение Omniverse Kaolin отсюда.
Включение DIB-R в контекст
Теперь, когда мы установили все компоненты, мы готовы приступить к работе с учебником по DIB-R!
Но перед этим давайте вкратце поговорим о недавних работах GanVerse3D и DIB-R , и о том, как они связаны.
В первой части документа DIB-R Nvidia подробно описан дизайн улучшенного дифференциального рендерера, названного DIB-R .
Источник: Чен и др. Nvidia (2019 г.), DIB-RВо второй части документа DIB-R обсуждается, как использовать DIB-R, дифференциальный рендерер, для решения сложных проблем в 3D Deep Learning: для обучения модели, способной предсказывать форму 3D-объекта. , текстуры и освещение из одного изображения. В данном случае модель обучалась на данных из датасета ShapeNet и CUB Bird.
Сравнение результатов бумаги DIB-R с бумагой CMR — Chen et al. Nvidia (2019 г.), DIB-R. В последующем документе GANVerse3D Nvidia поднимается на одну ступень выше.
Вместо использования наборов данных ShapeNet и набора данных о птицах CUB они используют наборы данных, созданные с помощью StyleGAN-R и нового GAN, называемого DatasetGAN.
StyleGAN-R, также известный как визуализатор StyleGAN, похож на обычный StyleGAN, за исключением того, что его первые четыре слоя заморожены для создания изображений одного и того же класса объектов в разных ракурсах с известным положением камеры.
DatasetGAN, GAN, разработанный Nvidia, затем используется для автоматического аннотирования каждого из этих сгенерированных изображений вплоть до уровня пикселей (семантическая сегментация).
Это то, что позволяет Nvidia анимировать 3D-объекты, такие как автомобиль, после преобразования из 2D-фотографии.
Источник: Zhang et al., Nvidia (2021), DatasetGAN Источник: Zhang et al., Nvidia (2021 г.), DatasetGANО чем рассказывается в руководстве по DIB-R?
Учебник DIB-R, который мы теперь можем найти на Github, показывает, как работает дифференциальный рендерер DIB-R и как его можно использовать для восстановления структуры и текстуры 3D-модели из нескольких 2D-изображений в виде чистой задачи оптимизации . .
Но, главное, что это не так. Это не руководство по созданию 3D-моделей из одного 2D-изображения с помощью нейронной сети, описанной во второй части документа DIB-R.Вы увидите позже, когда мы пройдемся по коду, что он не использует нейронную сеть.
Бумага DIB-R
Теперь давайте просто поговорим о статье DIB-R немного подробнее, так как это поможет понять руководство по DIB-R.
Задача преобразования 2D-изображения в исходную 3D-сцену является обратной задачей традиционной компьютерной графики, отсюда и название обратная графика .
Легче сказать, чем сделать, обратная графика довольно сложно, потому что традиционные конвейеры рендеринга, такие как OpenGL, DirectX, никогда не были предназначены для восстановления визуализируемой 3D-сцены.Эти конвейеры были разработаны, чтобы быть эффективными, и они содержат множество оптимизаций, что приводит к потере части информации о 3D-сцене.
Что такое дифференциальный рендерер
Думаю, стоит поговорить о том, что такое дифференциальный рендерер и зачем он нужен.
Давайте представим, что мы сами пытаемся решить эту проблему компьютерного зрения, но не обязательно с помощью машинного обучения.
2D-фотография — это проекция 3D-сцены. Трехмерная сцена — это набор трехмерных сеток, вершин, граней, текстурных карт и источника света, видимых с камеры или точки обзора.Для простоты давайте ограничим нашу 3D-сцену одним 3D-объектом.
Если бы мы смогли восстановить исходную 3D-сцену, которая создала 2D-фотографию, мы должны быть в состоянии проверить ее, спроецировав данный 3D-объект в 2D, используя ту же точку обзора, которая использовалась для создания входной 2D-фотографии.
Грубая сила
Чтобы реконструировать наш 3D-объект, грубым подходом будет вычисление всех возможных комбинаций вершин, граней, источника света и текстуры, которые при проецировании в 2D должны создавать в 2D изображение, эквивалентное тому, которое было задано в качестве входных данных, пока положение камеры остается прежним.По сути, это проблема поиска .
Но проблема с попыткой грубой силы заключается в том, что можно создать бесчисленное количество комбинаций вершин, граней, текстурных карт и освещения.
Значит, мы не можем решить эту проблему методом грубой силы.
Градиентный подход
Попробуем найти способ поумнее!
Как насчет того, чтобы начать с исходного меша, например, сферы, которая топологически похожа на 3D-объект, который мы пытаемся восстановить, например, часы, а затем мы попытаемся внести изменения, чтобы мы придали этой сфере форму? быть похожим на часы?
Мы можем вносить изменения на разных уровнях:
- изменить геометрию входной сетки, перемещая вершины вокруг
- изменить цвета в текстуре
- изменить входное освещение
Если подумать, это похоже на то, что сделал бы художник 3D-моделирования.Они всегда будут выбирать базовую геометрию, аналогичную 3D-объекту, который они пытаются реконструировать.
Ключевым моментом является то, что если мы вносим изменения в геометрию сферы, то мы ожидаем, что геометрия будет сходиться или расходиться с целевой геометрией, и то же самое для текстуры и источника света.
Чтобы убедиться, что мы сходимся, то есть приближаемся к целевой форме, в данном случае к часам, на каждом шаге нам нужно спроецировать нашу формованную сферу в 2D, используя ту же точку обзора, что и входное 2D-изображение, и убедиться, что мы становится ближе.
Растеризация
Но, Хьюстон, у нас проблема: для преобразования 3D-сцены в 2D нам нужно использовать конвейер рендеринга графики.
В традиционном конвейере компьютерной графики метод растеризации используется для рендеринга 3D-сцены в 2D-сцену.
В процессе проецирования 3D-изображения на 2D-плоскость, растрирования треугольников и затенения пикселей происходит потеря информации из-за алгоритмов, используемых в графическом конвейере.Проблема с этими потерями заключается в том, что они вносят разрывы в изображения.
Это означает, что частое внесение минутных изменений в геометрию может вообще не привести к другому изображению. Или, что еще хуже, изображение внезапно изменится, оставив нас дальше от целевого 2D-изображения. Это нет… нет…
Из-за этих двух проблем мы не можем знать, в каком направлении двигаться в наших поисках. И это делает восстановление исходной 3D-сцены из 2D-фотографии очень сложным.
Дифференциальный визуализатор спешит на помощь
Похоже, нам нужно разработать собственный конвейер рендеринга, также известный как дифференциальный рендерер.
Этот новый конвейер рендеринга гарантирует, что для каждого изменения входного 3D-объекта будет гарантированное изменение пикселей проецируемого 2D-изображения, и это изменение будет постепенным для каждого пикселя.
Кроме того, каждый сгенерированный пиксель будет иметь производные, которые можно использовать для определения, я имею в виду, обратного распространения исходных входных данных, которые способствовали окончательному значению каждого пикселя.
К счастью, нам не нужно изобретать велосипед. DIB-R — это дифференциальный рендерер, который мы можем использовать!
DIB-R — Дифференциальный визуализатор
DIB-R — это модуль дифференциального рендеринга, который моделирует значения пикселей с помощью алгоритма дифференцируемой растеризации. Он имеет два метода присвоения значений пикселей. Один для пикселей переднего плана, а другой для пикселей фона.
пикселей переднего плана
Для пикселей переднего плана в документе указано:
.Иллюстрация дифференцируемой растеризации — Chen et al. Nvidia (2019), DIB-RЗдесь, в отличие от стандартного рендеринга, где значение пикселя присваивается от ближайшей грани, которая его покрывает, мы рассматриваем растеризацию переднего плана как интерполяцию атрибутов вершин[4].Для каждого пикселя переднего плана мы выполняем тест z-буферизации [6] и назначаем его ближайшей покрывающей грани. На каждый пиксель влияет исключительно это лицо.
Таким образом, пиксели переднего плана рассчитываются как интерполяция трех ближайших смежных вершин с использованием веса для каждой вершины, где Ii — это интенсивность пикселя.
Чен и др. Nvidia (2019 г.), DIB-RПиксели фона
Для фоновых пикселей, то есть пикселей, не закрытых какой-либо гранью 3D-объекта, значение пикселя вычисляется на основе расстояния от пикселя до ближайшей грани.
Другие дифференциальные визуализаторы
Важно подчеркнуть, что DIB-R — не первый и единственный дифференциальный рендерер. Это улучшенный дифференциальный рендерер, основанный на идеях OpenDR от 2014 года, а также SoftRas-Mesh , который предлагал аналогичный дифференциальный рендерер для DIB-R.
Сравнение дифференциальных средств визуализации — Chen et al. Nvidia (2019 г.), DIB-RКак создать 3D-модель и текстуру из одного изображения?
Итак, я упомянул только то, что мы видим.Как насчет вещей, которые мы не видим? Конечно, если у меня есть изображение только лицевой стороны часов, как он сможет понять, что находится на задней части часов?
Решение — галлюцинация. Позволь мне объяснить.
Единственная вещь в машинном обучении, которая на данный момент может что-то представить, — это GAN (генеративно-состязательная сеть).
Поэтому неудивительно, что мы также можем использовать GAN для создания 3D-объектов и текстуры.
Не вдаваясь в подробности, документ DIB-R описывает во второй части документа использование GAN с архитектурой кодер-декодер для прогнозирования положения вершин, геометрии, цветов/текстуры 3D-модели из одного изображения. с помощью 2D-контроля, с помощью дифференциального рендерера.
Назад к руководству по DIB-R
Но в учебнике DIB-R не используется ни GAN, ни какая-либо нейронная сеть. Вместо этого это просто простая демонстрация того, как мы можем использовать дифференциальный рендерер DIB-R в сочетании с PyTorch для решения проблемы оптимизации, связанной с итеративным восстановлением 3D-геометрии и текстуры с разных точек зрения одного и того же объекта, в данном случае — часы .
Пора запускать туториал!
Цель руководства по DIB-R — показать, как использовать DIB-R, дифференциальный рендерер, при попытке реконструировать 3D-геометрию и текстуру 3D-объекта, такого как часы, которые являются частью кухонного набора данных от Pixar.Этот набор данных представляет собой набор 3D-объектов, которые вы обычно найдете на кухне. Pixar любезно выложил их в открытый доступ.
Часы, которые вы можете найти в наборе данных кухни, были выбраны, потому что это относительно простой объект без топологических отверстий.
Генерация обучающих данных
Во-первых, мы используем приложение Nvidia Kaolin для создания набора данных 2D-изображений часов с разных точек зрения, в данном случае всего со 100 разных точек зрения.
Для каждой точки обзора , мы генерируем изображение RGB, маску сегментации и дополнительный файл метаданных JSON, который содержит параметры камеры, такие как фокус, апертура, фокусное расстояние и т. д.
Пример изображения часов в наборе данных, сгенерированном Nvidia KaolinFiles, который вы должны увидеть для каждой отдельной точки обзора 90 562. Загрузка данных для обучения 90 563.Для загрузки обучающих данных мы используем torch.utils.DataLoader, класс в PyTorch для загрузки наборов данных в память, готовый к использованию для графического процессора. Обратите внимание, что мы установили для pin_memory значение True, что автоматически загрузит набор данных в закрепленную память, которая будет быстрее передаваться в память графического процессора после начала обучения.
Также мы используем метод kal.io.render.import_synthetic_view для загрузки каждого изображения в обучающий набор данных, кроме того, он загружает файл семантической маски для каждого изображения и метаданные json, содержащие параметры камеры.
num_views = len(glob.glob(os.path.join(rendered_path,'*_rgb.png')))
train_data = []
для i в диапазоне (num_views):
данных = кал. io.render.import_synthetic_view (
rendered_path, i, rgb= True , semantic= True )
train_data.append(data)dataloader = torch.utils.data.DataLoader (train_data, batch_size=batch_size,shuffle= True , pin_memory=True )
Загрузка шаблона сферы
Далее загружаем сферу в формате obj. Эта сфера будет формироваться во время тренировки, чтобы она была похожа на часы.
Вид шаблона сферы в BlenderВо время обучения мы не собираемся менять топологию сферы, т.е. добавить любые отверстия.
Подготовка потерь и регуляризатора
Теперь в этом разделе блокнота Jupyter мы настраиваем функции потерь.Эти функции потерь имеют две цели:
- Чтобы узнать, насколько мы далеки от истины. Нашей основной правдой будут разные виды часов, снятые с камеры в разных местах.
Мы используем Image L1 Loss , который представляет собой абсолютную разницу между предсказанным изображением и реальным изображением.
Кроме того, мы вычисляем потерю маски , которая является мерой того, насколько предсказанная soft_mask пересекается (IoU) с маской сегментации истинной земли наших часов. - Используется в качестве регуляризатора, чтобы наказывать любую геометрию с самопересекающимися гранями и обеспечивать гладкость. В этом случае мы используем потери Лапласа и плоские потери. Это обычные используемые регуляризаторы гладкости.
потеря = (Neural 3D Mesh Renderer, Като и др. Трехмерная реконструкция формы дельфина с регуляризатором гладкости и без него.
потеря_изображения * вес_изображения +
потеря_маски * вес_маски +
потеря_лапласиана * вес_лапласиана +
плоская_потеря * плоская_весность
)
Слева: Target Dolphin В центре: 3D Reconstr. с регуляризатором Smoothness Справа: без
Настройка оптимизатора
Учебник выбирает Адама в качестве алгоритма оптимизации, используемого во время обучения.
optim = torch.optim.Adam (params=[vertices, texture_map, vertice_shift],lr=lr)
scheduler = torch.optim.lr_scheduler.StepLR(optim, step_size=scheduler_step_size,=scheduler_gamma)
Алгоритм оптимизатора Адама будет использовать vertices, texture_map и vertice_shift в качестве обучаемых параметров во время обучения.
Параметр vertice_shift , похоже, является параметром, который используется для смещения всех вершин сферы во время обучения.
Вот я догадываюсь, мне кажется, что каждый раз, когда вы меняете форму сферы, вы смещаете центр. и именно поэтому на каждом этапе обучения мы вызываем метод Recenter_Vertices , который принимает в качестве входных данных параметры vertices и vertices_shift .
def Recenter_vertices(vertices, vertice_shift):
"""Перецентрировать вершины на vertice_shift для лучшей оптимизации"""
vertices_min = вершины.min(dim=1, keepdim= True )[0]
vertices_max = vertices.max(dim=1, keepdim= True )[0]
vertices_mid = (vertices_min + vertices_max) / 2
вершин = вершины - vertices_mid + vertice_shift
возврат вершин
Обучение
Во время обучения обучение проходит в общей сложности 40 эпох. Каждая эпоха имеет 100 шагов, что является количеством просмотров, которые мы сделали за часы.
В эпоху 0 мы начинаем со сферы, которую мы ранее загрузили в блокнот.Вершины сферы хранятся в вершинах, , а исходная карта текстуры для сферы хранится в texture_map.
На каждом шаге мы визуализируем 3D-сферу, используя DIB-R дифференциальный рендерер, который формируется, в 2D с примененной к ней текстурой, используя то же положение камеры и параметры, что и камера, используемая для наземных часов истины.
Затем в конце каждого шага подсчитываем потери:
потеря = (
потеря_изображения * вес_изображения +
потеря_маски * вес_маски +
потеря_лапласиана * вес_лапласиана +
плоская_потеря * плоская_весность
)
И, наконец, обновляем сетку:
### Обновление сетки ###
потеря.назад()
оптим.шаг()
Эти две строки кода необходимы:
- loss.backward() вычисляет градиенты, я имею в виду изменения значений каждого из параметров, которые мы оптимизируем. И optim.step() обновляет параметры в соответствии с этими градиентами. Именно это имеется в виду, когда говорят, что обратное распространение.
Обратите внимание, что во время обучения для каждой эпохи мы также делаем снимок того, как сфера выглядит с течением времени. Мы визуализируем это позже, используя приложение Nvidia Kaolin.
Обучение визуализации
Последний блок кода просто показывает, как выглядит окончательная форма сферы после того, как она будет похожа на часы.
После запуска вы должны получить аналогичный результат!
На этом этапе мы должны иметь возможность просматривать замедленную съемку тренировки с помощью приложения Nvidia Kaolin . Посмотрите мое видео для этого урока, чтобы узнать, как это сделать.
Надеюсь, что эта статья была полезной и теперь вы понимаете, зачем нужен дифференциальный рендерер и почему он так важен для глубокого обучения 3D.
Удачного кодирования!
РЕСУРСЫ
Исследовательские работы
Yuxuan Zhang, Wenzheng Chen, Huan Ling, Jun Gao, Yinan Zhang, Antonio Torralba, Sanja Fidler
Wenzheng Chen, Jun Gao * , Huan Ling * , Edward J. Smith * , Jaakko Lehtinen, Alec Jacobson, Sanja Fidler
Обучение прогнозированию 3D-объектов с помощью дифференцируемого рендеринга на основе интерполяции
https:// нв-таблс.github.io/DIB-R/
Юйсюань Чжан, Хуан Лин, Цзюнь Гао, Кансюэ Инь, Жан-Франсуа Лафлеш, Адела Барриузо, Антонио Торральба, Санджа Фидлер
Набор данныхGAN: Эффективная фабрика помеченных данных с минимальными человеческими усилиями .pdf
Шунью Яо, Цу Мин Хсу, Джун-Ян Чжу, Цзяцзюнь Ву, Антонио Торральба, Билл Фримен и Джош Тененбаум
Управление 3D-сценой с помощью инверсной графики. В Достижениях в области нейронных систем обработки информации,
https://arxiv.org/pdf/1808.09351
Мэтью М. Лопер и Майкл Дж. Блэк
OpenDR: приблизительный дифференцируемый рендерер
https://files.is.tue.mpg.de/black/papers/OpenDR.pdf
Пол Хендерсон, Витторио Феррари
Обучение созданию и реконструкции 3D-сеток только с 2D-наблюдением
https://arxiv.org/pdf/1807.09259.pdf
Шунью Яо, Цу Мин Хсу, Джун-Ян Чжу, Цзяцзюнь Ву, Антонио Торральба, Билл Фримен и Джош Тененбаум
Управление 3D-сценой с помощью инверсной графики.В Достижениях в области нейронных систем обработки информации,
https://arxiv.org/pdf/1808.09351
веб-сайтов
Страница Nvidia Kaoolin Github
https://github.com/NVIDIAGameWorks/kaolin
Видео
Плейлист 3D для глубокого обучения
Использование Autodesk ReCap Photo для создания 3D-моделей для Dynamics 365 Guides и Power Apps — Dynamics 365 Mixed Reality
- Статья
- 7 минут на чтение
Пожалуйста, оцените свой опыт
да Нет
Любая дополнительная обратная связь?
Отзыв будет отправлен в Microsoft: при нажатии кнопки отправки ваш отзыв будет использован для улучшения продуктов и услуг Microsoft.Политика конфиденциальности.
Представлять на рассмотрение
Спасибо.
В этой статье
В этом руководстве описан процесс использования программного обеспечения для фотограмметрии Autodesk ReCap Photo для создания 3D-моделей, которые можно использовать с Microsoft Dynamics Guides, а также для компонентов смешанной реальности, включенных в приложения, созданные с помощью Microsoft Power Apps.
Это руководство создано только в информационных целях, чтобы показать, как ReCap Photo работает с Dynamics 365 Guides и Power Apps.Корпорация Microsoft не связана, не является партнером и не поддерживает и не спонсирует Autodesk или какие-либо ее продукты.
Что такое Autodesk ReCap Photo?
Autodesk ReCap Photo обрабатывает фотографии, сделанные с дронов, для создания 3D-представлений текущего состояния участков, объектов и многого другого. Узнайте больше об Autodesk ReCap Photo.
Установка Autodesk ReCap Фото
Вы можете подписаться на бесплатную пробную версию Autodesk ReCap Photo.
Советы по фотографии
Следующие советы помогут вам сделать качественные фотографии для фотограмметрии:
Если есть возможность, делайте фотографии в месте с постоянным освещением и без теней.
Постарайтесь убрать свою тень из кадра.
Во время фотосъемки убедитесь, что на заднем плане нет движущихся объектов.
Если камера, которую вы используете, имеет настройку расширенного динамического диапазона (HDR), отключите эту функцию и постарайтесь не регулировать экспозицию ваших фотографий во время съемки.
Делайте снимки на расстоянии одного метра друг от друга, пока вы кружите над объектом.
По возможности сохраняйте перпендикулярное положение относительно объекта во время фотосъемки.
Если объект большой, двигайтесь в боковом движении от одного конца объекта к другому. Меняйте высоту при каждом проходе, пока не захватите все поверхности.
Начать новый проект
Открыть Autodesk ReCap Photo. При первом открытии Autodesk ReCap Photo вы увидите панель инструментов.
Примечание
На панели инструментов вы можете выбрать либо Антенна , либо Объект , чтобы создать новый 3D-проект.В этом руководстве рассматривается рабочий процесс Object .
В разделе Создать 3D выберите Объект .
Щелкните в любом месте на появившейся странице в соответствии с подсказкой, а затем добавьте фотографии, которые вы хотите использовать для создания 3D-модели. После завершения импорта фотографий выберите Создать .
На странице Создать проект введите имя своего проекта, а затем выберите Запустить для обработки фотографий.Обработка может занять некоторое время, в зависимости от количества добавленных фотографий и скорости вашего интернет-соединения.
Примечание
На этом этапе вы можете использовать функцию Autocrop , если хотите. В этом руководстве показано, как позже обрезать 3D-модель.
После того, как ваша 3D-модель будет обработана, она появится в разделе My Cloud Drive панели управления. Нажмите кнопку Загрузить этот проект из облака (стрелка вниз), чтобы загрузить 3D-модель.
Выберите место для сохранения модели, а затем выберите Выберите папку .
Вы увидите новую 3D-модель с введенным вами именем. Выберите модель, чтобы открыть ее в редакторе.
Ваша 3D-модель загружена на страницу редактора.
Редактировать 3D-модель
Несколько инструментов доступны слева и внизу страницы редактора.Вы можете использовать эти инструменты для очистки вашей 3D-модели. Поэкспериментируйте с этими инструментами, чтобы очистить части вашей 3D-модели, которые вы не хотите оставлять. В этом уроке показано, как удалить пол из модели.
В нижней части страницы редактора выберите инструмент Lasso/Fence .
Используйте инструмент Lasso/Fence , чтобы выбрать все, кроме объекта, который вы хотите сохранить.
Нажмите Введите , а затем нажмите Удалить .Возможно, вам придется повторить эти шаги несколько раз, чтобы удалить большую часть пола.
Выберите инструмент Slice , чтобы удалить оставшуюся часть пола. Этот инструмент создает секущую плоскость, которую можно использовать для вырезания геометрии ниже определенной точки. В диалоговом окне Slice доступны следующие настройки:
Заливка : выберите этот параметр, чтобы закрыть модель на основе границы открытой области модели. В некоторых случаях заполнение может оказаться непростым.
Без заливки : Выберите этот параметр, чтобы оставить модель открытой.
Преобразовать плоскость : Установите этот флажок, чтобы выровнять плоскость так, чтобы пол не был виден.
Когда модель будет выглядеть так, как вы хотите, выберите Применить .
Остальная часть пола удалена из вашей 3D-модели, а сетка внизу заполнена.
Уничтожение 3D-модели для повышения производительности
После того, как вы закончили удаление частей сетки, которые вы не хотите сохранять, вы можете сократить ее до количества полигонов, которое соответствует целевым показателям производительности для Dynamics 365 Guides и Power Apps.
В левой части страницы редактора выберите инструмент Decimate mesh .
В диалоговом окне Decimate в поле Целевое количество лиц укажите количество полигонов, которое уравновешивает визуальную точность с требованиями к производительности.
Примечание
Если точная геометрия не очень важна, не устанавливайте флажок Лучшая геометрия , поскольку при этом будут удалены ваши текстуры. Текстуры, созданные с помощью фотограмметрии, добавляют значительную детализацию 3D-модели.
Выбрать Удалить все .
3D-модель оптимизирована и готова к экспорту.
Экспорт 3D-модели в виде файла OBJ
Прежде чем вы сможете использовать 3D-модель в Dynamics 365 Guides или Power Apps, она должна быть в формате файла GLB. На этом шаге вы экспортируете модель в виде файла OBJ, который затем можно преобразовать в файл GLB.
В левой части страницы редактора нажмите кнопку Экспорт , а затем нажмите кнопку Экспорт модели , чтобы открыть настройки экспорта.
В диалоговом окне Экспорт модели в поле Экспортировать как выберите OBJ в качестве типа файла экспорта, а затем в поле Размер выберите 4096×4096 в качестве размера текстуры. Когда вы закончите, выберите Export .
Примечание
Хотя вы можете выбрать больший или меньший размер текстуры, имейте в виду, что размер повлияет либо на производительность, либо на визуальную точность.
Выберите место для сохранения файла, а затем выберите Выберите папку .
3D-модель экспортируется в выбранную вами папку.
Используйте Blender для преобразования файла OBJ в файл GLB
Существует несколько приложений, которые можно использовать для преобразования файла OBJ в файл GLB. В этом уроке показано, как использовать Blender.
Что такое блендер?
Blender — это бесплатный пакет для создания 3D-объектов с открытым исходным кодом. Он поддерживает весь конвейер 3D: моделирование, монтаж, анимацию, симуляцию, рендеринг, композитинг и отслеживание движения, а также редактирование видео и создание игр.
Если вы используете Blender для подготовки 3D-моделей, ознакомьтесь с информацией на веб-сайте Blender и загрузите последнюю версию для Windows.
Импорт вашей 3D-модели в Blender
Открытый блендер. Новая сцена создается автоматически.
Щелкните куб правой кнопкой мыши и выберите Удалить , чтобы удалить его.
В меню Файл выберите Импорт > Волновой фронт (.obj) для импорта файла OBJ.
В разделе Import OBJ выполните следующие действия:
Снимите флажки Object и Group и установите флажок Image Search .
Выберите Импорт OBJ . Blender импортирует 3D-модель как отдельный элемент и ищет во вложенной папке любые материалы.
Экспорт 3D-модели в виде файла GLB
Последним шагом является экспорт модели в виде файла GLB, чтобы ее можно было использовать с Dynamics 365 Guides или Power Apps.
В Blender в меню File выберите Export > glTF 2.0 (.glb/.gltf) .
В разделе Export glTF 2.0 в поле Format выберите glTF Binary (.glb) , а затем установите флажок Selected Objects .
Введите имя для вашего файла.
Выберите Экспорт glTF 2.0 .
Просмотр 3D-модели в Dynamics 365 Guides или Power Apps
После подготовки 3D-модели воспользуйтесь следующими ссылками, чтобы узнать больше об использовании модели в Dynamics 365 Guides или Power Apps:
Дополнительная информация
Скриншоты для этого руководства были взяты из программы Autodesk ReCap Photo, чтобы предоставить четкие инструкции по использованию программы ReCap Photo. Чтобы узнать больше о ReCap Photo и Blender, см. следующие страницы:
Корпорация Microsoft не несет ответственности и прямо отказывается от какой-либо ответственности за ущерб любого рода, возникающий в результате использования Autodesk ReCap Photo или использования этих инструкций.Этот документ создан только для предоставления общей информации нашим клиентам и не принимает во внимание какие-либо индивидуальные бизнес-планы или спецификации.
Использование в этом документе имен и изображений, зарегистрированных товарными знаками, предназначено исключительно для информативных и описательных целей, и корпорация Microsoft не делает никаких коммерческих заявлений в отношении их использования или предложений о спонсорстве или одобрении.
3D Print Photo — Как преобразовать изображение (JPG / PNG) в STL
Нет никаких сомнений в том, что 3D-печать дает жизнь всем проектам.Но знаете ли вы, что это также может вдохнуть жизнь в вашу картину?
А если да, знаете ли вы, что можете преобразовать свое изображение в фотографию, напечатанную на 3D-принтере? Дело в том, что если у вас есть его изображение, вы можете превратить его в 3D-модель и распечатать на 3D-принтере.
В Интернете доступно множество поставщиков решений, которые могут преобразовывать не одно, а множество изображений в 3D-модель.
В этой статье мы поможем вам найти обзор различных решений. Статья предназначена для того, чтобы ответить на ваши вопросы, такие как «как распечатать фотографию на 3D-принтере?», «как преобразовать изображение в STL?»
Тем не менее, есть одна вещь, о которой вам нужно позаботиться, это то, что какие бы результаты ни были получены, они сильно зависят от исходного материала.Таким образом, мы не говорим, что упомянутые ниже решения напечатают на 3D-принтере плохую фотографию и превратят ее в хорошую.
И именно поэтому ни одно отдельное решение не может быть оценено таким образом, что это единственное решение, подходящее для всех. Основываясь на вашем опыте, в этой статье вы найдете несколько практических советов, которые помогут вам создать наиболее эффективную съемку.
Полный процесс, т. е. от съемки изображения до выбора материалов для 3D-печати, вы можете выполнить весь процесс самостоятельно.Если вы не знаете, как использовать программное обеспечение для 3D-моделирования, вы можете получить небольшую помощь в работе с ним в Интернете или у дизайнера, чтобы получить файл для 3D-печати.
Как изображение становится 3D-моделью?
Три вещи, от которых в этом случае будет зависеть результат вашей 3D-модели:
- Количество и качество фотографий, которые вы делаете.
- Чем больше фотографий вы сделаете во время съемки.
- Чем выше разрешение этих фотографий.
Это не означает, что вы должны быть профессиональным 3D-художником или 3D-дизайнером, но это, безусловно, означает, что вы должны иметь хотя бы немного навыков работы с 3D и достаточно времени. При этом каждый может добиться хорошего 3D-персонажа или объекта и распечатать его.
С помощью этого эксперимента вы обязательно узнаете тот факт, что 3D-принтеры могут дать вам одни из лучших изображений. Существует огромное количество вариантов, по которым можно создать 3D модель.
Некоторые из вас могут захотеть создать аватар или модель, другие захотят создать модель САПР с изображениями из видеоигр.Все это возможно.
Решения здесь зависят от количества изображений, которые вы уже сделали для создания 3D-модели. Есть также способы создать 3D-модель даже с одной картинкой.
Создание 3D-модели из количества фотографий возможно, но не следует забывать о возможностях, и детали, разрешенные в этой опции, будут более ограниченными.
Например, в этом случае невозможно получить идеальный файл с изображением вашего питомца или вашего дома в формате 360° на основе одной фотографии.Чтобы получить желаемую форму с помощью процесса печати, лучше иметь несколько изображений для детального моделирования и получения впечатляющего результата.
Напечатать идеальную CAD-модель можно, но это пока мечта.
Три варианта выполнения задачи по 3D-печати фотографии
Несмотря на то, что новичкам это кажется пугающим, 3D-моделирование позволяет создавать модели из 2D-изображений. И это может быть единственным способом, которым человек может более интуитивно войти в это поле.Существует несколько способов преобразования файлов JPG и PNG в файлы STL для получения 3D-модели из изображения.
Но прежде чем мы начнем объяснять опции, мы хотели бы поговорить о том, чего они не делают. Хотя 3D-модели действительно можно создавать из плоских изображений, методы, описанные в этой статье, в частности, не позволяют создавать полные, подробные 3D-модели.
Вместо этого метод предназначен для создания плоских 2D-проектов в трехмерной, но все же более или менее плоской физической форме.
Так что, если тебе интересно, что ты сразу же получишь бюст Моны Лизы по ее изображению… Ну, друг, ты не сможешь этого сделать. Но это не означает, что следующие опции не имеют своего применения!
Вариант 1: 3D-конструктор
Пользователи предпочитают этот вариант, вероятно, потому, что он самый простой в использовании. Это приложение предустановлено практически на любом компьютере с современной Windows, поэтому вам не нужно скачивать его откуда угодно и заботиться о его безопасности.
Приложение также имеет функцию, которая может очень легко преобразовать изображение в файл STL или OBJ, что является первой предпосылкой для любого приложения, которое вы планируете использовать. Также следует отметить, что это приложение не будет работать на Mac.
Наконец, шаги к 3D-печати фотографии с помощью этого приложения:
- Если ваш ноутбук/компьютер не обновлен, вам придется приложить усилия, чтобы загрузить это приложение из Магазина Microsoft.
- После этого вам нужно будет перетащить выбранное изображение в рабочую область или нажать «Добавить» в меню «Вставка» и выбрать изображение.
- Шаг номер 3 требует, чтобы вы сначала отрегулировали ползунки «Уровни» и «Сглаживание». Продолжайте делать это до тех пор, пока ваше изображение не станет четким и четким. Другой вариант для вас здесь — переключаться между методами «Контур», «Карта высот», «Край» и «Штамп» для получения различных эффектов.
- Когда вы довольны и можете увидеть одну из ранее воображаемых моделей, вы можете нажать кнопку «Импортировать изображение». Это позволит вам изменить масштаб с помощью инструмента «Масштаб», расположенного в нижней части рабочей области.Во время масштабирования рекомендуется зафиксировать пропорции, щелкнув замок в том же меню.
Вариант 2: Кура
Пользователи, у которых нет компьютера с Windows, предпочитают использовать встроенную функцию Cura Ultimaker. Хотя это спорно, инструмент здесь не такой мощный, как в 3D-конструкторе, но он отлично работает и может даже использоваться для создания Lithophanes.
Также проще нарезать с помощью Cura, потому что вам не нужно столько экспортировать и импортировать.
Все, что вам нужно для 3D-печати фотографии с помощью этого приложения:
- Загрузите слайсер Ultimaker Cura с веб-сайта Ultimaker.
- Импортируйте выбранное изображение в Cura, перетащив его в рабочую область.
- Когда вы это сделаете, появится меню с различными настройками, которое позволит вам изменить высоту, ширину, толщину, гладкость и многое другое.
- Наконец, вы можете экспортировать файл изображения в формате STL или OBJ.Это можно сделать, нажав «Файл», затем выбрав «Экспорт», или вы можете сразу нарезать его для 3D-печати.
Вариант 3: Преобразователь литофана
Этот способ преобразования изображения в файл для 3D-печати включает преобразование изображения в литофан.
Для всех тех, кто не знает, что такое литофан, это трехмерный объект, который использует разницу в толщине для изменения количества света, проходящего через себя.
Вариации внутри него создают темные и светлые части изображения, которые как бы «встроены» в объект.Изображение здесь, однако, видно только тогда, когда сзади есть свет, и оно не может состоять из более чем одного цвета.
И есть много способов сделать литофана, но, возможно, самый простой из них — это использовать изображение в преобразователе литофана. Это приложение является гораздо более мощным инструментом, который не только имеет больше настроек, но и дает лучшие результаты, чем метод Cura.
Шаги для 3D-печати фотографии с помощью этого приложения:
- Нажав на меню изображения, загрузите свое изображение на сайт.
- В меню модели вам нужно будет выбрать форму вашего литофана.
- Нажав на нее, перейдите в «Настройки». И в опции «Настройки модели» измените «Максимальный размер» на самый большой размер, до которого, по вашему мнению, вы будете масштабировать изображение.
- Перейдя к опции «Настройки изображения» в меню «Настройки», вы можете изменить множество различных настроек, но единственное необходимое изменение — это первый ползунок на «Позитивное изображение».
- Вернитесь в меню «Модель» и нажмите «Загрузить результат».Если вы собираетесь распечатать этот STL-файл на 3D-принтере, рекомендуется печатать его вертикально со 100-процентным заполнением.
Тот факт, что изображение является 2D-файлом, означает, что вы сможете играть только с двумя измерениями, когда используете его для создания 3D-модели.
Для игры здесь с файлом, инструментом, который поможет вам создать третью ось для создания новой геометрии из выбранного компонента, является экструдер.
Именно этот инструмент поможет вам придать объем вашей 2D-модели на основе определенного алгоритма.Это распространенный инструмент, который вы можете найти практически в любом программном обеспечении, упомянутом выше.
Как преобразовать более одного изображения в 3D-модель?
Для всех, кто хочет создать 3D-модель на основе 10 или 20 изображений, есть специальная вещь, которая недоступна в упомянутых выше приложениях.
Для начала вам нужно мысленно упорядочить картинки и вылепить свою модель, основываясь на размерах и деталях, которые вы видите на картинках.
Чтобы продолжить, создание таких моделей заняло бы много времени. Таким образом, единственный способ, если вы хотите получить оптимальный результат, — это преобразовать множество изображений для создания очень точного цифрового дизайна. Только тогда вы сможете напечатать интересную модель и в конечном итоге получить хорошее качество печати.
Подводя итог, у вас есть 3 решения для перехода от 2D к 3D, если вы хотите преобразовать более одного изображения, т.е.
- Можно попробовать решения, описанные для одной фотографии.
- Вы можете начать экспериментировать с программами для 3D-моделирования, такими как Zbrush или Sculptris.
- Вы можете попросить своего друга, который также является 3D-дизайнером, помочь вам смоделировать ваш 3D-файл.
Действительно, большее количество точек зрения привело бы к созданию более подробной и точной 3D-модели.
Для создания 3D-объектов из 3D-печати вам необходимо будет создать подробную модель для получения ценного результата. Вот несколько советов, которые вы можете использовать, чтобы сделать вашу картинку одной из лучших, которые присутствуют в плане 3D-модели.Для обеспечения этого лучше всего использовать фотограмметрию.
Фотограмметрия — это метод, который подразумевает процесс сбора различных точек в пространстве с нескольких фотографий. Во-первых, вам нужно будет щелкнуть те номера фотографий объекта со всех возможных ракурсов.
Во-вторых, вам нужно будет загрузить их в программное обеспечение для фотограмметрии, и вы сможете создать файл для 3D-печати.
Заключение
Последним шагом для завершения 3D-печати фотографий является завершение и оптимизация 3D-файла в программном обеспечении, отличном от описанного выше.Мы говорим это, потому что часто случается так, что ваш 3D-файл может быть не для печати, и очень сложно создать сплошную сетку на основе набора изображений.
Итак, некоторые 3D-программы предлагают эффективные инструменты для создания правильных файлов. Вы должны убедиться, что ваш файл находится в таком программном обеспечении. Только тогда вы сможете работать с разрешением и размером вашего файла или создавать высоко- или низкополигональную сетку.
После этого вам нужно будет выбрать формат из множества представленных, таких как 3DS, OBJ, C4D, DAE, STL и STL.Последней частью 3D-печати фотографии является 3D-печать файла путем загрузки его 3D-изображения в какой-либо онлайн-сервис 3D-печати.
Существует множество возможностей для 3D-печати моделей, поскольку доступны различные типы материалов для 3D-печати. Вы должны выбрать материал для 3D-печати, и это определит аддитивный процесс.
Создание 3D-моделей из фотографий с помощью RealityKit в Swift
iOS
Опубликовано 22 июня 2021 г.
RealityKit Object Capture — это функция, представленная в Xcode 13, которая позволяет создавать трехмерные объекты из фотографий с использованием процесса, называемого фотограмметрией.Хотя RealityKit предназначен для розничных продавцов, чтобы улучшить их опыт покупок в Интернете, создавая модели из таких вещей, как мебель, и используя их в дополненной реальности, RealityKit невероятно прост в использовании для всего, что вам может понадобиться, например, для 3D-печати случайных вещей из вашего дома.
Для использования захвата объектов необходимо:
- Использовать macOS 12 (эта функция недоступна в iOS!)
- Предоставьте фотографии объекта, который вы хотите запечатлеть
Сфотографировать объект несложно, хотя вам, возможно, придется настроить окружающую среду, чтобы получить лучшие результаты.Идея состоит в том, чтобы поместить ваш объект в хорошо освещенное место и постоянно фотографировать, когда вы его обходите. Вы также можете сфотографировать нижнюю часть объекта, если хотите, чтобы это тоже было смоделировано, сфотографировав объект, перевернутый вверх дном, в той же среде.
Для работы Захвата объектов изображениям не нужно иметь какой-либо определенный порядок или наименование, и нет минимального количества снимков, которые вам необходимо сделать, хотя чем больше вы будете делать, тем лучше будут ваши результаты.Я обнаружил, что примерно 30 изображений уже дают хороший результат. Вполне легко!
Создание приложения CLI для фотограмметрии
Чтобы использовать захват объектов, начните с создания нового приложения командной строки в Xcode и добавьте новый класс с именем Session
:
импортный фундамент
импорт RealityKit
импортный комбайн
сессия последнего класса {
пусть inputFolder = URL (fileURLWithPath: "/Users/myUser/myPictures", isDirectory: true)
let outputFile = URL(fileURLWithPath: "/Users/myUser/result.долларов США")
var подписчик: AnyCancellable?
func run() выдает {
}
}
Object Capture работает, создавая объект PhotogrammetrySession
, настраивая его, передавая папку, содержащую наши изображения, и ожидая результата. Результат приходит асинхронно через Combine, поэтому обязательно создайте объект подписчика
, как в сниппете.
В методе run()
создайте PhotogrammetrySession
с конфигурацией по умолчанию:
пусть конфигурация = PhotogrammetrySession.Конфигурация()
let session = try PhotogrammetrySession(
ввод: inputFolder,
Конфигурация: конфигурация
)
Возможна доработка финальной модели, что мы и увидим дальше. Пока давайте использовать настройки по умолчанию.
С помощью сеанса мы должны теперь создать запрос на изготовление модели из наших фотографий:
пусть запрос = PhotogrammetrySession.Request.modelFile(url: outputFile)
Чтобы завершить это, мы должны наблюдать за ходом запроса и ждать его завершения.Как упоминалось ранее, этот процесс выполняется асинхронно с Combine, поэтому мы должны прикрепить подписчика к выходному свойству сеанса .
Кроме того, поскольку это приложение CLI, нам необходимо убедиться, что приложение остается активным во время создания модели. Для простоты я решил привязать к операции семафор:
пусть семафор = DispatchSemaphore (значение: 0)
подписчик = session.output.sink(receiveCompletion: { завершение в
печать(завершение)
выход(0)
}, receiveValue: { вывод в
релейный выход {
кейс.обработкаПолная:
print("Обработка завершена")
семафор.сигнал()
случай .requestComplete (пусть запрос, пусть результат):
print("Запрос выполнен")
печать(запрос)
печать(результат)
семафор.сигнал()
случай .requestProgress (пусть запрос, пусть фракция будет завершена):
print("Выполняется запрос: \(fractionComplete)")
по умолчанию:
печать (вывод)
}
})
попытка сеанса.процесс (запросы: [запрос])
семафор.wait()
Как видите, многие аспекты процесса можно наблюдать. В данном случае меня интересует только фактический прогресс.
Перед запуском приложения отредактируйте файл main.swift
, чтобы вызвать наш метод run()
:
попробуй! Сессия().Выполнить()
Запуск процесса занимает некоторое время, а его завершение может занять несколько минут, поэтому не беспокойтесь, если вы получите кучу отпечатков, но сначала не продвинетесь вперед.Подождите немного, и он начнется!
Настройка сеансов фотограмметрии
Для точной настройки результатов можно настроить два аспекта захвата объектов. Первый — это детали вывода, которыми вы можете управлять, чтобы определить количество полигонов в окончательной модели:
.пусть запрос = PhotogrammetrySession.Request.modelFile(
URL: outputFile,
Деталь: .preview
)
Детали варьируются от более низкого качества предварительного просмотра
до высококачественного полного
.Попробуйте поиграть с настройками более низкого качества, прежде чем пытаться создать более качественный.
Второй аспект, который можно настроить в самом вводе:
переменная конфигурация = PhotogrammetrySession.Configuration()
конфигурация.sampleOverlap = .low
конфигурация.sampleOrdering = .unordered
конфигурация.featureSensitivity = .high
Структура конфигурации позволяет вам предоставить больше информации о ваших фотографиях, что может привести к улучшению модели. sampleOverlap
позволяет вам описать, насколько перекрывается каждая фотография, sampleOrdering
позволяет указать, упорядочены ли ваши фотографии (что ускорит процесс), а featureSensitivity
указывает, насколько сильно RealityKit должен пытаться искать для функций в вашем объекте, которые следует использовать в случаях, когда объект не имеет большого количества различимых структур, краев или текстур.
Превратите 3D-модели в интерактивные вращения на 360 градусов • Sirv
Большинство вращений продукта на 360° фотографируются на поворотном столе.Но не все…
3D-модели можно превратить в интерактивные вращения, а затем встроить в ваш веб-сайт с помощью Sirv. Природа 3D-моделей позволяет анимировать их способами, которые были бы невозможны при использовании традиционной 360-градусной фотографии.
Примеры
В этом анимированном спиральном кольце вращается твердый серебряный шар. Отображение этого продукта в реалистичной 3D-анимации, пожалуй, единственный способ действительно показать на экране, как продукт выглядит/ощущается в реальной жизни. Созданный Hockley Mint, это сверхплавное вращение из 200 кадров, поэтому загрузка занимает некоторое время:
Эти телефоны Samsung кажутся подвешенными под углом, благодаря чему вы можете видеть кнопки на всех размерах, ширине, передней и задней панелях.Размещение двух телефонов рядом друг с другом под разными углами помогает создать перспективу и проявить творческий подход. Невероятно детализированные и текстурированные, трудно сказать, действительно ли эти изображения были созданы с нуля в виде 3D-модели. Эта демонстрация, созданная 3DFuture, использует 72 изображения:
Эта анимация для iPad показывает, как работает откидная крышка на iPad. Это еще одно плавное вращение, созданное Apple, с использованием 92 изображений:
.Встроить 3D-модель
После создания 3D-модели в программном обеспечении для 3D-моделирования (например, Blender, SketchUp, DAZ 3D или Rhinoceros) набор изображений в формате JPEG или PNG можно экспортировать и загрузить в Sirv.Скопируйте и вставьте HTML-код, чтобы встроить трехмерное изображение на свою веб-страницу.
Сам файл модели не загружается в Sirv, поэтому вращение не регулируется бесконечно, как в настоящем 3D. Sirv предлагает вам функцию, которая работает во всех браузерах, мобильных устройствах и планшетах с быстрой загрузкой, масштабированием изображения и полноэкранным увеличением. Воспользовавшись опциями оптимизации изображений в Sirv, вы также убедитесь, что ваши изображения отображаются максимально быстро. Формат изображения WebP, изменение размера и сжатие могут помочь сократить время загрузки.
Сколько кадров
Анимация Sirv может содержать до 500 кадров. Наличие такого количества кадров делает вращение невероятно плавным.
Хотя большее количество кадров кажется более плавным, мы рекомендуем не превышать 100 кадров, чтобы пользователи не ждали загрузки слишком долго.
360-фотография против 360-моделирования
Есть плюсы и минусы каждого метода получения изображений для вращения на 360 градусов. Некоторые факторы, которые следует учитывать, включают:
360 фото | 360 моделирование | |
---|---|---|
Взаимодействие с пользователем | Отличные отзывы пользователей, очень реалистичный опыт | Отличный пользовательский интерфейс, если он хорошо смоделирован, как в примерах выше |
Подходит для | Все виды продукции | Прецизионные изделия, такие как ювелирные изделия и электроника |
Мастерство | Для достижения наилучших результатов требуется профессиональная фотостудия со специальным оборудованием | Для достижения наилучших результатов требуется профессиональный художник по 3D-моделированию |
Срок изготовления | от 10 минут до 2 часов | от 2 часов до 8 часов |
Стоимость | Обычно 40–200 долларов США за продукт | Обычно 200–800 долларов США за продукт |
Наем специалиста | Профессиональные фотостудии 360 можно найти по всему миру | Трудно найти профессионалов в области 3D-моделирования изделий |
Кредит: Спасибо 3D Future и Hockley Mint за демонстрации.