Как создать приложение дополненной реальности с помощью ARCore
В этом гайде вы узнаете, как добавить 3D-модели в реальный мир. Библиотека ARCore от Google позволяет добавлять на 2D-изображение (картинка или видео) полноценные 3D-модели.
Вам необходимо предоставить системе некое опорное изображение, которое ARCore будет искать в реальном мире, чтобы на его основе добавить на изображение 3D-модель. Дополненная реальность уже широко используются, например, в книгах, газетах, журналах и т.д.
Прежде чем погрузиться в этот туториал, вам стоит ознакомиться с предыдущими двумя статьями на эту тему, которые познакомят вас с основными AR-терминами:
Что такое изображения дополненной реальности?
Согласно документации для разработчиков, изображения дополненной реальности в ARCore позволяют создавать приложения дополненной реальности, которые могут «оживлять» 2D-изображения, например, плакаты или упаковки продуктов.
Вы загружаете в ARCore какие-то опорные изображения, а он вам затем сообщает об их обнаружении во время AR-сессии, например во время съёмки видео. И эта информация используется для расположения 3D-модели на 2D-изображении.
Ограничения использования изображений дополненной реальности
Вот некоторые ограничения, с которыми вы можете столкнуться при использовании изображений дополненной реальности:
Выбор подходящего опорного изображения
Вот несколько советов для выбора хорошего опорного изображения для ARCore:
Как использовать инструмент arcoreimg:
Замените dog.png на полный путь к вашему изображению.
Начало работы с приложением дополненной реальности
Теперь, когда вы ознакомились с ARCore и выбрали хорошее изображение с оценкой 75+, пришло время приступить к написанию кода приложения.
Создание фрагмента
Прежде всего, мы отключаем обнаружение плоскости. Делая это, мы убираем с экрана значок руки, который появляется сразу после инициализации фрагмента и говорит пользователю о необходимости перемещения своего смартфона для поиска плоскости. Нам это больше не нужно, поскольку мы обнаруживаем не случайные плоскости, а конкретное изображение.
Настройка базы данных изображений
Добавьте выбранное опорное изображение (которое вы хотите обнаружить в физическом мире) в папку assets (создайте её, если её ещё нет). Теперь мы можем добавлять изображения в нашу базу данных.
Мы создадим эту базу данных, как только будет создан фрагмент. В логи мы выведем результат этой операции:
Вот как будет выглядеть CustomArFragment :
Добавление изображения в базу данных
Сейчас мы настроим нашу базу данных изображений, обнаружим опорное изображение в реальном мире и добавим 3D-модель на изображение.
Давайте начнём с настройки нашей базы данных. Создайте публичный метод setupAugmentedImagesDb в классе MainActivity :
Обнаружение опорных изображений в реальном мире
Теперь мы начнем обнаруживать наши опорные изображения в реальном мире. Для этого мы создадим слушателя, который будет вызываться каждый раз при обновлении видеокадра, и этот кадр будет проанализирован на предмет наличия там опорного изображения.
Добавьте эту строку в метод onCreate() в MainActivity :
Теперь добавьте метод onUpdateFrame в MainActivity :
В первой строке мы получаем сам кадр. Кадр можно представить, как обычный скриншот из видео. Если вы знакомы с тем, как работает видео, вы знаете, что это просто набор изображений, которые очень быстро сменяют друг друга, создавая впечатление чего-то движущегося. Мы просто берём одну из этих картинок.
Если совпадение найдено, то мы просто берём и размещаем 3D-модель поверх обнаруженного изображения.
Примечание. Флаг shouldAddModel используется для того, чтобы мы добавляли 3D-модель только один раз.
Размещение 3D-модели над опорным изображением
Теперь, когда мы нашли наше опорное изображение в реальном мире, мы можем добавлять 3D-модель поверх него. Добавим методы placeObject и addNodeToScene :
Вот так теперь выглядит MainActivity :
Теперь запустите ваше приложение. Вы должны увидеть экран, как показано ниже. Подвигайте телефон немного над опорным объектом. И как только ARCore обнаружит опорное изображение в реальном мире, добавит на него вашу 3D-модель.
Руки в виртуальной реальности
Как заставить пользователя почувствовать связь с виртуальной средой.
Денис Тамбовцев, сооснователь и креативный директор компании Cerevrum, занимающейся разработкой VR-проектов, написал колонку о правильной реализации рук персонажа. Статья была опубликована в пользовательском разделе DTF и отредактирована.
В прошлой статье на DTF я рассказывал о различных вариантах отображения аватаров в VR. Один из них — частичная визуализация, когда показаны лишь кисти рук персонажа. Это решает проблему несоответствия движений реального тела пользователя и виртуального аватара из-за ограничений систем трекинга потребительских версий VR-систем (Oculus Rift, Vive, PSVR определяют в пространстве лишь положение головы и кистей рук, держащих моушн-контроллеры).
При частичной визуализации виртуальные руки и есть аватар пользователя. Именно они создают эффект присутствия в виртуальной среде, через них создаётся связь между игроком и сеттингом, а также самой историей.
Несмотря на кажущуюся простоту создания, в разработке виртуальных рук есть ряд интересных нюансов.
Сейчас есть два основных подхода к процессу взятия объекта виртуальной рукой. В одном случае (преимущественно в эксклюзивах Oculus) при взятии какого-либо объекта, он помещается в виртуальную руку в нужном положении. Второй вариант — это замена виртуальной руки на сам объект.
Предполагается, что первый вариант создаёт больший эффект присутствия, но возможно, что это справедливо лишь в случае Oculus Touch из-за их эргономики. В подобных проектах для Vive с их текущей версией контроллера (по моему субъективному опыту) иногда возникает эффект, будто ты держишь не объект виртуальной рукой, а саму виртуальную руку, держащую объект. Вероятно, дело в специфических случаях использования и определённых углах поворота объекта/руки.
При этом в варианте с показом только объекта в руке нет ощущения исчезновения аватара или просто потери с ним связи (после исчезновения виртуальных рук), так как в этот момент весь фокус переносится на сам объект.
Также второй вариант гораздо проще в разработке, так как не нужно создавать состояния взятия объекта рукой, анимировать множество положений кисти и проводить длительные тесты стабильности работы системы.
При попытке создать фотореалистичную руку при частичной визуализации, максимум чего вы добьетесь — это создание «восковой» модели, которая будет казаться обрубком и вызывать неприязнь или даже отвращение.
Реалистичный фрагмент руки повторяющий ваши движения это прямая дорога в «зловещую долину». Поэтому часто руки показывают либо в виде своеобразных перчаток, либо как-то стилизуют в рамках сеттинга (руки робота, призрака и так далее).
Вне зависимости от визуального стиля в котором выполнены руки, остаётся открытым вопрос — как именно обыграть их окончание? Попытка просто срезать геометрию выглядит не очень хорошо даже при мультяшной стилизации.
Часто встречается либо уход в прозрачность, либо использование эффекта «пустых перчаток», когда создают перчатку, которая принимает форму руки, но внутри неё ничего нет, если посмотреть со стороны манжеты. Подобная условность хорошо решает данный вопрос и фактически не сказывается на эффекте погружения.
Также некоторые разработчики изображают руки прозрачными, как в проекте Dead and Buried. Делается это не только в рамках сеттинга — прозрачность решает проблему эфемерности виртуальной руки, обосновывая её визуально. Дело в том, что в проектах для очков виртуальной реальности нельзя нарушать синхронизацию между положением реальной и виртуальной руки (это сказывается на ощущении обладания виртуальной конечностью), поэтому если виртуальная рука пересечёт какую-либо геометрию в сцене, она пройдет через неё насквозь. И если рука визуально полупрозрачна, то это не вызывает диссонанса на уровне логики.
Один из вариантов решения данного вопроса с «материальными» руками заключается в создании эффекта прозрачности во время пересечения геометрии.
У нас в Cerevrum Inc. на нескольких проектах возникал вопрос — визуализировать ли тени от рук? У теней есть два очень важных плюса. Они помогают в определении позиции рук в пространстве, а также создают связь между руками и виртуальной средой, а так как пользователь ассоциирует виртуальные руки с собой, то усиливается связь между виртуальной средой и самим пользователем.
Это касается и активного использования вибрации контроллера в качестве обратной связи при пересечении геометрии, взятии объектов и других подобных ситуациях.
Это не все специфические моменты при создании виртуальных рук пользователя. Сама тема ещё не достаточно хорошо изучена, какие-то стандарты реализации только намечаются, и разработчики продолжают свои исследования и эксперименты по созданию наиболее комфортного пользовательского опыта.
[FAQ] Граббинг и оцифровка
Приводим музыкальную коллекцию к единому знаменателю
Концепция стриминга подразумевает централизованное хранение домашней медиаколлекции в виде файлов — ради того, чтобы избавиться от залежей отдельных носителей. Это касается не только кинофильмов, про граббинг и конвертирование которых мы рассказывали в прошлом номере, но и музыки. Арсенал меломана включает, как правило, подборку фирменных CD, дополняемых порой альбомами на DVD-Audio и SACD. Самые же увлеченные ценители предпочитают винил, обладающий неповторимым характером звучания. Прежде чем собрать все это добро воедино на жестком диске и удобно его каталогизировать, записи с оптических носителей нужно перевести в файлы, а аналоговые фонограммы — оцифровать. Однако в погоне за удобством поиска композиций и другими прелестями стриминга нельзя забывать о том, что после трансфера фонотеки на винчестер качество звучания дорогих сердцу мелодий не должно ухудшиться ни на йоту, иначе смысл всей затеи напрочь теряется. Как максимально точно сграбить диски и корректно оцифровать винил? Ответы на эти и другие вопросы вы найдете в этой статье
Многие удивляются: что значит «правильный» граббинг? Цифра — она и в Африке цифра! Всего-то делов — выбери любую из нескольких десятков соответствующих программ, нажми на кнопку, и через какое-то время получишь кучу аудиофайлов на жестком диске. После этого остается лишь найти в Интернете обложку альбома или отсканировать ее самостоятельно. Однако если бы все было так просто, то многие специалисты не бились бы над проблемой точного считывания данных с CD-DA, производители оборудования не выпускали бы специальные сверхточные приводы, а нам не пришлось бы писать эту статью. Когда ставится задача перевести компакт-диск в формат МР3 для прослушивания на карманном плеере, то все старания улучшить качество граббинга действительно излишни. Но мы-то говорим о миграции всей домашней фонотеки! Следовательно, копия не должна уступать оригиналу. Чтобы этого добиться, тебе потребуется компьютер с просторным жестким диском и программа EAC (Exact Audio Copy v0.99 PB5), объективно лучшая — и совершенно бесплатная! — утилита для граббинга музыкальных CD, найти которую можно на сайте www.exactaudiocopy.de. Она будет считывать каждый блок информации как минимум дважды, чтобы убедиться, что все в порядке. В таком режиме скорость копирования компакта на винчестер снижается, зато достигается побитовая точность без привнесения джиттера.
Интерфейс программы EAC переведен на русский язык, поэтому ее установка и настройка особых проблем не вызывают. Итак, запускаем инсталлятор и оставляем флажки на всех компонентах, кроме бесполезной ссылки на интернет-аукцион eBay. После запуска софта нужно зайти в EAC > Параметры EAC и во вкладке «Извлечение» изменить уровень коррекции ошибок со среднего на высокий, а также снять флаг со второго пункта — «Неиспользование нулевых семплов». Соседние первый (offset) и третий (синхронизация) должны быть активированы. Далее идет вкладка «Нормализация». Тут достаточно убедиться, что соответствующий флаг не стоит, то есть губительная для звука функция нормализации не задействована. Настройки в последующих вкладках меняем по вкусу, поскольку непосредственно к извлечению аудиоданных они отношения не имеют. По завершении этого этапа и нажатия OK начинаем следующий: из главного окна программы заходим в EAC > Параметры дисковода и открываем первую вкладку «Метод извлечения». Тут выбираем «Достоверный режим» и убеждаемся, что флаг на опции Accurate Stream стоит, тогда как две другие фичи (кэширование аудиоданных и сообщения об ошибках С2) должны быть дезактивированы. Во вкладке «Чтение» необходимо задать алгоритм извлечения. Для этого вставляем в привод любой CD и запускаем процедуру автонастройки. Дождавшись результата, следуем в соседнее подменю «Смещение и скорость», где выставляем значение смещения (offset) в семплах, вносимое приводом при считывании данных. Использовать подобную коррекцию необходимо, иначе копия диска не будет совпадать с оригиналом по длине треков. Требуемое значение смещения определяется встроенным в EAC тестом либо берется из таблицы на сайте www.accuraterip.com/driveoffsets.htm. В итоге всех настроек ваша связка из оптического привода и программы EAC готова к точному граббингу — конечно, при условии, что компакт-диски не будут иметь явных повреждений рабочей поверхности. Осталось сделать самую малость. Идем в EAC > Параметры сжатия. На первой вкладке выбираем формат кодирования — «Конвертер PCM Microsoft» и формат дискретизации — «16 бит, 44,1 кГц, стерео». Наконец, чтобы не вбивать названия треков самостоятельно, перед граббингом каждого CD можно запрашивать информацию из сетевой базы данных. Если компакт-диск фирменный или лицензионный, то по нему в Интернете почти гарантированно будет вся нужная информация, впоследствии облегчающая каталогизацию коллекции на винчестере. Соответствующие настройки находятся в разделе EAC > Параметры freebd и базы данных EAC. По большому счету, там нужно лишь указать любой рабочий e-mail, иначе доступ к базе будет закрыт. Вот теперь все готово! И начинается самое главное: перенос содержимого твоих компактов. По очереди вставляем диски в привод, запрашиваем названия альбома и композиций из Сети нажатием Alt+G и запускаем конвертацию в WAV. Если все было сделано правильно, то на выходе должны получаться файлы, технически и на слух неотличимые от оригинальных треков на CD. Собственно, после граббинга программа и так сообщит об успешном завершении процесса. Раз точность извлечения составила 100%, значит, никаких ошибок не допущено.
Какой выбрать привод?
Марка и модель оптического привода принципиального значения не имеют, если это современный продукт от известного производителя. Поскольку компьютерные CD-драйвы практически исчезли с прилавков (исключение составляет разве что внешний девайс Plextor Premium2 с явно неадекватной ценой), то для граббинга придется использовать устройство наиболее распространенного класса DVD-RW. В этом нет ничего страшного, если программа-граббер EAC настроена корректно. Достойных кандидатов много, поэтому выделим парочку — Asus DRW-2014 и Pioneer DVR-217
В этом самом месте мы рискуем нарваться на тазик тухлых помидоров, катапультированный в нашу сторону за прямо-таки кощунственное предложение перевести аудиофильский винил в какую-то там «цифру». Спорить с фанатично настроенными любителями данного носителя мы не намерены, поскольку для многих из них винил — это не только теплый аналоговый звук, но и церемония, помогающая настроиться на прослушивание: взять в руки и распаковать пластинку, обработать ее антистатиком, положить на опорный диск, опустить тонарм… После же оцифровки нужда в подобных манипуляциях исчезает. Однако и цифровые слепки могут сохранить всю теплоту и обертональную палитру исходников: как показывает практика, при слепом прослушивании немало почитателей аналога принимают хорошо сделанные копии за оригинал. Следовательно, если в виниле вас привлекает исключительно его звучание, а сопутствующие процедуры кажутся жутким анахронизмом, то перевод в цифровую форму будет наилучшим решением, способным к тому же сохранить записи на века. Пластинка к тому времени, скорее всего, окажется безумно заезженной.
Какую выбрать вертушку?
Оцифровка винила — дело гораздо более ответственное, чем простое его воспроизведение, а потому и требования к вертушке предъявляются более жесткие. Говоря обобщенно, это должна быть качественная модель, максимально точно откалиброванная. Если у вас уже есть такая, то достаточно ее проверить — и можно начинать. А коли покупка LP-проигрывателя еще только предстоит, то вот несколько подходящих кандидатов.
Начальный уровень ($ 1000) — TechnicsSL-1200 MK5 + Goldring 2500
Средний уровень ($ 3000) — VPIScout + DynavectorDV-20XL
Высокий уровень ($ 10 000) — Michell Orbe + Ortofon Winfield MC
Для оцифровки винила необходим аудиотракт высокого класса — бюджетные решения не в состоянии передать всю полноту звучания достойно отпечатанных грампластинок. Все компоненты тракта должны быть сбалансированы, иначе начнет действовать принцип слабого звена: применение посредственного LP-проигрывателя и дешевого звукоснимателя, некачественных и/или слишком длинных кабелей либо недостаточное внимание к выбору оцифровщика может сказаться на результате самым плачевным образом.
Чем меньше звеньев в цепи, тем лучше. Старайтесь обходиться без коммутаторов и микшерных консолей. Идеальное подключение — непосредственное, между фонокорректором и рекордером
Не экономьте место на винчестере. Запись должна осуществляться с максимальным разрешением, на которое только способно оборудование, но не ниже чем 24 бит / 48 кГц (оптимально 24 бит / 96 кГц). Это позволит сохранить больше нюансов звучания.
Запись может производиться как на специализированный аудиорекордер из числа студийных моделей, так и на компьютер с хорошей звуковой картой внутри. Первый вариант обходится значительно дороже, зато проще в управлении и стабильнее в работе: вероятность испортить копию программным сбоем или наводками, которые генерируются внутренними компонентами системного блока, в случае с рекордером ничтожно мала. В активе же компьютера — гибкость и относительно невысокая стоимость (персоналка есть почти у каждого, остается лишь докупить подходящую аудиокарту). Однако в обоих случаях результат может быть одинаково высок.
О развитии VR-технологий: где применяют, зачем VR бизнесу и какие устройства используют
Президент и креативный директор Modum Lab Дмитрий Кириллов и Денис Тамбовцев на открытом занятии в Нетологии рассказали, что такое VR, в каких сферах применяется и какими навыками должен обладать VR-специалист.
Виртуальная реальность (VR) — мир, смоделированный с помощью компьютерных технологий, в который пользователь может погрузиться с помощью специальных сенсорных устройств. Технологии VR прошли огромный путь от первых экспериментов в 60-х годах XX века до современных шлемов виртуальной реальности. Новая волна интереса к VR началась благодаря компании Oculus и представленному в 2012 году прототипу очков Oculus Rift.
VR продолжает развиваться: на конференции CES генеральный директор Nvidia Дженсен Хуанг рассказал, что компания продала 4 миллиона очков виртуальной реальности для ПК. Продано больше миллиона очков Oculus Go, около 2 миллионов Sony Playstation VR и около 500 тысяч очков от HTC.
Выручка сегмента VR в миллионах долларов. Источник: www.sostav.ru
Специалисты прогнозируют развитие VR-технологий в 2020-е годы
Главное препятствие для массового внедрения VR — недостаток проработки пользовательского опыта. Уже научились делать современные устройства с отличной картинкой, но не хватает специалистов, которые могли бы адекватно выстроить UX.
Сферы применения VR
Сегмент развлечений
VR дает новый опыт погружения, более плотно связывает игрока, персонажа и игровую среду.
Гайд по виртуальным мирам: AR и VR
1. Дополненная реальность (AR)
Дополненная реальность (англ. augmented reality) – это технология, которая расширяет физический мир, накладывая на него слои цифровой информации: звуки, видео, графику.
1.1. Виды AR
Обычно рассматривают четыре типа дополненной реальности:
В marker-based AR требуется конкретный шаблон, маркер, например, QR-код, поверх которого накладывается виртуальный объект.

