Віртуальна реальність з Google

  1. Ця стаття - короткий екскурс в основи роботи з віртуальної і доповненої реальністю. Я не ставив завдання...
  2. Простота - запорука успіху
  3. Взаємодія з віртуальною реальністю
  4. Практика
Ця стаття - короткий екскурс в основи роботи з віртуальної і доповненої реальністю. Я не ставив завдання в повній мірі розкрити всі можливості Google VR SDK і планував дати мінімальну базу тим, хто цікавиться цими технологіями і хотів би почати працювати з ними.

З історії 3D

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

Сама ідея 3D-зображення досить стара, існує безліч технологій, що дозволяють відтворювати тривимірну картинку. Наприклад, всі бачили в кінотеатрах анагліфние окуляри з лінзами різного кольору. Зображення подається на екран з двох ракурсів і розділеним на дві частини спектром кольору. У цьому випадку кожен ракурс пропускається через один з фільтрів, за рахунок чого і з'являється ілюзія обсягу. Головний недолік подібного методу - помітна втрата кольору.

На наступному етапі розвитку технології з'явилися так звані затворні окуляри, які називають ще светоклапаннимі, - їх теж використовуються в кінотеатрах. Пристрій таких окулярів відрізняється: на кожній лінзі стоїть невеликий екран з роздільною здатністю в один піксель, він може або повністю закрити зображення, або цілком пропустити його. Окуляри черзі перемикаються між екранами, дозволяючи нам бачити зображення то одним, то іншим оком. При цьому, щоб побачити об'ємну картинку, нам необхідно синхронізувати перемикання очок з телевізором або кіноекраном. Це можна зробити по радіоканалу, або, як найчастіше і буває, за допомогою встановленого на окулярах інфрачервоного приймача і передавача, розташованого біля екрану. Ще один недолік такого методу полягає у втраті яскравості - адже половину часу ми одним оком нічого не бачимо. Крім того, від самого обладнання для відтворення потрібна висока частота зміни кадрів.

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

Простота - запорука успіху

Винахідники Google Cardboard зробили все просто і геніально, вирішивши використовувати для передачі тривимірної картинки звичайний смартфон. До цього існувало безліч варіантів очок, обладнаних різними екранами, але дозвіл у матриці таких екранів було досить скромним. При цьому такі окуляри були дуже дорогими. А запропонований Google Cardboard - шматок звичайного картону з двома лінзами, в який залишається вкласти свій телефон. Цього достатньо, щоб побачити тривимірну картинку своїми очима.

Подальшим розвитком Cardboard стала поява Daydream - від попередника пристрій принципом роботи не відрізняється, але, в порівнянні з ним, має істотні плюси. Зокрема, матеріал, з якого виконаний сам Daydream, вже не просто картонка, він набагато більш високої якості. Інший незаперечний плюс - софтовая підтримка самого Daydream.

Екран будь-якого телефону має набір характеристик, як і лінзи Cardboard. Класичний Cardboard має маркування у вигляді QR-коду, і перед тим як помістити в нього свій телефон, потрібно було це код вважати, щоб занести в телефон параметри лінз. Поєднавши параметри, пристрій міг підрахувати, як відображати картинку, щоб вона дійшла до вас з мінімальними спотвореннями.

При використанні Daydream досить просто покласти пристрій, щоб воно вважало параметри самих очок за допомогою NFС. Сама мітка захована в задній кришці.

Також у Cardboard є невеликий пульт управління; багато виробників випустили аналоги Cardboard і свої пульти, найрізноманітніші: інерційні, гравітаційні, просто джойстики. У Daydream є дві кнопки і невеликий тачпад, який дозволяє, проводячи пальцем, рухати об'єкти в просторі або переміщатися самому. У Сardboard була всього лише одна кнопка, на корпусі самих очок, яка просто фіксувала натискання і передавала цю інформацію на екран телефону.

Cardboard можна було використовувати з будь-яким телефоном, який фізично містився в саму коробку і був дуже дешевим. Для роботи з Daydream на момент написання статті сертифіковані за все три телефони: ZTE Axon 7, Google Pixel і Motorola Moto Z, до них планують додавати нові моделі, але для використання Daydream обов'язково потрібно операційна система не нижче Android 7.0.

