Заархівувати - Тривимірні RealSense: реальні персонажі в віртуальному міревашем ігровому движку

  1. 1. Введення
  2. 2. Чому це важливо
  3. 3. Створення свого 3D-персонажа
  4. 4. Поступове формування 3D-моделі голови в режимі реального часу
  5. 5. Збереження 3D-моделі голови і використання її в грі
  6. 6. Перука або капелюх?
  7. 7. Підказки та поради
  8. 8. Висновок
  9. про автора

Випуск комплекту Intel® RealSense ™ SDK припинений. Його підтримка та оновлення більш недоступні.

Завантажити PDF

1. Введення

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

Малюнок 1
Малюнок 1. Перенесіться в віртуальну реальність за допомогою Intel® RealSense ™ SDK: накладіть оцифроване зображення самого себе на персонажа гри

Наступним великим кроком може стати повне сканування навколишнього простору засобами perceptual computing . Таким чином, комп'ютер зможе створити 3D-модель навколишнього простору і всього, що в ньому знаходиться. Тільки уявіть комп'ютер, який буде не гірше користувача розуміти, що розташоване навколо нього. До того ж, на відміну від користувача, який в кожен момент часу може концентруватися тільки на невеликій частині навколишнього простору, такий пристрій буде сприймати все одночасно.

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

Малюнок 2
Малюнок 2. Приклад відсканованого 3D-зображення з Intel RealSense SDK

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

Для розуміння представлених матеріалів корисно знати основи перетворення даних глибини в 3D-хмара точок, докладно описані в моїй попередній статті Технологія Intel® RealSense ™ і хмара точок (Intel® RealSense ™ Technology and the Point Cloud) , А також базові поняття 3D-графіки (обробка вершин, накладення текстур і використання інших елементів при створенні 3D-ігор і моделей).

2. Чому це важливо

Щоб приймати рішення про навколишній світ, потрібно розуміти, що в ньому відбувається, і зображень у форматі 2D не завжди буває достатньо. Комп'ютера необхідні дані про масштаб і просторі, а для їх передачі найкраще підходить тривимірна модель.

Ми будемо посилатися на стандартні методи роботи з 3D-графікою, а також поговоримо про завдання, з якими розробникам доведеться зіткнутися при появі нового обладнання. В найближчому майбутньому з'являться задні ІК-камери, що працюють в режимі реального часу, і хто знає, що чекає нас після цього? Можна не сумніватися, що скоро з'явиться безліч цікавих розробок, в основі яких лежатиме сканування людини і інтеграція його моделі в віртуальний світ.

З практичної точки зору ця стаття стане в нагоді тим, хто збирається використовувати цю технологію для впровадження відсканованих 3D-об'єктів у власні програми. Ми поговоримо про можливості Intel RealSense SDK і про те, як можна доповнити їх власними програмами. Крім того, тут буде коротко описано зшивання 3D-геометрії, яке можна використовувати для вирішення різних завдань, що виходять за рамки даної статті.

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

3. Створення свого 3D-персонажа

Маючи в своєму розпорядженні однієї ІК-камерою, складно придумати зручний спосіб отримати зображення сидячого біля монітора користувача на повний зріст. Швидше за все, в кадр потраплять тільки плечі, обличчя, верхня частина тіла і руки. Тому здається розумним створювати іншу частину моделі стандартним способом. Як приклад ми взяли за основу модель тіла людини, голова якої є окремим від'єднується елементом.

Малюнок 3
Малюнок 3. 3D-персонаж, голова якого моделюється окремо

Перевага такого підходу в тому, що ми легко можемо замінити стандартну голову персонажа головою, змодельованої на основі даних ІЧ-камери. В статті про хмару точок я детально описав, як в реальному часі отримати точне зображення предмета, виходячи з набору сирих даних глибини. У нашому випадку цей метод не дасть бажаних результатів: кордону особи будуть розмиті, волосся погано розпізнані, а задньої частини голови не буде взагалі. Навряд чи нам би хотілося так виглядати в віртуальному світі. Потрібен інший підхід, який дозволив би виправити ці помилки.

