Кидки - одна з перших дій, які гравці пробують у віртуальній реальності. Беремо віртуальну кухоль з кавою і викидаємо її. Гуртка, пончик або м'яч починає дико обертатися. Не встигнеш озирнутися, як гравець вже кидає квітковими горщиками в навчального бота.
- Job Simulator
- Намагаюся кинути пляшку води із замахом руки
- Я просто злегка рушив комою...
- Rescuties: гра з підкиданням дітей
- Rescuties
- Рух коми як катапульти
- Фізична і віртуальна вага
- Вибір часу
- Шум швидкості
- Усереднення швидкості контролера дає надійні, але занадто повільні результати, абсолютно відрізняються від відчуттів в Job Simulator
- Зневаджувальна візуалізація швидкості показує червоним останні чотири кадри вимірюваної швидкості, а жовтим - результат регресії, який використовується в грі
- Як я вдосконалив кидки в Rescuties (tl; dr)
Job Simulator
Деякі кидки бувають занадто сильними. Інші - надзвичайно слабкими. Один-два рази все-таки вдається потрапити в переслідуваного NPC. Напевно, найперший урок у VR - кидати точно досить складно. Коли я відчув це почуття, то спочатку подумав, що погано граю в VR. Ми вважаємо природним, що освоєння схеми управління - частина кривої навчання гри. Але коли кидки однаковими рухами призводять до абсолютно різних результатів, то це дуже засмучує.
Різкий кидок із замахом закінчується коротким польотом предмета...
Намагаюся кинути пляшку води із замахом руки
... а легкий взмах запястьем може відправити предмет в довгий політ.
Я просто злегка рушив комою...
Rescuties: гра з підкиданням дітей
Цього літа я працював над казуальною екшн-грою під назвою Rescuties. Це VR-гра про кидання і ловлі дітей та інших милих тварин.
Якщо у віртуальній реальності світ реагує на наші дії контринтуїтивно, це заважає зануреності гравців у процес або напружує їх. Весь геймплей пов'язаний з киданням, тому Rescuties не могли покластися на настільки незручну за своєю суттю механіку.
Rescuties
Роздратування - невід'ємна частина дизайну таких ігор. Якщо коротко, то кидати в VR складно, тому що неможливо відчути вагу віртуального об'єкта. Підходи можуть бути різними, але в більшості ігор прагнуть зробити фізику віртуального об'єкта якомога правдоподібнішою. Гравець вистачає об'єкт, надає йому віртуальний імпульс, і той відлітає.
Але ось проблема: існує відмінність між тим, що гравець відчуває в своїй руці і тим, що відбувається у віртуальному світі. При піднятті віртуального об'єкта центр тяжкості об'єкта і відчувається в руці центр тяжкості не збігаються. М'язи отримують неправильні дані.
Якби гравець при кидку просто штовхав руками в якомусь напрямку, це неспівпадіння було б не дуже важливо. Але при кидку він згинає руку і повертає куп'ястя. (У чому секрет хорошого кидка? «Вся справа в комі!») При повороті своєї реальної руки гравець прикладає до віртуального об'єкта зайвий момент, ніби він кидає його маленькою ложечкою.
Це дуже безкомпромісне явище. У багатьох VR-іграх користувач може «підняти» об'єкт, що знаходиться в півметрі від його руки. При натисканні кнопки об'єкт прилітає в руку, але залишається на постійній відстані, перетворюючи руку на катапульту. Різниця між сімома і тридцятьма сантиметрами може означати, що рух комою змусить об'єкт літати по всій кімнаті або просто злегка штовхне його вперед.
Рух коми як катапульти
У Rescuties гравець ловить дітей, які летять швидко, і прагне якомога швидше перекинути їх у безпечне місце. Використання традиційного підходу призводило до занадто примхливого управління і дратівливого ігрового процесу. «Чому я просто не можу кинути дитину так, як відчуваю правильним?»
Фізична і віртуальна вага
Ключ до успішної механіки кидання - враховувати те, як управління відчувається користувачем, а не те, що пропонує фізика гри.
Замість вимірювання швидкості кидка віртуального об'єкта, який тримає гравець. потрібно виконувати вимірювання для об'єкта, який тримає гравець - реального об'єкта, тобто контролера HTC Vive або Oculus Touch. Саме його вага і момент він відчуває в руці. І на ці вагу і момент відгукується його м'язова пам'ять (фізичний навик та інстинкт, що розвинувся за час життя).
Центр тяжкості, що відчувається гравцем, не змінюється, який би віртуальний об'єкт він не підняв
Пов'язати фізичну і віртуальну вагу для визначення внутрішньоігрової швидкості можна за допомогою центру тяжкості фізичного контролера. По-перше, потрібно визначити, де знаходиться цей реальний центр тяжкості в грі. Контролери повідомляють про своє місце розташування в ігровому просторі. Гравець сам може поглянути з-під наголовного дисплея, щоб відкалібрувати становище центру тяжкості. При відстеженні цієї точки відносно контролера обчислюється швидкість при зміні його положення.
Після внесення таких змін тестери стали грати в Rescuties набагато краще, але я все одно бачив і відчував сильну невідповідність.
(У цій статті є цікаві міркування про передачу інформації про віртуальну вагу гравцям. Цей підхід протилежний, замість максимального використання фізичних відчуттів ваги контролера він дає користувачеві віртуальні сигнали про поведінку віртуальних об'єктів.)
Вибір часу
В який саме момент гравець має намір кинути об'єкт?
У реальному житті при кидку ми розслабляємо пальці, об'єкт виривається із захоплення, а кінчики пальців продовжують штовхати його в потрібному напрямку, поки ми зовсім не втратимо над ним контроль. Ми можемо крутити або котити об'єкт до самої останньої долі секунди.
Замість такого тактильного зворотного зв'язку в більшості VR-ігор використовується тригер під вказівним пальцем. Це краще, ніж кнопка: в Rescuties натискання тригера на 20% стискає віртуальну рукавичку приблизно на 20%, а 100-відсоткове натискання стискає кулак повністю. Але гравець не відчує об'єкт, що виривається із захоплення і ковзає по пальцях. Описане вище розтискання пальців реалізується простим відпусканням тригера (можливо, поступовим). Я з'ясував, що потрібно визначати сигнал кидка від гравця відразу ж, коли він починає розслабляти пальці. Кидки розпізнаються, коли тиск на тригер послаблюється, не тільки до 0% або до невеликого значення, а до експериментально знайденого.
На графіку показано зміну тиску на тригер у циклі «захоплення-утримування-кидок». У цьому випадку користувач не натискає на тригер на 100%. Таке часто буває, тому що у контролерів HTC тригер можна легко натиснути приблизно до 80%, а потім потрібно докласти набагато більше зусилля, щоб натиснути до 100%. Спочатку гравець натискає тригер для підняття об'єкта. Потім тиск більш-менш постійно. тому що гравець захопив об'єкт і замахується для кидка. Тут видно невеликий шум датчика тригера. Гравець відпускає тригер при кидку або викиданні об'єкта.
Шум сигналу і пульс гравця може призвести до коливань зусилля натискання на трігер. Тому необхідний поріг розпізнавання дій гравця. Зокрема, це означає, що гра реєструє викидання, коли тиск на тригер (наприклад) на 20% менше, ніж піковий тиск, зафіксований при піднятті об'єкта гравцем. Поріг повинен бути досить великим, щоб гравець випадково не виронив дитину. Потрібне значення ми з тестерами знайшли методом проб і помилок. Крім того, якщо розпізнати дію як захоплення при занадто малому тиску, не залишиться достатнього інтервалу для надійного визначення кидка або відпускання. У вас вийде те ж, що і у мене в одній з невдалих ітерацій: дивний надшвидкий цикл «підняття-кидок-підняття-кидок».
Шум швидкості
Вимірювання правильної швидкості і поліпшення вибору часу досить добре знижують ефект невідповідності кидків. Але самі вихідні дані - вимірювання швидкості, що надходять з датчиків обладнання - досить галасливі. Шум особливо помітний, коли наголовний дисплей або контролери рухаються швидко. (Скажімо, коли гравець що-небудь кидає!)
Робота з шумом вимагає згладжування.
Я спробував згладити швидкість ковзним середнім (також відомим як фільтр нижніх частот), але в результаті хоч якось усереднювалися тільки найповільніший (замах) і найшвидший (відпускання) етапи кидка. Моїм тестерам здалося, що кидати дуже складно, ніби вони знаходяться під водою. (Саме це я зазвичай відчував у грі Rec Room.)
Усереднення швидкості контролера дає надійні, але занадто повільні результати, абсолютно відрізняються від відчуттів в Job Simulator
Я спробував брати пікові значення останніх вимірених швидкостей, і принаймні діти у тестерів почали літати з тією швидкістю, з якою вони хотіли, але не завжди в потрібному напрямку, тому що останній виміряний напрямок теж піддавався впливу шуму.
Мені потрібно було взяти кілька останніх кадрів вимірювань, і поспостерігати, як вони розвиваються, тобто намалювати лінію тренда. Проста лінійна регресія вимірювань дала нам значно більш надійний результат. Нарешті мені вдалося кидати дітей коли і куди я хочу!
Зневаджувальна візуалізація швидкості показує червоним останні чотири кадри вимірюваної швидкості, а жовтим - результат регресії, який використовується в грі
Як я вдосконалив кидки в Rescuties (tl; dr)
- Вимірюємо швидкість кидка від центру тяжкості, який відчувається користувачем, тобто від центру тяжкості контролера.
- Розпізнаємо кидок точно в момент, коли гравець збирається кинути, тобто при частковому відпусканні тригера.
- Перетворюємо більшу частину вимірених даних швидкості регресією, щоб краще оцінювати наміри гравця.
Якщо вам цікаво потестувати ці різні підходи і порівняти їх, в Rescuties є меню «Labs!», де можна перемикати різні режими кидків, вибирати спосіб вимірювання швидкості і керувати кількістю кадрів вимірювань, що використовуються для регресії/згладжування.
Але ця проблема ні в якому разі не вирішена. У VR-іграх використовується безліч різних підходів до кидків, і вони подобаються гравцям. При створенні кидків в Rescuties я хотів зробити так, щоб фізичні очікування м'язової пам'яті якомога сильніше відповідали відчуттям у віртуальній реальності літаючих діточок. Зараз вони вже набагато кращі, але я хочу ще поліпшити їх.
Тому вітаються будь-які пропозиції щодо мого підходу і будь-яка критика: можете в будь-який момент зв'язатися зі мною в Твіттері або поштою.