Взаємодія з віртуальною реальністю

Найцікавіше починається, коли ми не просто дивимося на тривимірне зображення (3D можна побачити і по телевізору), а починаємо обертати головою.

Будь-який сучасний телефон обладнаний Мікроелектромеханічні cенсор. Це мікроскопічні пристрої, в яких на кристалі зібрана електроніка і невеликі рухливі механічні деталі, що дозволяють відслідковувати різні зовнішні чинники. Напевно, всі знають, що таке гіроскоп - пристрій, за допомогою якого можна дізнатися кут повороту. У разі MEMS-датчиків, гіроскоп віддає не саме кут повороту, а кутову швидкість. Усередині нього є невеликий елемент, який рухається під дією сили Коріоліса (сподіваюся, ви згадайте, що це таке, з курсу фізики). Це дозволяє дізнатися кутову швидкість, а вже проинтегрировав її, ми зможемо визначити і кут повороту. Правда, цей метод поганий тим, що, повертаючи телефон в різні боки, ми, швидше за все, не зможемо повернутися в ту ж точку, де були спочатку.

Другий цікавий датчик - акселерометр. Він визначає діючі на телефон сили, зокрема, прискорення вільного падіння. У спокійному стані він буде показувати звичайне прискорення вільного падіння на нашій планеті, що відповідає приблизно 9,8 м / с ². Але, якщо ми почнемо рухати або обертати телефон, надамо йому прискорення. В результаті в ці моменти датчик не буде давати необхідні свідчення. Тільки, коли ми припинимо рух, система заспокоїться, і ми зможемо дізнатися силу, спрямовану до землі. Як бачите, для того, щоб просто визначити положення телефону в просторі, ні один з двох згаданих нами датчиків не придатний.

Однак, з огляду на, що гіроскоп «тікає» з часом, а акселерометр «тікає» тільки в момент обертання, можна обчислити положення пристрою, застосувавши різні математичні методи, наприклад, фільтр Калмана. Якщо ви програмували під Android, напевно звертали увагу, що в самому Android SDK серед списку датчиків є не тільки акселерометр і гіроскоп, але і так званий TYPE_ORIENTATION. Це як раз один з таких математичних методів, що обчислюють положення телефону, використовуючи інформацію обох датчиків. Самі вони, як правило, зібрані на одній мікросхемі, дуже часто на неї ж додатково ставлять датчик магнітного поля, тобто компас.

Ті, хто цікавиться квадрокоптера, напевно, помічали, що на нових моделях з'явився напис «барометр». Очевидно, що призначений цей пристрій не для аналізу погоди. Такий датчик використовується для вимірювання атмосферного тиск з метою визначення висоти. Так само воно працює і в телефоні, причому ми можемо обчислювати його переміщення по вертикальній осі з точністю до сантиметрів. Природно свідчення потрібно згладжувати за допомогою фільтра.

Практика

Google випустив для своїх пристроїв Cardboard і Daydream комплект Google VR SDK. Останній являє собою набір компонентів, які допомагають нам розробляти програми саме для відображення 3D-реальності, він доступний і на iOS, і на Android. Цей SDK дозволяє з легкістю будувати додатки і для віртуальної, і для доповненої реальності.

Google VR SDK бере на себе всю роботу з датчиками, завдяки йому, нам не потрібно обчислювати кватерніони, щоб зрозуміти, як повернути сцену в OpenGL при повороті голови. Досить просто покласти View на активують, і SDK зробить все самостійно.

Давайте побіжно розглянемо, як нам швидко почати працювати з Google VR SDK і як створити простенький додаток для Android. По-перше, вам знадобиться встановлена ​​Android Studio. Сам SDK викачуємо з офіційного git-репозиторію . Документація по SDK доступна тут .

Тепер просто відкрийте кореневу директорію сховища за допомогою Android Studio. Там ви зможете знайти приклади, які можна скомпілювати з початкових кодів та запустити на вашому Android-пристрої. У проекті відразу є конфігурації для запуску прикладів.

У Daydream є і свій невеликий контролер, роботу з яким SDK також підтримує. У нього є набір функцій callback, і ви можете спокійно використовувати цей контролер в своїх розробках. У SDK є спеціальний приклад 'sdk-controllerclient'.

