Камери глибини, що представлені у нашому магазині, можуть виконувати багато корисних функцій. В цій статті ми розглянемо один з варіантів їх застосування.

 

Для створення тривимірної моделі об'єкта ще недавно потрібно було складне й дороге обладнання. Сучасні технології спростили це завдання, надавши широкому колу користувачів достатньо прості та недорогі камери, що дозволяють створити щось таке: 

 

У цьому прикладі використані:
3D камера: Intel RealSense Depth Camera D455 (її можна замовити у нашому інтернет-магазині).
Планшет: Microsoft Surface Go 2
Програмне забезпечення для 3D сканування: Dot3D Pro
Отримана модель оброблена та очищена у додатку: Dot3D Edit
Відео моделі створено з використанням анімації в Autodesk ReCap.

Для створення цієї моделі було проскановано 12 кімнат та екстер'єр будівлі. У процесі сканування було проведено 3 зйомки (2 усередині приміщення та 1 зовні). Витрачений на це сканування час становив близько 30 хвилин (приблизно 10 хвилин на одну зйомку-сканування).

Що дозволило створити цю модель і як можна зробити щось подібне? Ми поставили це питання і пропонуємо розібратися з ним у цій статті.

 

Компанія Intel RealSense з 2018 року випускає лінійки камер, що дозволяють проводити тривимірне сканування та розпізнавання об'єктів. Ця лінійка продуктів, побудована на технологіях визначення глибини зображень, розроблена для того, щоб дати машинам та пристроям можливість глибинного сприйняття простору, що використовується в автономних дронах, роботах, пристроях доповненої та віртуальної реальності (AR/VR), пристроях розумного будинку та багатьох інших. продукти та проекти з визначенням відстань до об'єктів, типу face-ID тощо. Вони використовують технології Structured Light (камери структурного світла), Depth from Stereo (камери, що використовують класичну технологію побудови об'ємного зображення зі стерео знімка) та Lidar (камери із застосуванням лазерних технологій, у т.ч. світлодіодних лазерів), про що ми більш докладно розповідали в одній із наших попередніх статей: Intel® RealSense™ - огляд камер.

Кожна з камер RealSense складається з процесорів машинного зору, модулів глибини та відстеження, а також камер глибини, що підтримуються кросплатформним SDK з відкритим вихідним кодом, що спрощує підтримку камер для сторонніх розробників програмного забезпечення, системних інтеграторів, ODM та OEM-виробників.

У цій статті, що є по суті практичним посібником, ми розповімо про простий спосіб 3D-сканування навколишнього простору, який ви легко зможете повторити, прямуючи за нами по 4-х кроках. Проект буде включати кілька етапів і частин з використанням різного необхідного програмного забезпечення, але не вимагатиме якихось особливих «над»-здібностей, щоб його реалізувати. Відсканованій тривимірній моделі ми надамо публічний доступ, що дозволить поділитися нею з друзями та відвідувати її разом не тільки за допомогою комп'ютера, але навіть в окулярах віртуальної реальності.

 

Отже, давайте приступимо!

Для початку давайте підготуємось. Для реалізації поставленого завдання нам знадобиться таке обладнання та ресурси:

  1. Камера глибини Intel® RealSense™ Depth Camera D415  (чи модуль Intel RealSense Depth Module D415). Можливо також використовувати такі камери глибини: D435, D435i чи лідар-камеру L515. Ми в процесі опису будемо використовувати камеру Intel® RealSense™ Depth Camera D435.
  2. Планшет або ноутбук з операційною системою OS Microsoft Windows (або сумісний пристрій на базі OS Android).
  3. Програмне забезпечення Dot3D Pro — професійне рішення для 3D-сканування для клієнтів Intel RealSense, що включає різні необхідні функції, додавання робочих процесів, порівняння проектів САПР, захоплення сцени великого розміру (на потужних пристроях), додаткові формати експорту та багато іншого.
  4. Програмна система для обробки тривимірних сіток  Meshlab, що є орієнтованою на управління та обробку неструктурованих великих сіток і надає набір інструментів для редагування, очищення, коригування, перевірки, рендерингу та перетворення цих типів сіток.
  5. Професійне відкрите вільно розповсюджуване програмне забезпечення для створення тривимірної комп'ютерної графіки Blender, що включає засоби моделювання, скульптингу, анімації, симуляції, рендерингу, постобробки та монтажу відео зі звуком, компонування за допомогою «вузлів», а також створення 2D-анімацій.
  6. Веб-браузер (Firefox).
  7. Додатково: гарнітура віртуальної реальності (VR headset).

 

Крок 1-й. Сканування

Існує низка програм для 3D-сканування, які працюють з камерами Intel RealSense Depth, але в даному випадку ми обираємо Dot3D Pro, тому що вона дуже простао у використанні і дозволяє нам швидко створити добре сканування та експортувати зображення-файл. Для цілей цієї демонстрації ми використовували планшет Microsoft Surface Pro 4 (gen 6), за обчислення та графіку якого відповідають процесори Intel Core i5 Skylake 6-го покоління з вбудованим графічним прискорювачем Iris Pro, але підійде будь-який пристрій, сумісний з Dot3D Pro. Використання планшета спрощує процес сканування, але можна використовувати ноутбук або навіть настільний комп'ютер з досить довгим USB-кабелем.

У наступному відео ви можете переглянути процес підключення камери Intel RealSense D455 до планшета під керуванням OS Windows і початку сканування в Dot3D Pro:

 

 

У нашому випадку, після підключення камери до планшета з використанням швидкісного порту USB-3.0 і кабелю USB, ми запускаємо програму Dot3D Pro та обираємо камеру у вікні налаштувань. Тут ми можемо вибрати створення нового сканування, а для запуску процеса натиснути значок «scan» (сканування).

 

У процесі того, як ви рухаєтеся, пікселі зображення з камери стають білими, жовтими та зеленими. Зелений означає, що область повністю просканована. Для максимально повного сканування вам потрібно витратити більше часу з переміщенням та затримкою на дрібних деталях, щоб отримати максимально можливу кількість даних. Для сканування ви можете вибрати будь-який відкритий простір, але намагайтеся уникати дуже яскравого сонячного світла, так як через застосовану технологію отримана модель може виглядати невідповідною до оригіналу або у вас взагалі можуть виникнути проблеми з точним скануванням простору.

Якщо ви використовуєте камеру-лідар L515 для сканування, то згідно з рекомендаціями виробника, заснованих на особливостях лазерної технології цього пристрою, вам слід проводити сканування тільки всередині приміщень для досягнення найкращих результатів.

 

 

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

У міру того, як ви переміщуєтеся по простору і виконуєте максимально повне сканування, ви також можете використовувати камеру на своєму хост-пристрої, щоб зробити звичайний знімок RGB з високою роздільною здатністю, який буде прив'язаний до відповідної точки сканування (що пізніше можна буде використовувати як прив'язку, якщо ви плануєте працювати над своєю моделлю в 3D-пакеті, такому як Blender або Maya).

 

 