Как видно из названия, для разработки markerless приложения маркер не нужен. На окружающую среду накладывается сетка и обнаруживаются ключевые точки, к которым привязывается виртуальная модель.

Projection-based AR разработан для того, чтобы сделать заводские предприятия умнее, безопаснее и эффективнее. Проектор устраняет необходимость в бумажных инструкциях, создавая цифровой слой практически на любой рабочей поверхности.
Superimposition-based AR частично или полностью заменяет исходное представление объекта дополненным представлением того же самого объекта.
1.2. Софт для AR
Чтобы создать приложение дополненной реальности, понадобится набор средств разработки (software development kit, SDK). Ниже мы рассмотрели наиболее популярные SDK.
ARKit
ARKit – это SDK для создания приложений дополненной реальности и игр для iPhone и iPad. Для него характерны следующие черты:
Reality Composer – редактор для создания 3D-моделей.
RealityKit – рендеринг и анимация.
Поддерживаемые платформы: iOS 11.0 и выше.
ARCore
На ARKit компания Google ответила своей разработкой – ARCore.
Поддерживаемые платформы: Android 7.0 и выше, iOS 11 и выше.
Vuforia
Поддерживаемые платформы: Android 4.4.4 и выше, iOS 11 и выше.
EasyAR
Поддерживаемые платформы: Android, iOS.
Lens Studio
Поддерживаемые платформы: Snapchat.
Spark AR
Поддерживаемые платформы: Instagram.
2. Виртуальная реальность (VR)
Виртуальная реальность (англ. virtual reality) – компьютерная симуляция альтернативной реальности.
2.1. Виды VR
Автономная VR работает сама по себе, без необходимости использования дополнительного внешнего оборудования (компьютер, консоль), например, Oculus Quest. Всё, что нужно, – это гарнитура и контроллеры VR.
VR на базе ПК – это любые гарнитуры, требующие постоянного подключения к ПК, такие как: PC Oculus Rift S, Valve Index, HTC Vive, Pimax и Windows Mixed Reality.
Когда говорят о VR для консоли, обычно имеют ввиду PlayStation VR для PlayStation 4.

