Райан Кларк (Ryan Clark), Chronosapien Interactive
Загрузить PDF[PDF 571KB]
Введение
При проектировании решений, использующих современные технологии мультимедиа (например, управление жестами), наша цель как разработчиков приложений состоит в создании интуитивной, удобной, увлекательной и интересной для пользователя среды взаимодействия. При первом же запуске система навигации должна быть настолько интуитивной, чтобы пользователи могли сразу же начать пользоваться возможностями этого приложения. В наших самых последних экспериментах с технологией Intel® RealSense™ мы постарались сделать приложение одновременно и удобным, и интересным для пользователей. Вместо того, чтобы использовать Intel RealSense в качестве замены стандартных способов ввода, мы обратили основное внимание на преимущества естественных жестов и уникальных возможностей SDK Intel RealSense. Наше первое приложение Space Betweenиспользует отслеживание лица и рук, а второе включает более редкие возможности SDK, такие как определение эмоций и разделение пользователей. В ходе работы мы получили определенный опыт, который может оказаться полезным для разработчиков, в частности, при проектировании удобных жестов, интерфейсов и меню.
Проектирование ввода для технологии Intel® RealSense™
Рисунок 1. Приложение Space Between, разработанное для использования технологии Intel® RealSense™
При создании первого приложения для Intel RealSense мы начали проектирование с анализа возможностей платформы. Вместо изучения возможностей адаптации стиля игры к управлению жестами мы рассматривали уникальные способы взаимодействия, доступные при управлении жестами, и варианты пользовательских интерфейсов на их основе. Поскольку разработка началась с Intel® Perceptual Computing SDK (предшественник технологии Intel RealSense), мы сосредоточились на двухмерном положении рук и отслеживании раскрытия ладоней в качестве основных методов взаимодействия с пользователем. Используя только эти два простых способа взаимодействия, мы стремились предоставить пользователям самый широкий набор игровых возможностей. Большая часть изменений в игровом процессе связана просто с изменением ориентации руки пользователя, что придает разным жестам разные ощущения, хотя измеряемые значения были одними и теми же.
Основное приложение, созданное с использованием технологии Intel RealSense, называется Space Between. Space Between — это игра, разработанная в Unity*, где игрок исследует морские глубины, управляя различными представителями фауны [рис. 1]. Игра разделена на несколько последовательных мини-игр, в каждой из которых пользователь управляет разными животными и использует разные способы управления. Каждый жест используется так, чтобы имитировать естественное движение соответствующего животного. Так обеспечивается прямое управление. При прямом управлении рука ориентирована в соответствии с положением животного, мгновенно влияет на движение персонажа, поэтому пользователям гораздо проще осваивать управление игрой.
При создании этих мини-игр нужно было начинать с управления с помощью жестов. Мы последовательно прорабатывали каждый жест вплоть до получения приемлемых результатов. Поработав с моделями отслеживания рук, отслеживания лица и распознавания голоса в пакете Intel Perceptual Computing SDK, мы решили, что удобнее всего использовать модуль отслеживания рук. При переходе на Intel RealSense SDK мы обнаружили, что самыми мощными модулями были те, которые осуществляли отслеживание рук, хотя преимуществом всего пакета SDK является изобилие доступных модулей. Во всех мини-играх основным средством управления является отслеживание руки, а отслеживание головы было использовано позже для устранения проблем, связанных с длительными жестами (см. ниже).
Рисунок 2. Волнообразное движение на этапе Sunlight Zone
В первой мини-игре, которая называется Sunlight Zone, игрок управляет морской черепахой при виде сбоку. Проект игры начался с идеи использовать жест, схожий с движением руки, высунутой в окно автомобиля: плавное волнообразное перемещение руки вверх и вниз [рис. 2]. Черепаха повторяет движение руки игрока, набирая скорость с каждым волнообразным движением. Изначально отслеживалось только положение руки по оси Y в поле зрения камеры. После первого пробного этапа мы добились более точного отслеживания за счет измерения угла руки. С помощью этого метода мы сделали так, чтобы положение черепахи в воде соответствовало углу руки пользователя, из-за чего взаимодействие было более естественным. Мы получили значение угла руки из данных об ориентации ладони, предоставляемых модулем отслеживания руки, выделив одну ось [рис. 3].
Рисунок 3. Пример кода с выделением одной оси из данных отслеживания руки
Новые игроки очень быстро осваивали этот жест, но при тестировании игрового процесса оказалось, что менее чем через минуту у игроков уставали руки. На основе этого тестирования мы узнали о «расходе выносливости» [рис. 4] — степени накопления усталости при выполнении жестов поднятыми руками. Проблема состояла в том, что нужно было поднимать локоть перпендикулярно телу, он не поддерживал предплечье, и оказалось, что это один из самых утомительных жестов.
Рисунок 4.Формула расхода выносливости (источник: Consumed Endurance (CE) — измерение усталости руки при выполнении жестов без опоры: http://blog.jhincapie.com/projects/consumed-endurance-ce-measuring-arm-fatigue-during-mid-air-interactions/).
Мы по-прежнему хотели использовать волнообразное движение для управления персонажем, но для удобства (и для игры в течение длительного времени) нужно было дать пользователям возможность облокотить локти на стол. Мы добавили в игру крейсерскую скорость, когда персонаж замедляет движение. Для управления используется только угол руки. Это позволяет игрокам продолжать играть без начисления штрафных очков и без необходимости выполнять волнообразные движения в течение длительного времени.
Но даже после добавления управления углом руки, чтобы снять усталость, игрокам все равно требовалось отдыхать перед следующей мини-игрой — Midnight Zone. Чтобы дать игрокам отдохнуть, мы добавили мини-игру, в которой не использовались жесты рук. В мини-игре Twilight Zone игрок просто наклоняется в одну из четырех сторон для управления персонажем, имитируя движение персонажа (кита). С точки зрения кода для отслеживания наклона используется отслеживание положения середины головы по оси X и по глубине.
Проектирование интерфейсов для технологии Intel® RealSense™
Мы быстро поняли, что проектирование приложений, управляемых жестами, — не такой простой процесс. Для демонстрационной версии Space Between нам нужно было добавить простые элементы управления для выбора мини-игр. Для этого мы использовали простые кнопки. Нужен был способ выбора варианта в меню и его принятия. Наш первый интерфейс на основе жестов был прямой заменой управления с помощью мыши [рис. 5].Для выбора мы использовали положение рук, а жест толкания (позднее — большие пальцы вверх) был использован для принятия выбранного варианта. В качестве резерва использовалось голосовое управление. Это решение было создано очень быстро и предполагалось как временное, но мы сразу обнаружили, что работать с меню таким образом было неудобно и трудно. При выполнении жестов зачастую изменялось расположение указателя, из-за чего приходилось делать кнопки с крупными областями выбора. На следующем этапе мы разделили поле зрения камеры на три части и использовали для выбора только положение рук по оси X.
Рисунок 5.Первоначальное меню в демонстрации Space Between для выбора мини-игр
На следующем этапе мы добавили жест прокрутки влево или вправо [рис. 6]для переключения между играми путем вращения кругового меню. Для выбора текущего варианта меню использовался жест толкания (или поднятые большие пальцы). Такой подход оказался лучше с точки зрения наглядности (за счет фактического стимулирования пользователя взаимодействовать с системой), при этом снизилось количество ложных и случайных срабатываний. При проектировании интерфейсов для управления жестами мы обнаружили, что важно повысить чуткость реакции с помощью зрительной и звуковой обратной связи. Это позволило компенсировать отсутствие тактильной реакции.
Рисунок 6.Следующая версия меню выбора мини-игр в демонстрационной версии Space Between
При проектировании интуитивных интерфейсов мы чаще заимствовали принципы, принятые в мобильных интерфейсах, а не в среде ПК. Прокрутка и касание — простые жесты, хорошо известные пользователям, поэтому мы продолжили изучать различные способы их применения. Отметим одну важную особенность жестов в Intel RealSense SDK: при прокрутке каждая рука движется строго в заданном направлении [рис. 7]. Но у жестов махания (не путать с волнообразным движением, которое мы применили в первой мини-игре) направление не задается. Если нужно реализовать поддержку прокрутки любой рукой в любом направлении, следует отслеживать положение руки и определить ее скорость. Преимущество такого подхода состоит в том, что, если движение руки пользователя распознается как прокрутка, можно точно определить время и скорость прокрутки. Это позволяет сообщать инерцию движениям, к чему пользователи уже привыкли на мобильных устройствах.
Рисунок 7.Жесты прокрутки и махания согласно документации Intel
Эти решения превосходны для навигации в меню, но мы обнаружили, что иногда в нашем приложении меню вообще не нужно. При проектировании игры мы часто обращались к примеру Journey. Если вы пока не знаете, что это такое, то Journey — это великолепная приключенческая игра в стиле артхаус, разработанная компанией thatgamecompany. В игре основной упор делается на минимализм, за счет которого выделяются другие элементы игры. Начальный экран представляет собой фоновое изображение пустыни и слова Start: New Journey. Использование меню сведено к крайнему минимуму, а для обучения игроков управлению применяется прозрачная анимация [рис. 8]. При проектировании начального экрана для игры Space Between мы решили вообще отказаться от этапа выбора уровня, а вместо этого сосредоточились на ощущениях пользователей при их первом взаимодействии с игрой. Когда распознается рука пользователя, движения начинают появляться в воздухе перед пользователем, образуя порывы ветра. Пользователь играет с простой сценой перед собой, тем временем порывы ветра раскачивают лодку, начиная создавать атмосферу игры. Пользователю не обязательно выбирать определенный этап. Все мини-игры следуют по очереди.
Рисунок 8. Снимок экрана игры Journey с минимальным использованием пользовательского интерфейса
При проектировании меню (или игрового процесса), где требуются жесты, важно добавить их графическое представление, что, казалось бы, очевидно. Но это дает пользователю возможность быстро взаимодействовать с системой без необходимости изучать все возможные команды. Это особенно важно, поскольку не всегда возможно применять интуитивные жесты для выбора пунктов меню. При обучении игрока жестам мы использовали простые спрайтовые анимации для графических представлений [рис. 9]. По этим представлениям игрок может определить ориентацию руки (или головы), какую руку нужно использовать (или в некоторых случаях обе руки), а также нужное движение. В нашем случае в начале игры пользователь не теряет очки при неправильных действиях, поэтому он может спокойно изучить, как работают те или иные жесты. Мы применили в игре исследовательский подход, помогающий проходить последовательно усложняющиеся уровни. По мере того как игрок обучается жестам в уже пройденных им мини-играх, мы используем эти же значки в последующих мини-играх, чтобы взаимодействие проходило привычным образом.
Рисунок 9.Инструкция по выполнению волнообразного движения в игре Space Between
Поскольку пользователи не знакомы с большинством способов взаимодействия, важно предоставлять обратную связь для действий. Распознавание жестов не всегда работает безупречно, поэтому, если ввод не распознан или распознан неправильно, пользователь должен знать об этом. В нашей демонстрационной версии Space Betweenэто всегда очевидно пользователю: соответствующая информация всегда отображается в верхней части экрана [рис. 10]. При распознавании жестов рук, головы и т. д. появляется соответствующий значок. В полной версии приложения мы решили применить более интегрированный подход. Если система в течение какого-то времени не получает команд от пользователя, соответствующее животное возвращается в состояние по умолчанию. Например, в мини-игре Sunlight Zone, если система не распознает руку пользователя, черепаха поворачивается и плывет прямо, изменяется ее анимация. Мы применили еще один эффект: все персонажи нарисованы так, что под управлением игрока они начинают светиться определенным цветом. Для игр, в которых используется указатель, мы применили плавное появление и исчезание указателя при получении или потере ввода. Также предоставляются соответствующие звуковые подсказки.
Рисунок 10.Наглядная обратная связь при обнаружении рук и головы
в демонстрационной версии игры Space Between
При интеграции сложных меню мы обнаружили, что использовать жесты в качестве основных средств управления было не всегда необходимо. Если приложение это допускает, то использовать мышь и клавиатуру для наиболее сложных элементов — полос прокрутки и ввода данных — всегда гораздо удобнее для пользователей. Жесты удобны для переключателей и кнопок, но управление выбором нужного расположения по нескольким осям может быть затруднено для пользователя. Для решения этой проблемы можно использовать ввод данных путем движения только по одной оси после сжатия или разжатия пальцев, но основную проблему так все равно не решить. Управление с помощью жестов постепенно становится удобнее, но в большинстве случаев пользователи не привыкли к такому способу управления. Если использовать стандартные методы ввода невозможно, то лучше всего просто сделать меню крупнее. При этом также неплохо реализовать поддержку стандартных методов ввода в качестве запасного решения.
Выбор нужного жеста крайне важен при принятии решения о том, какими жестами нужно управлять меню, поскольку показать жесты на экране можно не всегда. Как мы уже говорили, у многих таких действий нет соответствующих им и хорошо известных пользователям жестов. Одним из наиболее заметных примеров является меню приостановки (или настроек). Отображение меню приостановки очень важно в большинстве игр, этот жест должен быть очень быстрым для пользователя и легко и быстро распознаваться приложением. Но из-за таких требований при проектировании возникают существенные затруднения. У жестов других средств ввода (приложения для мыши и клавиатуры, планшеты, мобильные устройства) нет ничего общего. В играх с клавиатурой используется клавиша Escape, на смартфонах обычно применяется прокрутка с левого края экрана к середине (но не всегда). Обычно это действие связано с левым верхним углом экрана, но все равно многие пользователи ассоциируют его с кнопкой закрытия настольного приложения и тянутся к правому верхнему углу. Использование определенных углов экрана или жестов прокрутки не всегда целесообразно из-за прерывистого движения и случайного использования. В приложениях Intel RealSense разработчики Intel рекомендуют использовать знак «V» [рис. 11]для отображения главного меню. Причина выбора именно этого жеста — простота распознавания и низкая вероятность случайного выполнения. Этот жест не является интуитивным и привычным для пользователей, но для образования у пользователей устоявшегося навыка требуется лишь время. Помимо использования этого жеста для меню приостановки мы добавили множество дублирующих систем. При потере отслеживания (когда руки пользователя оказываются вне поля зрения камеры) в течение определенного времени появится меню (с привычным управлением с помощью клавиатуры и мыши).
Рисунок 11.Жест «V» из документации Intel RealSense, рекомендуемый для открытия меню
Несколько модулей с технологией Intel® RealSense™
При реализации нескольких модулей из состава Intel RealSense SDK нужно учитывать не только простоту использования и привычность, не менее важна и производительность. При работе с несколькими модулями важно делать паузу и дожидаться инициализации модулей. В Space Betweenмы переключаем активные модули при смене сцен, чтобы пользователь не замечал падения кадровой скорости или потери отслеживания. Перед загрузкой сцены мы проверяем, меняется ли набор нужных модулей, и при необходимости запускаем инициализацию. Переключение активных модулей в Intel RealSense SDK устроено очень просто, затем следует инициализация новых модулей путем вызова функции SenseManager. Приостановка модулей в нашем приложении используется, когда эти модули больше не нужны (например, это относится к модулю распознавания лица) или когда пользователь не управляет приложением (например, когда при отображении меню отключается отслеживание лица).
При работе с модулями SDK, особенно с теми, где используется сигнал с камеры, нужно соблюдать баланс между более высокой кадровой скоростью и более равномерными данными. Если для получения новых данных используется AcquireFrame, то отключение ожидания всех модулей и регулировка максимального времени ожидания позволяют в целом повысить плавность потока данных и кадровую скорость, но возникает вероятность утраты некоторых данных, если время ожидания окажется слишком малым. Медленным компьютерам нужно предоставлять больше времени на обработку данных каждого кадра, а более мощные компьютеры быстрее справятся с такой нагрузкой. В Unity это можно упростить: при более быстрых настройках игры (пониженное качество графики) для обработки данных будет выделяться больше времени, а при более высоком качестве графики — наоборот. Это можно сделать с помощью встроенной в Unity функции QualitySettings [рис. 12].
Рисунок 12.Пример кода с RealSense в потоке Unity, время ожидания зависит от настроек качества
Заключение
Технология управления с помощью жестов еще достаточно новая, поэтому при проектировании приложений с таким способом управления требуется больше работы, чем обычно, хотя создание хорошо спроектированного приложения, управляемого жестами, всегда окупается. Всегда помните о том, что уже известно пользователям, заимствуйте решения из приложений и средств, привычных для пользователей. При проектировании приложений старайтесь свести меню к минимуму. А главное — не бойтесь пробовать что-то новое, даже если потом придется это изменить.
Дальнейшее развитие и разработка Space Between
В дальнейшем развитии Space Between мы собираемся применить данные, полученные при разработке демонстрационной и полной версий приложения, и будем непрерывно улучшать наше приложение. Требуется еще немало работы, чтобы сделать игровой процесс как можно более интуитивным и удобным. В этом направлении можно улучшить еще многое. Например, в демонстрационной версии при обнаружении рук и головы пользователя была наглядная обратная связь. При дальнейшем развитии и сокращении пользовательского интерфейса эта обратная связь была упразднена, но решение, придуманное на замену, пока так и не реализовано (интеграция обратной связи в персонажей и среду). Идея заключалась в том, чтобы отказаться от графического пользовательского интерфейса, постоянно отображающегося в верхней части экрана. Вместо этого мы решили подсвечивать определенные части персонажей, чтобы показать, что сейчас эти персонажи находятся под управлением пользователя. При этом решается задача информирования пользователя о том, что система распознала ввод, игра остается «чистой», все внимание сосредоточено на среде.
Помимо функций, связанных с Intel RealSense, существуют и другие компоненты, реализованные в текущей версии Space Between не вполне удачно. При проектировании полной версии игры мы провели исследования жизни обитателей океана, особенно на большой глубине. Нас очень привлекло свечение живых организмов (так называемая биолюминесценция) и зависимость фауны океана от этого эффекта. Нам очень хотелось реализовать это в игре, во-первых, потому что без этого погружение в жизнь в океане было бы неполным, а во-вторых, потому что это просто очень красиво. В текущей версии игры можно видеть некоторые наши попытки интегрировать свечение в среду игры: оно отображается при получении игроком очков, кроме того, морские анемоны испускают свечение на этапе Midnight Zone, а другие обитатели моря — в мини-игре Trenches. Но все это гораздо скромнее наших первоначальных задумок и, конечно, не передает и малой доли природной красоты океана.
Об авторе
Райан Кларк — один из основателей компании Chronosapien Interactive, офис которой находится в Орландо, Флорида, США. Компания Chronosapien Interactive занимается разработкой программного обеспечения, ее специализация — интерактивные виды мультимедиа и современные технологии. В настоящее время компания занимается разработкой демонстрационной версии приложения The Risen, использующего технологию Intel RealSense. Следить за новостями компании можно на сайте chronosapien.reddit.com, а связаться с компанией — по адресу theoracle@chronosapien.com.