Якщо ви задоволені результатом сканування, натисніть кнопку сканування ще раз, щоб закінчити. Потім потрібно оптимізувати модель. Це може тривати деякий час в залежності від розміру відсканованого зображення.

Після оптимізації збережіть відскановане зображення як файл розширення .ply (PLY).

 

Крок 2-й. Перетворення на OBJ

Файли PLY є файлом хмари точок і можуть використовуватися як є, наприклад, завантаживши PLY в платформу sketchfab, ви можете поділитися скануванням або переглянути його у віртуальній реальності. Однак, якщо ви хочете трохи більшої гнучкості щодо того, що ви робите з файлом (оскільки файли PLY досить великі), ви можете перетворити його на сітку. У цій частині процесу ми збираємося використовувати Meshlab  для перетворення PLY на OBJ.

MeshLab - це програмна система (безкоштовне програмне забезпечення з відкритим вихідним кодом) для обробки тривимірних сіток, яка орієнтована на керування та обробку неструктурованих великих сіток і надає набір інструментів для редагування, очищення, виправлення, перевірки, рендерингу та перетворення цих типів сіток. Спочатку MeshLab була створена дослідницьким центром ISTI-CNR як завдання курсу в Пізанському університеті наприкінці 2005 року. Це універсальна система, призначена для обробки типових не дуже маленьких неструктурованих 3D-моделей, що виникають у процесі 3D-сканування. Фільтри автоматичного очищення сітки включають видалення дубльованих вершин, на які немає посилань, ребер, що не є множинними, вершин та нульових граней. Інструменти повторного об'єднання підтримують високоякісне спрощення на основі квадратичного заходу похибки, різних видів поверхонь підрозділу та двох алгоритмів відновлення поверхні з хмар точок, заснованих на методі обертання кулі та на підході реконструкції поверхні Пуассона. Для видалення шуму, зазвичай присутнього на отриманих поверхнях, MeshLab підтримує різні види фільтрів, що згладжують, і інструменти для аналізу і візуалізації кривизни.

