Site icon AppTractor

Создаем 3D модели из фотографий с помощью RealityKit и Swift

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

Чтобы использовать Object Capture, вы нужно:

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

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

Создание CLI-приложения для фотограмметрии с RealityKit Object Capture

Чтобы использовать Object Capture, начните с создания нового приложения командной строки в Xcode и добавьте новый класс с именем Session:

Object Capture работает через создание объекта PhotogrammetrySession, конфигурируя его, передавая папку, содержащую наши изображения, и ожидая результата. Результат поступает асинхронно через Combine, поэтому обязательно создайте объект подписчика, как в сниппете.

В методе run() создайте PhotogrammetrySession с конфигурацией по умолчанию:

let configuration = PhotogrammetrySession.Configuration()
let session = try PhotogrammetrySession(
   input: inputFolder,
   configuration: configuration
)

Можно доработать сессию под полученную модель, как я покажу позже. А пока воспользуемся настройками по умолчанию.

Теперь в сеансе мы должны создать запустить изготовление модели по нашим фотографиям:

let request = PhotogrammetrySession.Request.modelFile(url: outputFile)

Чтобы получить его результаты, мы должны наблюдать за ходом выполнения запроса и дождаться завершения. Как упоминалось ранее, этот процесс выполняется асинхронно с Combine, поэтому мы должны прикрепить подписчика к свойству output сессии.

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

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

Перед запуском приложения отредактируйте файл main.swift, чтобы вызвать метод run():

try! Session().run()

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

Настройка PhotogrammetrySessions

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

let request = PhotogrammetrySession.Request.modelFile(
   url: outputFile,
   detail: .preview
)

Этот параметр варьируется от более низкого качества preview до высокого качества full. Попробуйте поиграть с настройками более низкого качества, прежде чем пытаться создать более качественную модель.

Второй аспект, который можно настроить — это входные данные:

var configuration = PhotogrammetrySession.Configuration()
configuration.sampleOverlap = .low
configuration.sampleOrdering = .unordered
configuration.featureSensitivity = .high

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

Источник

Exit mobile version