2.2. Типы отслеживания движения
Наиболее распространенный способ отслеживания движений – система Inside-Out с камерами, встроенными в гарнитуру. Такой подход реализован в Oculus Rift S, HTC Vive Cosmos и всех гарнитурах Windows Mixed Reality.
Существует также схема отслеживания Outside-In с размещением базовых станций в углах комнаты, помогающих гарнитуре и контроллерам отслеживать их точное местоположение (HTC Vive Cosmos Elite, Valve Index).

В продвинутых гарнитурах используют одновременную локализацию и построение карты (SLAM), отслеживающую особенности физической среды, окружающей человека.
2.3. Базовые термины и понятия
Поле зрения (FOV). В контексте гарнитур VR поле зрения относится ко всему, что вы можете видеть в виртуальном мире при использовании гарнитуры.

Степени свободы (DoF). Чем больше степеней свободы, тем больше физических движений будет отслеживаться гарнитурой. 3DoF (3 степени свободы) отслеживает только перемещение головы: крен, тангаж, рыскание, но не положение в пространстве по координатам (x, y, z). В современных гарнитурах используется 6DoF, отслеживающий как движения головы, так и ее координаты.

Frames Per Second (FPS) – количество кадров в секунду.
Screen Resolution – количество пикселей, отображаемых на экране.
Spatial Audio (3D аудио) – пространственное звучание (используется для создания звука, который исходит из определенной точки виртуального мира).