Також ця система включає інструмент для реєстрації декількох карт діапазонів на основі ітеративного алгоритму найближчої точки, інтерактивну систему прямого малювання на сітці, яка дозволяє користувачам інтерактивно змінювати колір сітки, визначати вибір і безпосередньо згладжувати шум і дрібні деталі. Ця програма доступна для більшості платформ, включаючи Linux, Mac OS X, Windows і, з обмеженою функціональністю працює на Android і iOS. Система підтримує введення/виведення у таких форматах: PLY, STL, OFF, OBJ, 3DS, VRML 2.0, X3D та COLLADA.

 

Відкрийте Meshlab і перейдіть до File> Import Mesh (Файл Імпорт сітки). Імпортуйте файл PLY, який ви експортували на попередньому етапі.

 

 

Звідси ми збираємося запустити кілька операцій для процесу очищення хмари точок та перетворення її в сітку. Залежно від того, як виглядає ваш файл, ви можете витратити деякий час на зміну його настроювань і видалити всі зайві вершини, які не потрібні. Використовуйте кнопку "Select Vertices" (Вибрати вершини) у верхній частині панелі інструментів (на зображенні обведена червоним маркером), а потім виберіть групи вершин для видалення за допомогою інструмента "Delete the current set of selected vertices" (Видалити поточний набір вибраних вершин), також обведено кнопку червоним маркером.

 

 

Далі перейдіть до Filters > Sampling  > Poisson disk sampling  (Фільтри > Вибірка > Вибірка диска Пуассона)

У налаштуваннях переконайтеся, що ви вибрали «Base Mesh Subsampling» (Підвибір базової сітки), і зміните кількість вибірок на десятки тисяч (ми взяли значення 35000). Чим вище число тут, тим детальнішою буде ваша фінальна сітка. Однак намагайтеся не заходити надто високо, кількість трикутників вплине на те, як ваша остаточна сітка працюватиме в інших програмах та додатках.

У меню шарів праворуч ви повинні побачити вихідну хмару точок та зразок Пуассона. Видаліть вихідну сітку — вона нам більше не потрібна.

Для наступного кроку перейдіть до Filters > Point set > Compute normal for point set (Фільтри > Встановлення точок > Обчислити нормаль для заданої точки). Змініть номер на 16 і запустіть процес обчислення. При цьому програма намагається автоматично визначити, в який бік буде вказувати кожна поверхня.

Тепер виберіть Filters > Remeshing, Simplification and Reconstruction > Surface Reconstruction: Ball Pivoting (Фільтри > Зміна сітки, спрощення та реконструкція > Реконструкція поверхні: обертання кулі). Клікніть стрілку вгору на полі одиниці виміру біля «Pivoting Ball Radius» (Радіус обертання кулі) один раз – повинно автоматично заповнитися відповідне значення. Застосуйте, і тепер у нас має бути сітка замість хмари крапок. Якщо вам не подобається сітка, ви можете повернутися і повторити ці кроки з трохи іншими параметрами.

 

Щоб ми могли взяти з собою інформацію про колір, який ми маємо при експорті з Meshlab, виконайте такі кроки:

Виконайте Filters > Texture > Parametrization: Trivial Per triangle (Фільтри > Текстура > Параметризація: тривіально для трикутника). Якщо ви отримали повідомлення про помилку, змініть межу між трикутниками на 1.

Далі виконайте  Run Filters > Texture > Transfer Vertex color to texture (Фільтри > Текстура > Перенести колір вершини у текстуру). На цьому етапі вас попросять зберегти проект, зробіть це. Використовуйте запропоноване ім'я для збереження файлу текстури – до імені проекту буде додано _tex.png.

Експортуйте у форматі OBJ у ту саму папку. Переконайтеся, що всі наявні прапорці встановлені, і ви побачите щойно створений файл текстури в полі праворуч.

Цей тип файлу також може використовуватися в 3D-пакетах та ігрових движках, таких як Unity або Unreal (для цього випадку вам необхідно буде перейти з Meshlab на 3D-редактор з відкритим вихідним кодом Blender).

 

Крок 3-й. Конвертація в GLB

На цьому кроці ми будемо використовувати професійне вільно розповсюджуване програмне забезпечення Blender — безкоштовний пакет для створення 3D-зображень з відкритим вихідним кодом. Він підтримує весь 3D-конвеєр – моделювання, оснащення, анімацію, симуляцію, рендеринг, композицію та відстеження руху, редагування відео та конвеєр 2D-анімації. Blender мав репутацію програми, яка була складною для вивчення. Практично кожна функція має відповідне їй поєднання клавіш, і враховуючи кількість можливостей, що надаються Blender, кожна клавіша була включена більш ніж одне поєднання. З того часу, як Blender став проектом з відкритим вихідним кодом, були додані повні контекстні меню до всіх функцій, а використання інструментів зроблено більш логічним та гнучким. Робочий простір Blender'а вважається одним із самих новаторських концепцій графічного інтерфейсу для графічних інструментів та натхненним дизайном графічного інтерфейсу патентованих програм, таких як Luxology Modo.