Можна поступити наступним чином. Візьмемо за основу стандартну модель голови з передбачуваними областями, що відповідають різним частинам особи, і потім будемо міняти положення вершин за даними, що надходять з ІК-камери. Дані про колір, отримані в форматі RGB з камери, можна перетворити в текстуру і накласти на модель голови за допомогою UV-перетворень і згладжування текстур. Щоб домогтися більш точних результатів, краще використовувати окремі знімки, а не потік даних. За рахунок невеликих зрушень і змін можна знайти більш точну відповідність між моделлю голови і розрізненими 3D-даними. На виході вийде нова голова з накладеною текстурою. Вона стане частиною нашого гібридного персонажа і замінить голову стандартної 3D-моделі.

Малюнок 4
Малюнок 4. На текстурі персонажа передбачені спеціальні області для обличчя, очей і вух

Звичайно, це тільки перший крок на шляху до створення вашої копії в віртуальному світі. Але тут нам знову знадобиться ІК-камера. За даними RGB-камери можна визначити кольору шкіри і одягу людини. Отримана інформація про колір вплине на всю модель цілком, а саме на колір рук і одягу. Оскільки нижня частина тіла не сканується, колір і фасон штанів, черевик і інших предметів гардероба можна змінити вручну. Така можливість передбачена в більшості RPG-ігор і в багатьох іграх від третьої особи. Її ми в даній статті розглядати не будемо.

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

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

4. Поступове формування 3D-моделі голови в режимі реального часу

Ми розглянули основні принципи даного методу. Тепер настав час детальніше поговорити про те, як накладати особа на модель голови. Тут нам знадобиться знання основних принципів 3D-програмування. Не будемо зупинятися на процесі отримання даних ІЧ-камери для побудови 3D-моделі в режимі реального часу і інформації про колір для створення текстури. Все це детально описано в статті про хмару точок . Тут ми поговоримо про те, як накласти ці дані на модель голови фіксованого розміру.

Малюнок 5
Малюнок 5. Каркас голови, змодельований вручну

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

На щастя, цієї проблеми можна уникнути за допомогою рельєфного текстурування . Ідея полягає в тому, щоб замість щільної сітки точок 3D-моделі зберігати в текстурі вектор з інформацією про форму поверхні. Детальну інформацію про даний метод, проілюстровану прикладами, див. На сторінці http://www.mat.ucsb.edu/594cm/2010/adams_rp1/index.html. Проводячи паралелі з навколишнім світом, текстуру можна уявити як закриває голову тканину, вигини якої повторюють риси обличчя. При цьому кути викривлення поверхні визначаються нормалями і зберігаються в пікселях текстури. Сучасне ігрове апаратне забезпечення оптимізують для швидкого рендеринга результатів, тому дані з високою роздільною здатністю зручніше зберігати в структурах, а не в геометрії сцени. Таким чином, отримуючи з ІК-камери в режимі реального часу 3D-дані з високою роздільною здатністю, можна побудувати карту нормалей, пов'язану з текстурою моделі. Завдяки цій техніці дрібні деталі не будуть загублені навіть для неточних геометричних моделей з невеликою кількістю вершин.

Накласти текстуру набагато простіше. Досить отримати RGB-дані з камери, застосувати їх до певної точки моделі голови і змішати з уже існуючою текстурою. Однак і тут є певні нюанси. Зазвичай текстуру для моделі малює художник. Він включає в неї деталі, які не вдається охопити в одному кадрі, наприклад бічні частини голови і потилицю. Можливий спосіб вирішення проблеми - поєднувати RGB-текстуру, отриману за даними камери, з текстурою голови і згладжувати її по краях, зверху і знизу. Недолік такого підходу в тому, що вашим у 3D-моделі буде тільки особа. Решта частини голови - зачіска, вуха, бічні частини і потилицю - залишаться намальованими художником, що може привести до досить сумних результатів.

