SA1918 — Создание 3D моделей с захватом объектов
Содержание страницы
Предоставление правдоподобного опыта дополненной реальности во многом зависит от качества ваших 3D-моделей. Однако, как оказалось, не многие из нас обладают навыками, необходимыми для создания реалистичных 3D-моделей. К счастью, RealityKit предлагает удивительно простое решение, известное как захват объектов. Захват объектов использует фотограмметрию для создания реалистичных 3D-моделей из реальных объектов — и в этой главе вы узнаете все об этом.
Что такое фотограмметрия?
Фотограмметрия-это процесс экстраполяции 3D-геометрической информации путем оценки различных измерений обнаруженных точек объектов на нескольких фотографиях. Вау, это очень много для обработки! Но, проще говоря, это означает, что вы можете использовать различные фотографии одного объекта, сделанные с разных позиций и углов, для создания текстурированной 3D — модели.

Подготовка к захвату объекта
Прежде чем вы начнете делать снимки и преобразовывать реальные объекты в их цифровые контрчасти, вам сначала нужно построить себе фотобудку. Я полагаю, вы могли бы пропустить использование фотобудки, но ее наличие значительно облегчает процесс.
Строительство фотобудки
Чтобы построить фотобудку с ограниченным бюджетом, вам нужно всего несколько вещей:
Во-первых, вам понадобится бесшовный фон. Если у вас есть 3D — принтер — или вы знаете кого — то, кто это делает, — вы можете распечатать себе фотографическую подставку для развертки от Thingiverse-Photographic Sweep Stand.

Для дополнительной поддержки закрепите подставки на куске картона.
Затем вам понадобится способ захвата объекта на 360°; вам также понадобится способ стабилизации камеры — в данном случае вашего телефона. Один из вариантов-приобрести недорогую lazy susan и небольшой штатив для телефона.
Для достижения наилучших результатов поместите ленивую Сьюзен на подставку Photographics Sweep.

Вам также понадобится какое — то освещение-и, конечно же, что-то фотографировать.

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

Давайте подробнее рассмотрим, как вы можете настроить свой новый DYI photo booth:
- Источник света. Поместите источник света перед объектом, немного выше камеры. Если свет слишком яркий, вы можете использовать белый лист бумаги, чтобы рассеять его. Цель состоит в том, чтобы устранить все тени, отбрасываемые объектом.
- Камера. Установите камеру на штатив перед объектом. Помните, что штатив помогает стабилизировать камеру во время съемки.
- Подставка для фотографической развертки. Поместите подставку для развертки на стол, чтобы создать бесконечный фон позади вашего объекта.
- Ленивая Сьюзен. Поместите ленивую Сьюзен на подставку для подметания и поместите объект поверх нее. Для достижения наилучших результатов найдите центр ленивой Сьюзен, чтобы объект оставался в одном месте при вращении ленивой Сьюзен.
- Чашка кофе. Кофе — самая важная часть вашего маленького проекта DYI, поэтому всегда держите чашку кофе под рукой.
Отлично, вы готовы захватить свой первый объект.
Фотографирование
Хотя Фотограмметрическая структура RealityKit позволяет преобразовывать объекты реального мира в 3D-модели, съемка этих объектов требует терпения — и иногда может быть сложной. Вот несколько вещей, которые вы можете сделать, чтобы помочь:
- Убедитесь, что вы захватили все углы объекта.
- Убедитесь, что есть по крайней мере 70% перекрытия от одной фотографии к другой.
- Используйте фон без беспорядка, желательно темный.
- Ваш объект требует некоторой текстуры для процесса фотограмметрии, чтобы отслеживать его особенности.
- Осветите свой объект спереди, чтобы устранить тени, насколько это возможно.
- Поместите объект на белую или прозрачную, не отражающую поверхность.
Процесс захвата изображений не всегда прост — и, несмотря на всю вашу тяжелую работу, все еще может пойти не так, как в случае с этой серией изображений:

Хотя эта коллекция изображений действительно захватывает мистера Свинью с нескольких углов 45°, не было достаточного перекрытия от одной фотографии к другой, что привело к сбою процесса фотограмметрии. Для достижения лучших результатов вам необходимо иметь как минимум 70% перекрытия от одного изображения к другому.
Создание приложения для фотограмметрии
Давайте рассмотрим практический пример. Отличное место для начала-собственный пример фотограмметрии Apple: создание приложения командной строки Photogrammetry
Загрузите проект и извлеките его. Затем в Xcode откройте HelloPhotogrammetry.xcodeproj.
HelloPhotogrammetry-это приложение командной строки. С приложениями командной строки у вас есть возможность скомпилировать и использовать программу в терминале, или вы можете просто запустить ее из Xcode, что вы и сделаете здесь.
Прежде чем запустить приложение, давайте рассмотрим ключевые компоненты, которые делают фотограмметрию возможной. Когда проект открыт, выберите main.swift.
Проверка поддерживаемого оборудования
Фреймворк Photogrammetry работает только на определенном оборудовании с графическим процессором с поддержкой трассировки лучей. По этой причине вы можете запустить это приложение только на Mac с установленной macOS Monterey.
Первые контрольные испытания для реконструкции объекта:
private func supportsObjectReconstruction() -> Bool { for device in MTLCopyAllDevices() where !device.isLowPower && device.areBarycentricCoordsSupported && device.recommendedMaxWorkingSetSize >= UInt64(4e9) { return true } return false }
Здесь supportsObjectReconstruction()
проверяется, что хотя бы одно металлическое устройство соответствует минимальным требованиям для реконструкции объекта. Это должно быть мощное устройство с как минимум 4GB
оперативной памятью, с барицентрическими координатами фрагментного шейдера.
Вторая проверка тестирует графический процессор с поддержкой трассировки лучей:
private func supportsRayTracing() -> Bool { for device in MTLCopyAllDevices() where device.supportsRaytracing { return true } return false }
Здесь supportsRayTracing()
выполняется перебор всех доступных металлических устройств, пока не будет найдено одно, поддерживающее трассировку лучей. Отлично, похоже, у вас есть оборудование, так что давайте двигаться дальше.
Конфигурация фотограмметрической сессии
Волшебный компонент, который делает всю работу, — это PhotogrammetrySession
. Прежде чем начать запрос, сначала необходимо настроить сеанс:
typealias Configuration = PhotogrammetrySession.Configuration
Этот код определяет псевдоним Configuration
конфигурации сеанса. Затем параметры командной строки анализируются и обрабатываются для установки следующего:
- Порядоквыборки. Определяет порядок изображений. Они не упорядочены или упорядочены?
- FeatureSensitivity. Определяет точность определения ориентира. Должно ли оно быть нормальным или высоким?
Запрос на фотосессию
Теперь, когда конфигурация установлена, вы можете создать запрос на фотограмметрию:
typealias Request = PhotogrammetrySession.Request
Этот код определяет псевдоним Request
запроса сеанса. Дополнительные параметры командной строки предоставляют параметры запроса:
- Деталь. Определяет уровень детализации для созданной геометрии созданного объекта в диапазоне от предварительного просмотра, уменьшенного, среднего, полного до необработанного.
- Файлмодели. Определяет путь к созданному объекту в виде
.USDZ
файла.
Последним шагом в этом процессе является создание сеанса:
var maybeSession: PhotogrammetrySession? = nil do { maybeSession = try PhotogrammetrySession( input: inputFolderUrl, configuration: configuration) logger.log("Successfully created session.") } catch { ... }
Этот код предоставляет входной путь к исходным изображениям вместе с конфигурацией сеанса. Наконец, сеанс создан и запущен.
Вывод сеанса мониторинга
Во время сеанса вы можете следить session.outputs
за любой информацией:
for try await output in session.outputs { switch output { ... } }
Вы можете ожидать следующего вывода:
- Обработказавершена. Указывает, что обработка завершена.
- RequestError. Указывает на то, что произошла какая-то ошибка.
- requestComplete. Указывает, что запрос завершен.
- requestProgress. Обеспечивает обратную связь по мере завершения каждой фракции.
- inputComplete. Указывает, что входные данные были обработаны и что обработка будет продолжена.
- invalidSample. Указывает, что предоставленный образец недействителен.
- Пропущенныйпример. Указывает, что предоставленный образец был пропущен.
- automaticDownsampling. Указывает, что предоставленная выборка была автоматически понижена.
- processCancelled. Указывает, что процесс был отменен.
Тестирование приложения фотограмметрии
Ладно, хватит о коде; давайте возьмем это приложение для вращения!
Если у вас есть готовая коллекция фотографий, скопируйте их в папку на рабочем столе. Кроме того, вы можете использовать один из примеров, которые предоставляет Apple. Например, этот кусочек фруктового торта.
Загрузите пример из Apple и распакуйте файлы в папку на рабочем столе. Затем найдите минутку, чтобы изучить фотографии.