2.4. VR через веб-браузер
WebGL – кроссплатформенный API для 3D-графики в браузере. Исполняется как элемент HTML5 и поэтому является полноценной частью объектной модели документа (DOM API) браузера. Может использоваться с языками программирования, поддерживающими DOM API: JavaScript, Rust, Java, Kotlin и др.
Для упрощения работы с WebGL существуют различные фреймворки. Все они распространяются под свободной лицензией (MIT, Apache 2 или BSD), написаны на JavaScript и имеют сходный набор функций: работа с геометрией, материалом, светом, анимацией, камерами, шейдерами, текстом и 3D-аудио. Вот некоторые из них:
2.5. Программное обеспечение
Blender
Unity
Unity является наиболее распространенным инструментом для разработки VR. С его помощью можно импортировать модели, созданные в Blender, настроить взаимодействие с этими моделями, а также их физику. Для скриптинга используется C# и UnityScript, напоминающий JavaScript. На этом движке можно создавать приложения для WebGL, Oculus Rift и HTC Vive. Также есть интеграция с ARCore, ARKit.
Цена: бесплатно и не требует отчислений с прибыли.
Ограничение: объем привлеченных инвестиций не более 100 тыс. долл. за последние 12 мес.
Unreal Engine
Основной конкурент Unity – Unreal Engine. В нем можно писать на C++ и Blueprints (визуальное программирование). Поддерживаемые платформы: AR (Android, iOS), VR (Google VR, Oculus, Gear VR, SteamVR, Windows MR)
Ограничение: 5% от выручки с продаж, если ежеквартальная выручка превышает 3 тыс. долл.
3. Уроки и курсы по AR и VR
3.1. AR
3.2. VR
Итак, для разработки AR-приложений основными инструментами являются ARkit и ARCore. Если вы пишете на JavaScript, обратите внимание на AR фреймворки, работающие через веб-браузер. С языками в VR всё очевидно: C# в Unity, C++ в Unreal Engine. Рынок AR и VR будет расти, так что успейте запрыгнуть в поезд, пока он не ушел!