Завантажте програму Blender з офіційного сайту та встановіть її. Потім відкрийте і імпортуйте ваш файл OBJ. Якщо у вас виникли проблеми з переглядом чогось, коли файл був імпортований, натисніть «View» (Перегляд) у верхньому лівому куті області перегляду та встановіть прапорець «Sidebar» (Бічна панель). У правій частині області перегляду є вкладка з написом "View" (Перегляд). Змініть параметри початку та кінця кліпу на 0,01м та 10000м. Збільшуйте та зменшуйте масштаб, поки не побачите свою модель. Вона може бути перевернута, тому розгорніть її як слід і трохи зменшіть.

 

 

Клацніть по моделі. У лівій частині сцени виберіть значок «rotate» (повернути), а потім використовуйте різні кільця орієнтації, доки не переконаєтеся, що підлога знаходиться в правильній орієнтації. На цьому етапі роботи теж зменшіть масштаб моделі (ми налаштуємо остаточний розмір на наступному етапі), а зараз зручніше буде зробити його приблизно 10% від вихідного розміру.

Ви також можете помітити, що у моделі немає текстури. У верхньому правому куті вікна перегляду є кілька значків затінювання області перегляду. Виберіть «Material preview» (Попередній перегляд матеріалу), і ви побачите кольори моделі.

Також можна витратити якийсь час на використання інструментів редагування Blender, щоб сітка виглядала красивішою – заповніть дірки, видаліть сторонні грані. Існує безліч інструкцій і посібників, які можуть допомогти вам у цьому, тому ми не вдаватимемося в подробиці. Як тільки ви задоволені сіткою, експортуйте її як «GLTF 2.0». Розширення файлу, яке вам дійсно потрібно – це двійкова версія gltf, .glb.

 

Крок 4-й. Імпортування в Mozilla Hubs

Mozilla hubs — це безкоштовна браузерна соціальна VR-платформа, яка дозволяє запрошувати інших людей у свій простір. Вона використовує технологію віртуальної реальності, завдяки якій ви можете не встаючи з місця відвідати музей плакатів про карантин Apart, арт-проект австрійської художниці Мартини Менегон On the other hand чи нічний клуб The Circle, створений цифровим художником та мислителем Enea, або сотні інших місць. Щоб потрапити в ці простори, вам не потрібний VR-шолом або спеціальне обладнання – достатньо мати ноутбук або смартфон з інтернетом.

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

Відкрийте Firefox та перейдіть на сайт hubs.mozilla.com. Вам потрібно буде створити обліковий запис. Натисніть "Create a room" (Створити кімнату), а потім виберіть "Choose Scene" (Вибрати сцену). Виберіть "Create a scene with Spoke" (Створити сцену за допомогою Spoke).

Створіть новий проект і виберіть "New Empty Project" (Новий порожній проект).

Ви повинні побачити аватар, який представляє вашу вихідну точку, та поверхню. У нижній лівій панелі натисніть "My assets" (Мої активи). Завантажте сюди свій файл .glb, а потім перетягніть його на сцену, перетягнувши на панель ієрархії прямо над поверхнею. Використовуйте значок вихідної точки та ландшафт як орієнтир, щоб правильно масштабувати вашу сцену – ми масштабували нашу сітку до 0,002 від її розміру. Ви можете зберегти або приховати кратерну місцевість, додати додаткові об'єкти, такі як освітлення.

 

 

Коли ви будете задоволені картинкою, виберіть "Publish to hubs" (Опублікувати в хабах). Цілком ймовірно, що у вас буде занадто багато полігонів (наша сітка досить деталізована), тому на мобільних пристроях вона може не працювати. В ідеалі на етапі змішування ми зменшили б розмір сітки до менше 50 000 полігонів, щоб вона добре і швидко працювала. Всі інші параметри продуктивності мають бути в нормі. Опублікуйте сцену, виберіть "view your scene" (переглянути сцену), а потім "Create a room with this scene" (Створити кімнату з цією сценою).
Увійшовши до кімнати, ви можете поділитись посиланням з іншими та показати їм свій скан.

 

Ця послідовність дій повинна працювати для будь-якого об'єкта хмари точок, який ви отримаєте, скануючи за допомогою Dot3D pro або іншого програмного забезпечення з підтримкою Intel RealSense.

Якщо ви разом з нами пройшли всі 4 кроки, то прийміть наші вітання! Ви створили простір, в який люди можуть потрапити через браузер або навіть за допомогою гарнітури віртуальної реальності.

 

 

Давайте разом насолодимося фінальною сценою: