AR-фреймворки для iOS: какой выбрать?
ARKit
К несомненным достоинствам ARKit можно отнести его нативность. Интеграция и настройка занимают всего несколько минут. Xcode любезно делает за вас половину необходимых операций, после чего фреймворк «просто работает». Очень легко организовать взаимодействие между ARKit и другими системными фреймворками (SpriteKit, SceneKit, Metal, CoreLocation и т.д.).Библиотека хорошо оптимизирована и по-максимуму использует возможности железа последних моделей iPhone и iPad. Огромное количество вычислений, которые происходят под капотом, практически не сказывается на UX. Радует точность, с какой фреймворк распознает плоскости и маркеры. Не мешают этому ни плохое освещение, ни резкое перемещение устройства. Благодаря дополняющим друг друга технологиям VIO (Visual Inertial Odometry) и IMU (Inertial Measurement Unit), которые и составляют основу ARKit, ребятам из Apple удалось минимизировать ошибки в расчетах.
Не обошлось, конечно, и без недостатков. Во-первых, ARKit доступен только на устройствах с iOS 11+, поддерживается только на iPhone 6s и младше, iPad Pro (9.7, 10.5 или 12.9). К сожалению, это может оттолкнуть заказчиков, которые боятся потерять часть целевой аудитории.
ARKit спроектирован таким образом, что информация об объектах окружающего мира и положении в нем устройства постоянно калибруется. Из-за этого в начале сессии, пока данные недостаточно точны, создается ощущение «нестабильности» работы, избавиться от которого пока не удастся. Кроме того, если сессия достаточно длинная, незначительные, казалось бы, ошибки в показателях сенсоров будут накапливаться и становиться все более заметными.
При распознавании изображений возникают проблемы с позиционированием AR-объекта, объект плавает, не фиксируется четко в указанной точке. Аналогичное поведение наблюдается и в примере, опубликованном Apple. Тем не менее, объект, размещенный в заданной точке пространства практически не перемещается.
В некоторых случаях (маленькие черно-белые изображения не очень хорошего качества) распознавание маркера происходит, но система неверно определяет его координаты. В результате AR-объект отрисовывается в неправильном месте.
ARKit очень легок в освоении, чтобы начать работать, вам потребуется минимальный багаж знаний. В Сети уже опубликовано достаточно большое количество обучающих статей и примеров кода, а сообщество большое и отзывчивое, так что отыскать ответы на возникающие в процессе написания кода вопросы будет несложно.
OpenCV
Написанная на C++ библиотека OpenCV распространяется бесплатно и предоставляет вам возможность скачать iOS SDK с официального сайта или скомпилировать его самостоятельно.Уже на этапе внедрения поклонников Swift ждет увлекательный квест по устранению ошибок компиляции, который грозит растянуться на несколько часов. К счастью, в Сети доступны пошаговые инструкции, опубликованные нашими боевыми товарищами, уже одолевшими несговорчивый фреймворк (например, OpenCV with Swift — step by step).
После того как вам удастся наконец запустить проект с подключенной библиотекой, возникнет вопрос, что же делать дальше. Возможно, вы решите поискать туториалы на официальном сайте. Там iOS-разработчиков будут ждать три примера использования старой версии фреймворка в проектах, ориентированных на iOS 8. Современных же статей, посвященных мобильной разработке с OpenCV, не так уж много. Видимо, это связано с тем, что все желающие освоить эту библиотеку давным давно это сделали и в разъяснениях больше не нуждаются.
Впрочем у новичков все же есть шанс освоить этот, вне всякого сомнения, мощный инструмент. Однако понадобится на это немало времени и сил. Как и любая другая низкоуровневая библиотека, OpenCV требует глубокого вдумчивого изучения, подробного разбора документации, просеивания тысяч дискуссий на форумах в поисках ответа на свой вопрос и бесконечных экспериментов.
Не забудьте, кстати, добавить к этому еще время на восстановление в памяти университетского курса математики, ведь выводить формулы за вас OpenCV не станет.
Wikitude
Начнем с того, что Wikitude — платный и отнюдь не дешевый фреймворк. Бесплатная версия содержит водяные знаки, поэтому использовать ее для релизной сборки вы не сможете.Тем не менее библиотека стоит своих денег. В отличие от ARKit она поддерживает даже более старые устройства и версии системы. Продукт хорошо документирован, имеет множество статей, уроков и примеров кода, поэтому интеграция и реализация простейших задач у неподготовленного программиста займет всего несколько часов.
Основной сферой применения библиотеки является распознавание маркеров. В качестве последних могут использоваться любые изображения без альфа-канала. Правда, работает Wikitude только с родными форматами. Изображения маркеров приходится запаковывать в формат .wtc, 3D-модели преобразовывать в .wt3-файлы. Справедливости ради следует отметить, что Wikitude предоставляет средства для конвертации на своем веб-сайте.
В целом со своей задачей фреймворк справляется хорошо: маркеры распознаются, AR-объекты размещаются там, где вы запланировали, не плавают при изменении угла обзора или смещении камеры. Разместить картинку, видео или 3D-модель не составит труда, равно как и обеспечить их интерактивность. Поддерживается одновременная работа с несколькими маркерами, но при конфигурации классов библиотеки лучше ограничить их количество для повышения производительности.
Замечу однако, что при плохом освещении, а также неаккуратном перемещении устройства возникают проблемы с распознаванием маркеров даже в том случае, если для их создания использовались качественные исходные изображения.
Wikitude поддерживает JS и нативную версии SDK.
Если выберете для интеграции JS-версию, готовьтесь отринуть удобный Swift или милый сердцу Objective-C и сконцентрироваться на написании JavaScript кода. А так как последнее довольно мучительно при работе в Xcode, установите заодно Sublime или один из его заменителей. И постарайтесь писать сразу правильно, потому что процесс отладки и исправления ошибок будет нелегким.
Еще одно замечание касается оптимизации. При сколько-нибудь длительном взаимодействии с AR объектами JS версия фреймворка начинает заметно тормозить, fps сильно просаживается, что впрочем не удивительно.
Нативная версия SDK при всей своей дружелюбности практически лишена «магии». Фактически она только оповещает вас о том, что маркер распознан, сообщает его идентификатор и координаты в пространстве, после чего передает флаг вам в руки. Далее вы вольны использовать для отрисовки AR объектов свой любимый инструмент, например, OpenGL.