Commited: 50+ воркшопів з ТОПами тестування: M.Bolton, G.Bahmutov, T.King, R.Desyatnikov, J.Bach. Лише за $40 на рік та економія $15 до 20 квітня
×Закрыть

DOU Labs: как в AMC Bridge объединили традиционный инженерный софт и девайсы VR

В рубрике DOU Labs мы приглашаем IT-компании делиться опытом собственных интересных разработок и внутренних технологических инициатив. Вопросы и заявки на участие присылайте на editors@dou.ua.

Это история о том, как мы попробовали объединить традиционный инженерный софт и девайсы виртуальной реальности. В AMC Bridge принято, что все начинающие программисты, которые приходят к нам, проходят через Research Department. Ребята разрабатывают исследовательские проекты, которые впоследствии выливаются в небольшие бесплатные приложения, доступные для широкой аудитории. В основном это работа с традиционными CAD/PLM системами, 3D-моделированием, облаками точек. Ряд проектов делается на стыке традиционных CAD систем и новых девайсов.

В этой статье мы поделимся опытом создания двух уже реализованных проектов: один работает с Google Cardboard, другой — со шлемом виртуальной реальности HTC Vive. Они выпущены в качестве бесплатных приложений, поэтому при выборе устройств для поддержки мы ориентировались на их популярность и доступность.

ViewER-VR

Итак, первый проект — это ViewER-VR™. Приложение выросло на базе созданного нами ранее продукта, который позволял просматривать на Android-устройствах 3D-модели различных форматов. 3D-модель интересна не только инженерам и дизайнерам, а гораздо более широкой аудитории, её интересно покрутить и даже заглянуть внутрь, поэтому и появилась идея воплотить такую возможность. В существующее приложение была добавлена поддержка самого простого и доступного устройства — очков виртуальной реальности Google Cardboard.

Базовое приложение ViewER предоставляет возможность просматривать 3D-модели в форматах openNURBS (3DM), Wavefront (OBJ), 3D Systems (STL), Stanford Triangle Format (PLY) и Autodesk Inc. (3DS), а также позволяет сохранять скриншоты в DropBox. Оно написано на Java и C++. Часть программы, отвечающая за рендеринг, писалась на C++ с использованием OpenGL ES для повышения производительности. Вызовы C++ кода осуществлялись с помощью Android NDK. Также в приложении использовались такие 3rdParty библиотеки, как openNURBS и Teigha.

Производное приложение ViewER-VR расширяет возможности ViewER, добавляя возможность просматривать модели в режиме виртуальной реальности. Для разделения экрана на 2 части и обработки движений головы мы использовали Google VR SDK for Android.

В приложении есть два режима: Virtual Model View Mode — для просмотра модели «снаружи», с возможностью покрутить её и рассмотреть с различных ракурсов, и Virtual Space Mode — для просмотра модели «изнутри», с возможностью перемещаться в ней. Основное отличие режимов заключается как раз в позиционировании камеры относительно модели. И тут мы столкнулись с некоторыми трудностями. Для режима Virtual Space можно было использовать стандартное позиционирование камеры и поворотов, взятое из Google VR SDK, однако, чтобы рендерить изображение с помощью OpenNurbs камеры, необходимы были еще преобразования векторов. Для режима Virtual Model необходимо было получить положение камеры при повороте. Для этого использовался вектор направления взгляда камеры. Поворот мы оставляли тот же, какой получали из API Google Cardboard. Модель размещалась в центре сцены, а камера отдалялась на заданное расстояние в сторону, обратную вектору взгляда. В итоге мы получали камеру, вращающуюся на орбите вокруг модели, которая всегда была направлена в сторону модели. Перемещение внутри модели вызывается при нажатии на экран или на кнопку кардборда, и камера перемещается в сторону направления взгляда на фиксированное расстояние.

Отдельной задачей стала совместимость настроек параметров камер кардборда и OpenNurbs. Данная библиотека использовалась для открытия форматов файлов, настроек камеры и поверхностей рендеринга. Кстати, у Google Cardboard свои настройки поверхностей рендеринга, а у Google VR SDK свой наследник- GLSurfaceView.Renderer и свой класс Surface, который не позволяет установить иной рендерер, отличный от необходимого. Мы же реализовали рендер через OpenGL ES 2.0.

Unity for Autodesk Revit

Второй такой проект — Unity for Autodesk® Revit®, синтез сугубо инженерного ПО Autodesk Revit и игрового движка Unity (на котором сделаны такие игры, как Shards of War, Drakensang online, легендарная King’s Bounty etc). Идея приложения состоит в том, что, создав модель здания в Revit, пользователь нашего продукта может получить функциональность игры «бродилки». То есть наше приложение позволяет перенести геометрию и связанные с ней материалы и текстуры из модели Revit в приложение, написанное на игровом движке Unity.

Unity for Autodesk® Revit состоит из двух частей:
— адд-ин для Revit
— Unity приложение.

Адд-ин для Revit работает следующим образом: проходит по каждому элементу модели и сохраняет всю геометрию в виде мешей (mesh) в специальный файл, формат которого разработан AMС Bridge. В этот же файл сохраняется информация о материалах и текстурах.

Дальнейшая работа заключается в Unity приложении. Приложение в рантайме считывает созданный файл и поэлементно воссоздает модель, прикрепляя к каждому мешу соответствующие материалы и текстуры. После того, как модель загружена, пользователь может свободно по ней перемещаться, проходить сквозь двери, подниматься по ступенькам и т.д. Также в одной из версий мы добавили погодные эффекты: дождь, туман, режимы освещения, а также режим полета. А в последнем релизе приложения появилась возможность перейти в VR режим и управлять передвижением с помощью шлема и контроллеров HTC Vive.

В процессе разработки с использованием Revit API и Unity 5 мы столкнулись с определенными ограничениями. Так, Unity не позволяет загружать файлы в формате FBX в рантайме. Наличие такой возможности значительно бы упростило создание приложения: так как Revit позволяет сохранить модель в FBX, то оставалось бы только загрузить FBX файл в Unity приложение. Наши ребята решили эту проблему, создав свою структуру файла данных из Revit в Unity и написав загрузчик этого файла в Unity.

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


Пример этих двух приложений говорит о том, что разработка инженерного ПО может быть весьма увлекательным занятием и чуть ли даже не развлечением. Помимо этого, мы надеемся, что, строя обучение на использовании новых технологий, мы даем задел на будущее — тенденции разработки все ближе к использованию VR/AR девайсов не только в игровых, но и в различных бизнес-целях.


Статья написана в соавторстве с моими коллегами Алексеем Макаровым и Дмитрием Горбуновым.

👍НравитсяПонравилось0
В избранноеВ избранном0
Подписаться на автора
LinkedIn

Похожие статьи




Підписуйтесь: iTunes | Google Podcast | YouTube


6 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Спасибо за статью. Мне сейчас как раз интересно все, что связанно с VR.

Проект интересный, но продукт реализованый vrnet.io — интереснее. Я понимаю, что вы только начали пилить и возможно в конечном итоге у вас будет лучше продукт. Но это как раз тот продукт, на который следует ориентироваться.

Але тут напівавтоматична генерація, а там — підготовлена сцена. Думаю коли допилять текстури і генератор, аби вони видавали більш красиву картинку — знайдуться користувачі. Кому не захочеться прогулятись по своєму майбутньому будинку.

Так сам таку задачу і поставили собі врнет.іо. Там зараз напівавтоматично. Найближчим часом усе буде повністю автоматичне

Ну тоді — нехай доганяють. Конкуренція — хороша річ.

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

Подписаться на комментарии