О боже, разве это не было бы прекрасно с чашечкой кофе?
Когда main.swift открыт, добавьте следующий код вHelloPhotogrammetry.main()
:
HelloPhotogrammetry.main([ "/Users/<YourName>/Desktop/FruitCakeSlice", "/Users/<YourName>/Desktop/FruitCakeSlice.usdz", "--detail", "preview", "--feature-sensitivity", "normal", "--sample-ordering", "sequential" ])
Этот код предоставляет несколько параметров командной строки непосредственно приложению из Xcode:
- Путь к изображениям. Здесь находятся входные изображения. Обязательно правильно задайте путь для вашей машины.
- Путь к USDZ. Именно здесь будет сгенерирован выходной USDZ. Обязательно правильно задайте путь для вашей машины.
- Деталь. При этом необходимая деталь устанавливается в режим предварительного просмотра. Это отлично подходит для быстрых тестов. Не стесняйтесь изменить это значение на более детальное, как только вы будете довольны результатами.
- Чувствительность функции. При этом чувствительность становится нормальной, но вы можете усилить ее, изменив на высокую.
- Образец заказа. Это означает, что изображения предоставляются последовательно; если это не так, вы можете изменить его на неупорядоченный.
Чтобы запустить процесс, который может занять некоторое время, создайте и запустите проект.
Если все прошло хорошо, вы увидите следующее сообщение на выходе:
[HelloPhotogrammetry] Processing is complete!
Вы также увидите файл FruitCakeSlice.usdz на рабочем столе. Дважды щелкните файл, чтобы просмотреть его с помощью Xcode.

Удивительно — и теперь я голоден!
Представляем PhotoCatch
Не поклонник приложений командной строки? Нет проблем! Команда EOS Innovations создала удобную версию приложения командной строки Photogrammetry от Apple, которое вы можете скачать здесь: PhotoCatch. PhotoCatch действительно классный, потому что вы можете использовать его для обработки видео вместо отдельных изображений. Давайте попробуем.
Запустите PhotoCatch и выберите Выбрать видео.

Найдите и выберите файл Rock.m4v в разделе предоставленные материалы, затем выберите Открыть.

В видеофайле всего 900 изображений; вы будете обрабатывать только каждый третий кадр, поэтому измените количество с 4 на 3. Затем выберите и установите первый кадр.

Прокрутите страницу вправо и установите последний кадр. Затем выберите Готово в правом верхнем углу.

Просмотрите настройки преобразования. Установите формат файла в USDZ, а качество модели-в Preview. Оставьте заказ образца неупорядоченным, а чувствительность функции-нормальной.
Выберите Создать модель внизу, чтобы начать процесс преобразования.

Сядьте поудобнее и потягивайте кофе, ожидая завершения процесса фотограмметрии. (Видите, я же говорил вам, что кофе-неотъемлемая часть этого процесса!)

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

Фантастика, теперь он выглядит очень красиво. Выберите опцию Сохранить и экспортируйте его как Rock.usdz на свой рабочий стол.

Наконец, дважды щелкните Rock.usdz, чтобы просмотреть модель в Xcode.

Разве это не весело? Какой отличный результат, ты рок! :]
Ключевые моменты
Поздравляем, вы только что стали мастером-художником, способным создавать гиперреалистичные 3D-модели всего за несколько основных шагов.
Давайте кратко рассмотрим некоторые ключевые выводы из этой главы:
- Фотограмметрия. Процесс, в котором несколько фотографий анализируются для воспроизведения цифровой версии реальных объектов.
- Строительство фотобудки DYI. Очень легко построить свою собственную маленькую фотобудку, которая упростит процесс фотосъемки.
- Фотографирование. Есть несколько ошибок, которых следует избегать при съемке объектов. Самое главное-хорошее освещение и правильное наложение изображений.
- Командная строка Photogrammetry. Вы ознакомились с примером приложения Apple и теперь знаете все основные требования к созданию приложения для фотограмметрии.
- Фотоотчет. Вы также попробовали супер крутой вариант,который выводит удобство пользователя на новый уровень. В довершение всего, теперь вы можете взять небольшой видеоклип и быстро обработать его с помощью PhotoCatch. Удивительно!
Теперь допейте эту чашку кофе, чтобы вы могли быстро записать ее в цифровой формат. Наслаждайтесь!