Для максимально реалістичного сприйняття хотілося б відчути і звук, причому так, щоб було зрозуміло, звідки він виходить, куди спрямований і в якому середовищі поширюється. В бібліотеці для цього є GvrAudioEngine, який нагадує спрощені Open Audio Library або Direct3D Sound. Досить повідомити координати джерела звуку в просторі, і бібліотека сама змішає звук так, як вам потрібно. Ви можете задавати різні матеріали середовища, можете, наприклад, побудувати сцену, на якій з колонок праворуч і ліворуч грає різна музика, можете задати і більше джерел звуку.

Приклад 'sdk-treasurehunt' являє собою досить просту гру, реалізовану на чистому OpenGL. У ній також використовується GvrAudioEngine для додання грі об'ємних звукових ефектів.

Є в Google VR SDK і чудовий, хоч і невеликий, набір в'юшок, які можна вбудовувати в свої додатки. Зокрема, VrPanoramaView - компонент для відображення панорамних фотографії на 360 градусів, причому відображення стереографической. Фотографію можна просто покласти в ресурси програми і буквально одним рядком викликати VrPanoramaView.loadImageFromBitmap (), щоб взяти саме цю картинку і відобразити її. У підсумку ви отримаєте готовий компонент, який користувач зможе побачити в своєму додатку - це звичайна View, така ж, як і всі інші в Android.

Можна відобразити відразу кілька таких компонентів на одному екрані, можна вивести один на повний екран, і при цьому щоб перемикатися між окулярами і простим відображенням, вам досить натиснути на кнопку, яка буде намальована бібліотекою. Також є можливість додавати відео за допомогою компонента VrVideoView. Причому якщо вам набридне дивитися якийсь момент, ви зможете відео перемотати.

Два семпли з SDK 'sdk-simplepanowidget' і 'sdk-simplevideowidget' показують як зовсім просто можна створити додатки з такими вбудованими об'єктами.

Виникає питання, звідки взяти такі відео і картинки? Але деякі компанії вже почали випускати фотоапарати у вигляді невеликих брелоків, які мають об'єктиви з двох сторін. З їх допомогою можна зробити панорамні фотографії на 360 градусів - вони навіть самостійно можуть їх з'єднувати - але відео зробити не вийде. Для цього знадобитися і досить дорога конструкція, і спеціальний софт, здатний склеїти отримані картинки і перетворити їх в контент, придатний для відображення в віртуальної реальності.

Рішення Odyssey включає 16 синхронізованих камер.

Де можна застосувати описані технології? Перший варіант, очевидно, ігри. Як правило, OpenGL - це шутери та інші ігри, де нам необхідно сприйняття глибини. Netflix недавно запустив сервіс для відображення 3D-контента, ця бібліотека теж може допомогти вам написати яке-небудь власне рішення для відображення рухомих зображень.

Можна дати можливість покупцям в магазині, використовуючи телефони, бачити поруч з цінниками товарів їх додаткове опис.

Застосувати їх можна і в сфері продажів нерухомості. Покупцеві і продавцеві зустрічатися, як правило, незручно. А за допомогою такого відео покупцеві буде набагато простіше заздалегідь оцінити, чи варто йому взагалі їхати дивитися той чи інший об'єкт.

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

Ось невеликий рекламний ролик Google, який демонструє, як виглядає Google Earth в окулярах віртуальної реальності. Такі відео ви можете подивитися на звичайному моніторі, але ті ж самі картинки в окулярах будуть виглядати об'ємними. Переміщення в просторі здійснюється за допомогою пульта від Daydream, також для деяких телефонів є можливість використовувати барометр і переміщатися, просто обертаючи головою.

Інша дуже цікава ідея використання подібних технологій - 3D-друк.

Один стартап запропонував користувачам вдатися до доповненої реальності для побудови моделей разом з будь-якими іншими засобами моделювання. Використовуючи звичайний контролер, не можна отримати моделі високої точності - похибка буде дуже великий. Але маленький сувенір ми за допомогою таких контролерів можемо зліпити і прямо з додатку замовити його друк на 3D-принтері. Ідея ця хороша і монетизуються дуже скоро, тим більше, принтери для подібних виробів поступово дешевшають.

Виникає питання, звідки взяти такі відео і картинки?
Де можна застосувати описані технології?