Малюнок 6
Малюнок 6. Створення текстури голови на основі одного знімка анфас

Набагато краще відсканувати голову з різних ракурсів, зробити кілька фотографій (прямо як в поліцейській дільниці) і використовувати їх для побудови моделі за допомогою програмних засобів. В Intel RealSense SDK є відповідний приклад. Його можна запустити безпосередньо з папки скомпільованих виконуваних файлів.

Малюнок 7
Малюнок 7. Приклад 3D-моделі, побудованої за результатами сканування голови програміста

Таким чином, щоб відображати голову 3D-персонажа з різних ракурсів, а не тільки в фас, будуть потрібні не тільки всі ці знімки, але і спеціальна текстура, заздалегідь накладена на модель. Методи, які використовуються з 3D-сканерами, краще підлаштовувати під потреби кожного окремого проекту. Далі ми поговоримо про те, як це зробити.

Малюнок 8
Малюнок 8. 3D-сканування голови, створене користувачем. методи зшивання

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

Більш зручний спосіб, про який вже згадувалося вище, - зробити кілька знімків голови під різними ракурсами і об'єднати їх в одній моделі. Можна зробити знімки окремо, а потім намагатися об'єднати їх вручну за допомогою спеціальних інструментів для роботи з графікою. Однак чим далі голова знаходиться від камери, тим сильніше вона буде зміщуватися в процесі сканування, що може перешкодити при об'єднанні знімків. Якщо дані сканування виявляться досить точними, їх можна буде використовувати для коригування вихідної моделі, змінюючи положення існуючих вершин і додаючи нові. Чим більше знімків буде зроблено, тим точніше вийде модель. За допомогою даного методу можна відтворити голову цілком, якщо, сидячи за столом, користувач зможе повертатися на 360 градусів. Однак утримувати голову в центрі в процесі сканування дуже складно, як і перетворювати отримані 3D-дані. У цьому недолік даного підходу.

Малюнок 9
Малюнок 9. Невелика неточність в положенні голови - і ось вже у персонажа виросло два носа

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

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

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

5. Збереження 3D-моделі голови і використання її в грі

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

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

Щоб зберегти 3D-модель, потрібно створити файл і додати туди кілька рядків коду з описом вершин і всього обличчя. Ось що вийшло при використанні формату OBJ.

# Коментарі до OBJ-файлу даних про модель # Об'єкт o mesh1 # Модель g mesh # Список вершин v 3999.993408 999.998352 -0.000000 v 3999.993408 999.998352 -0.000000 v 3999.993408 899.998352 -0.000000 vt 0.000000 -0.000000 0.000000 -0.000000 vt 1.000000 -0.000000 0.000000 -0.000000 vt 1.000000 -1.000000 0.000000 -0.000000 vn 0.000000 0.000000 1.000000 vn 0.000000 0.000000 1.000000 vn 0.000000 0.000000 1.000000 vn 0.000000 0.000000 1.000000 # Особа f 1/1/1 3/3/3 2/2/2 f 4/4/4 6/6 / 6 5/5/5 f 7/7/7 9/9/9 8/8/8

Більшість інструментів розробки і засобів перегляду 3D-моделей підтримує формат OBJ, так що можна відразу перевірити, що вийшло. Щоб зберегти додаткові дані, наприклад диффузную компоненту, буде потрібно створити новий формат 3D-файлів для експорту та імпорту або реалізувати експорт в один з найбільш складних існуючих форматів. Для цієї мети підійде формат DirectX. Іноді його використовують для експорту тексту, проте він підтримує набагато ширший набір атрибутів, в тому числі призначені для користувача формати зберігання вершин.

