Можно сделать 3D модель из AVDepthData
, но это, вероятно, не то, что вы хотите.Один буфер глубины - это просто двумерный массив значений расстояния от камеры до пикселя.Таким образом, единственная «модель», которую вы получаете, не очень 3D;это просто карта высот.Это означает, что вы не можете смотреть на него сбоку и видеть контуры, которые вы не могли видеть спереди.(Пример кода «Использование данных о глубине», прикрепленный к докладу WWDC 2017 о глубинной фотографии , демонстрирует пример этого.)
Если вы хотите больше действительно «трехмерной» модели »,В соответствии с тем, что предлагает ARKit, вам нужно выполнять работу, которую выполняет ARKit, - использовать несколько цветных и глубинных кадров со временем, а также систему машинного обучения, обученную понимать человеческие лица (и аппаратное обеспечение, оптимизированное для быстрой работы этой системы).Возможно, вам не удастся сделать это самостоятельно ...
Это * можно получить экспортируемую модель из ARKit, используя Model I / O.Схема кода, который вам нужен, выглядит примерно так:
Получите ARFaceGeometry
из сеанса отслеживания лица.
Создание MDLMeshBuffer
s из массивов vertices
, textureCoordinates
и triangleIndices
геометрии грани.(Apple отмечает, что координаты текстуры и массивы индекса треугольника никогда не меняются, поэтому вам нужно создавать их только один раз - вершины нужно обновлять каждый раз, когда вы получаете новый кадр.)
СоздатьMDLSubmesh
из индексного буфера и MDLMesh
из вложенной сетки плюс буферы координат вершин и текстур.(При необходимости используйте функции MDLMesh
для генерации буфера нормали вершин после создания сетки.)
Создайте пустой MDLAsset
и добавьте к нему сетку.
Экспортируйте MDLAsset
в URL (предоставляя URL с расширением файла .obj
, чтобы он определял формат, который вы хотите экспортировать).
Эта последовательность вообще не требует SceneKit (или Metal, или какой-либо способности отображать сетку), что может оказаться полезным в зависимости от ваших потребностей.Если вы хотите задействовать SceneKit и Metal, вы можете пропустить несколько шагов:
Создать ARSCNFaceGeometry
на своем устройстве Metal и передать ему ARFaceGeometry
из сеанса отслеживания лица.
Используйте MDLMesh(scnGeometry:)
, чтобы получить представление модели геометрии ввода-вывода для этой геометрии, затем выполните шаги 4-5 выше, чтобы экспортировать ее в файл .obj
.
В любом случае, если вы нарежете его, хотя ... если требуется строгое моделирование глаз и зубов, ни один из предоставленных Apple вариантов не поможет вам, потому что ни один из них не делает этого.Итак, немного пищи для размышлений:
- Подумайте, не является ли это строгим требованием?
- Скопируйте всю работу Apple, чтобы сделать свой собственный вывод модели лица из последовательностей изображений цвет + глубина?
- Обман на моделировании глаз с использованием сфер, центрированных в соответствии с
leftEyeTransform
/ rightEyeTransform
, сообщенным ARKit? - Обман на моделировании зубов с использованием готовой модели зубов , составленный с помощью предоставленной ARKit геометрии лица для отображения?(Сформулируйте модель внутренней челюсти с помощью одного открытого затвора и используйте ARKit
blendShapes[.jawOpen]
, чтобы оживить ее вдоль лица.)