В процесі обробки 3D-моделі голови її необхідно прикріпити до моделі тіла, завантаженого в ігровий движок. Для цього ви (або ваш дизайнер) повинні відзначити на моделі спеціальну точку, відповідну шиї. Саме на ній буде кріпитися голова. Отже, модель голови встановлена ​​на тулуб, проте ми бачимо, що на цьому робота поки не закінчена.

Малюнок 10
Малюнок 10. Перша спроба поєднати нашу 3D-модель голови з тілом стандартної моделі

Підсумкова модель зображена на малюнку 10. І хоча голова вже об'єднана з тулубом, персонажа поки складно назвати переконливим. У процесі сканування вся увага приділялася передньої і бічних сторонах голови, так що верхня і задня частини просто пропали.

6. Перука або капелюх?

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

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

Малюнок 11
Малюнок 11. Персонаж відмінно вписався в сцену, і 3D-модель голови виглядає переконливо

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

7. Підказки та поради

рекомендації

  • Зберігайте дані про колір обличчя в дифузійної компоненті вершини. Це позбавить вас від необхідності використовувати текстуру, а також послужить додатковою перевагою при оптимізації підсумкової моделі.
  • Якщо ви хочете відсканувати голову цілком, не додаючи до моделі персонажа капелюхи й перуки, приберіть волосся назад або укладіть їх гелем, перш ніж приступати до сканування. Чим рівніше вони будуть лежати, тим краще вийде результат. Розпатлане волосся - перешкода для ІК-камери. Вони створюють розсіяне зображення і заважають процесу сканування.

зверніть увагу

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

8. Висновок

Ми виконали стільки роботи, а навчилися сканувати тільки обличчя людини. Альо НЕ Варто впадаті у Відчай! Техніку, яку розглянуто в даній статті, можна використовувати для сканування будь-яких предметів і відображення їх у віртуальному світі. Після оцифровки свого тіла головний герой фільму «Трон: спадщина» сам переноситься в кібер-всесвіт. Можливо, в майбутньому це стане реальністю, і коли-небудь люди зможуть переміщатися в віртуальний світ цілком. Навчившись сканувати обличчя людини, ми вже зробили перший крок в цьому напрямку. Не можна порівнювати сканування особи зі скануванням чашки або іграшки, адже в першому випадку невід'ємна частина вас самих переноситься в віртуальну реальність.

Можливо, скоро в кожній комп'ютерній грі з'явиться можливість створювати персонажів, які будуть повністю відповідати зовнішньому вигляду і характеру гравця. Цифрові двійники зможуть залишатися з нами протягом кількох років, переходячи з гри в гру і не втрачаючи при цьому свої характерні особливості. Тільки уявіть, що всі персонажі комп'ютерної гри виглядають і поводяться як їх реальні двійники, та ще й розмовляють їх голосами. Як би ви стали сприймати комп'ютерні ігри, якби їх герої нагадували людей з реального світу? Додаючи персонажу особа, ви його оживляє. Цікаво, що вийде в результаті?

про автора

У вільний від написання статей час Лі Бембер (Lee Bamber) керує британською компанією The Game Creators , Яка спеціалізується на розробці та поширенні засобів створення комп'ютерних ігор. Ця компанія веде свою історію з 1999 року. Співпрацюючи з іншими розробниками ігор, вона створила безліч популярних програм: Dark Basic, The 3D Game Maker, FPS Creator, App Game Kit (AGK). Новітньою розробкою The Game Creators став пакет Game Guru.

6. Перука або капелюх?
В найближчому майбутньому з'являться задні ІК-камери, що працюють в режимі реального часу, і хто знає, що чекає нас після цього?
6. Перука або капелюх?
Як би ви стали сприймати комп'ютерні ігри, якби їх герої нагадували людей з реального світу?
Цікаво, що вийде в результаті?

Часы работы

Вторник – cуббота: 12:00-22:00
Воскресенье - понедельник: выходной