[Перевод] Overmare Studios: Трудности четырёхногих персонажей
Доброго времени суток. Команда The Overmare Studios, занимающаяся разработкой компьютерной игры по культовому фанатскому рассказу «Fallout: Equestria», опубликовала очередную новость. В этот раз Хэмиш, тимлид команды кодеров, рассказывает нам о нюансах и сложностях передвижения четырёхногих персонажей. По ходу разработки было проработано несколько вариантов, какие были решения и почему — с иллюстрациями рассказывается в переводе под катом, добро пожаловать.
Привет народ, Хемиш программист снова на связи, чтобы рассказать вам о интересных технических особенностях наших систем, а конкретней о том, как мы прорабатывали движение квадропеда (четырёхногого персонажа) в режимах от первого и третьего лица. Первая версия системы, описывающей движение, была настроена мной год назад в демо второй волны, думаю она будет интересна всем, кто хочет узнать как именно двигается Литлпип, а особенно тем, кто хотел бы создать подобную игру с персонажами пони.
Для начала, почему эта тема вообще требует внимания? Что делает квадропедов необычными и сложными для использования в игре? Ответ очевиден — их форма. Гуманоидный персонаж стоит прямо и его форма хорошо покрывается вертикальной «капсулой», как показано ниже. Мы называем её «колайдером» (англ. «to collide» — сталкиваться, ударяться), потому что именно она физически взаимодействует с окружением и другими объектами.
Это делает работу программиста гораздо проще, потому что не важно как вы перемещаетесь или на какой вы поверхности — форма и пространственная ориентация капсулы всегда остаются одинаковыми; её просто нужно перемещать с нужной скоростью и держать на земле. Учитывая форму, поворот капсулы происходит быстро и персонаж может сразу же двигаться в направлении поворота.
Это типичный и широко распространённый вариант, поэтому Unity предоставляет готовый компонент для подобного перемещения персонажа, называемый «CharacterController».
Но нюанс в том, что квадропед плохо вписывается в форму такой капсулы. В наших ранних прототипах капсула просто принудительно растягивалась в большую сферу, вот так:
Это не идеальное решение, потому что приходится использовать коллайдер фактически гораздо больший, чем сам объект. Такой излишний размер коллайдера означал, что пони не смогли бы подойти впритык друг к другу или пролезть сквозь узкие проходы. А если бы мы сделали его радиус меньше, то он перестал бы покрывать всю модель персонажа и другие объекты наоборот стали частично пересекаться с персонажем. Поэтому мы сделали специальную трёхмерную форму для коллайдера, которая гораздо лучше подходит для четырёхногого пони.
Использование низкополигональной сетки позволяет гораздо быстрее симулировать физику, соответствующую такой форме тела.
Мы уже не могли использовать CharacterController, но было нетрудно написать немного кода для «ручного» перемещения модели. Проблема возникла, когда началась работа над движением головы. Мы могли бы просто поворачивать всё тело и оставить голову всегда смотреть прямо, но очевидно это далеко не лучший вариант. Управляться это будет неплохо, но выглядеть довольно топорно.
Нам нужно поворачивать и анимировать голову отдельно, что означает, что тело и его коллайдер могут поворачиваться в другую сторону, нежели направление взгляда (Мы зовём это «танкоподобное движение»)
Разумеется, мы допускаем это только при повороте до 90 градусов в одну из сторон, а дальше поворачиваем уже всё тело.
В связи с таким решением возник новый вопрос, в каком направлении мы будем двигаться, когда игрок нажмёт «Вперёд»: в направлении взгляда или в направлении поворота тела? При нашей первой проработке кода, ответственного за движение, мы склонились ко второму варианту, т.к. посчитали, что он более реалистично отражает движение. Пони может двигаться изначально просто прямо, затем повернуть свою голову и через некоторое время полностью развернуться в этом направлении.
При этом возникает две проблемы: первая — вы неожиданно обнаружите, что идёте не совсем туда, куда рассчитываете, вторая — это ещё и чувствуется довольно деревянно, особенно от первого лица, когда вы не видите куда фактически развёрнуто тело. Попыткой решить эти проблемы стало размещение камеры на голове персонажа, но это привело лишь к ощущению «разобщённости» игрока и персонажа. Такой вариант привёл ко множеству замечаний и предложений к нашим демо 1-й и 2-й волны; это фактически стало одной из самых частых тем получаемого нами фидбека.
Мы внесли несколько изменений в демо 2-й волны, но это всё были костыли, не исправлявшие фундаментально неудачную систему. Поэтому мы полностью отказались от того что было на тот момент и начали с чистого листа, настроившись на то, чтобы сделать игрока максмально единым с персонажем и сделать ощущения похожими на традиционный FPS (шутер от первого лица).
В этот раз мы взяли за основной принцип "при любых условиях камера должна вести себя так, словно персонаж бипед (двуногий)". Игрок должен идти в ту сторону, куда он предполагает идти и смотреть в ту сторону, куда он предполагает смотреть — по крайней мере если нет каких-то особенных игровых причин этому мешаюших (таких как стена или сила, толкнувшая его назад). Как было сказано, наши персонажи сами по себе уникальные и мы желали чтобы и стиль управления ими это передавал — хотя бы визуально.
В новой системе камера не прикреплена к голове. Вместо этого она перемещается независимо, кружа вокруг центра тела персонажа. Модель головы поворачивается отдельно к точке на которую смотрит камера. Схожим образом мы двигаем всего персонажа к этой точке, плавно поворачивая тело, но оставляя направление движения неизменным.
Отзывы на наши последующие демки показали, что такая система оказалась намного лучше.
Есть ещё парочка вещей, которые мне стоит пояснить. Первое это то, как мы поступаем в случае стрейфинга (когда игрок жмёт не прямо или вбок, а по диагонали); на данный момент при таком перемещении желаемый угол поворота тела основан на конкретно прожатом направлении, как показывает схема ниже.
Стоит указать на то, что в отличие от большинства других FPS игр, вы можете бежать во время такого «стрейфа» так же быстро, как если бы бежали прямо. Мы посчитали, что в случае квадропеда нет смысла ограничивать его скорость при таком перемещении. В дальнейшем мы может добавим специальные анимации для такого перемещения, которые будут использованы, когда персонаж участвует в бою и старается не подставиться врагу.
И наконец, наклонные поверхности. В случае с бипедом всё что нужно это выровнять его стопы, игрок даже не заметит, если только не будет специально рассматривать с видом от третьего лица. Но для квадропеда нужно поворачивать всё тёло. Чтобы корректно это делать, мы измеряем расстояние между передними и задними ногами и высчитываем разницу в градусах по этой оси и той по которой нужно повернуть. Ну а затем плавно поворачиваем, но достаточно быстро, чтобы изменения успевали за рельефом.
Отметим, что в таком случае меняется позиция головы и положение камеры. Для бипеда это не происходит, потому что высота тела при выравнивании на любой поверхности остаётся неизменной, но в случае с пони при резком повороте тела возникнет небольшой, но заметный сдвиг камеры. Это небольшая проблема, но её решения мы пока так и не нашли.
Ну вот в целом и всё по нашей сегодняшней теме! Надеюсь вы нашли эту статью в чём-то интересной и/или полезной для себя. Дайте нам знать, если вам понравилось и хочется ещё. Посмотрите наше последнее демо, если вам интересно попробовать описанное вживую, ну а я постараюсь вернуться к вам с новыми подробностями поскорее!
Ссылка на оригинальный пост
Привет народ, Хемиш программист снова на связи, чтобы рассказать вам о интересных технических особенностях наших систем, а конкретней о том, как мы прорабатывали движение квадропеда (четырёхногого персонажа) в режимах от первого и третьего лица. Первая версия системы, описывающей движение, была настроена мной год назад в демо второй волны, думаю она будет интересна всем, кто хочет узнать как именно двигается Литлпип, а особенно тем, кто хотел бы создать подобную игру с персонажами пони.
Для начала, почему эта тема вообще требует внимания? Что делает квадропедов необычными и сложными для использования в игре? Ответ очевиден — их форма. Гуманоидный персонаж стоит прямо и его форма хорошо покрывается вертикальной «капсулой», как показано ниже. Мы называем её «колайдером» (англ. «to collide» — сталкиваться, ударяться), потому что именно она физически взаимодействует с окружением и другими объектами.
Это делает работу программиста гораздо проще, потому что не важно как вы перемещаетесь или на какой вы поверхности — форма и пространственная ориентация капсулы всегда остаются одинаковыми; её просто нужно перемещать с нужной скоростью и держать на земле. Учитывая форму, поворот капсулы происходит быстро и персонаж может сразу же двигаться в направлении поворота.
Это типичный и широко распространённый вариант, поэтому Unity предоставляет готовый компонент для подобного перемещения персонажа, называемый «CharacterController».
Но нюанс в том, что квадропед плохо вписывается в форму такой капсулы. В наших ранних прототипах капсула просто принудительно растягивалась в большую сферу, вот так:
Это не идеальное решение, потому что приходится использовать коллайдер фактически гораздо больший, чем сам объект. Такой излишний размер коллайдера означал, что пони не смогли бы подойти впритык друг к другу или пролезть сквозь узкие проходы. А если бы мы сделали его радиус меньше, то он перестал бы покрывать всю модель персонажа и другие объекты наоборот стали частично пересекаться с персонажем. Поэтому мы сделали специальную трёхмерную форму для коллайдера, которая гораздо лучше подходит для четырёхногого пони.
Использование низкополигональной сетки позволяет гораздо быстрее симулировать физику, соответствующую такой форме тела.
Мы уже не могли использовать CharacterController, но было нетрудно написать немного кода для «ручного» перемещения модели. Проблема возникла, когда началась работа над движением головы. Мы могли бы просто поворачивать всё тело и оставить голову всегда смотреть прямо, но очевидно это далеко не лучший вариант. Управляться это будет неплохо, но выглядеть довольно топорно.
Нам нужно поворачивать и анимировать голову отдельно, что означает, что тело и его коллайдер могут поворачиваться в другую сторону, нежели направление взгляда (Мы зовём это «танкоподобное движение»)
Разумеется, мы допускаем это только при повороте до 90 градусов в одну из сторон, а дальше поворачиваем уже всё тело.
В связи с таким решением возник новый вопрос, в каком направлении мы будем двигаться, когда игрок нажмёт «Вперёд»: в направлении взгляда или в направлении поворота тела? При нашей первой проработке кода, ответственного за движение, мы склонились ко второму варианту, т.к. посчитали, что он более реалистично отражает движение. Пони может двигаться изначально просто прямо, затем повернуть свою голову и через некоторое время полностью развернуться в этом направлении.
При этом возникает две проблемы: первая — вы неожиданно обнаружите, что идёте не совсем туда, куда рассчитываете, вторая — это ещё и чувствуется довольно деревянно, особенно от первого лица, когда вы не видите куда фактически развёрнуто тело. Попыткой решить эти проблемы стало размещение камеры на голове персонажа, но это привело лишь к ощущению «разобщённости» игрока и персонажа. Такой вариант привёл ко множеству замечаний и предложений к нашим демо 1-й и 2-й волны; это фактически стало одной из самых частых тем получаемого нами фидбека.
Мы внесли несколько изменений в демо 2-й волны, но это всё были костыли, не исправлявшие фундаментально неудачную систему. Поэтому мы полностью отказались от того что было на тот момент и начали с чистого листа, настроившись на то, чтобы сделать игрока максмально единым с персонажем и сделать ощущения похожими на традиционный FPS (шутер от первого лица).
В этот раз мы взяли за основной принцип "при любых условиях камера должна вести себя так, словно персонаж бипед (двуногий)". Игрок должен идти в ту сторону, куда он предполагает идти и смотреть в ту сторону, куда он предполагает смотреть — по крайней мере если нет каких-то особенных игровых причин этому мешаюших (таких как стена или сила, толкнувшая его назад). Как было сказано, наши персонажи сами по себе уникальные и мы желали чтобы и стиль управления ими это передавал — хотя бы визуально.
В новой системе камера не прикреплена к голове. Вместо этого она перемещается независимо, кружа вокруг центра тела персонажа. Модель головы поворачивается отдельно к точке на которую смотрит камера. Схожим образом мы двигаем всего персонажа к этой точке, плавно поворачивая тело, но оставляя направление движения неизменным.
Отзывы на наши последующие демки показали, что такая система оказалась намного лучше.
Есть ещё парочка вещей, которые мне стоит пояснить. Первое это то, как мы поступаем в случае стрейфинга (когда игрок жмёт не прямо или вбок, а по диагонали); на данный момент при таком перемещении желаемый угол поворота тела основан на конкретно прожатом направлении, как показывает схема ниже.
Стоит указать на то, что в отличие от большинства других FPS игр, вы можете бежать во время такого «стрейфа» так же быстро, как если бы бежали прямо. Мы посчитали, что в случае квадропеда нет смысла ограничивать его скорость при таком перемещении. В дальнейшем мы может добавим специальные анимации для такого перемещения, которые будут использованы, когда персонаж участвует в бою и старается не подставиться врагу.
И наконец, наклонные поверхности. В случае с бипедом всё что нужно это выровнять его стопы, игрок даже не заметит, если только не будет специально рассматривать с видом от третьего лица. Но для квадропеда нужно поворачивать всё тёло. Чтобы корректно это делать, мы измеряем расстояние между передними и задними ногами и высчитываем разницу в градусах по этой оси и той по которой нужно повернуть. Ну а затем плавно поворачиваем, но достаточно быстро, чтобы изменения успевали за рельефом.
Отметим, что в таком случае меняется позиция головы и положение камеры. Для бипеда это не происходит, потому что высота тела при выравнивании на любой поверхности остаётся неизменной, но в случае с пони при резком повороте тела возникнет небольшой, но заметный сдвиг камеры. Это небольшая проблема, но её решения мы пока так и не нашли.
Ну вот в целом и всё по нашей сегодняшней теме! Надеюсь вы нашли эту статью в чём-то интересной и/или полезной для себя. Дайте нам знать, если вам понравилось и хочется ещё. Посмотрите наше последнее демо, если вам интересно попробовать описанное вживую, ну а я постараюсь вернуться к вам с новыми подробностями поскорее!
Ссылка на оригинальный пост
206 комментариев
Я как-то размышлял над тем, что круто было бы иметь пони-игру, где пони двигаются не как мешки с картофелем и не как летающие комоды, а так как они должны — как живенькие лошадки. Нечто подобное мы увидели в прекрасном Ambient. И вот сегодня этим нас радует и Overmare Studios (:
Действительно
Лучше уже игра с такой себе анимацией, которая есть, чем с супер-навороченной, которой нет.
В конце концов для игры это далеко не главное
В Vampires: The Masquerade Bloodlines и Sudeki эти два режима выглядят достаточно неплохо, потому что режим от первого лица используется только для стрельбы, а режим от третьего лица — только для ближнего боя. Так что главное найти правильный подход.
Пусть они передвигаются на «и так сойдет», ага.
Лол, это же МЛП, а не лошади.
www.legendsofequestria.com
www.youtube.com/watch?v=rIwHg-hXanI
vk.com/discord_replies
vk.com/equgames
nia.sinair.ru/download
А также потерянная во времени Ponykart (еле откопал исходники, когда-то скачанные с несуществующего ныне ponykart.net):ftp://svetomech.asuscomm.com/BARN/OPEN/pones/games/Ponykart_dbg.zip
nia.sinair.ru/download
kaitouace.com/vr/
www.legendsofequestria.com
www.youtube.com/watch?v=rIwHg-hXanI
Но здесь ситуация такая, что подобную вещь на моей памяти никто адекватно еще не делал. По сути, «Overmare» — первопроходцы четвероногости главного героя :)
p.s.
А почему не четвероногих?
Неправда! Чуваки явно не пробовали делать перемещение бипеда с IK по наклонным поверхностям. Человек постоянно переносит вес с одной ноги на другую и по-разному меняет расположение ног и всего тела при движении по всяким неровностям.
Я бы посмотрел, как они делают бипед с тупым выравниванием стоп и равной высотой тела на любой поверхности. Я пробовал, хах — таких движений даже Майкл Джексон в своих танцах не выдумал :-D
Но правильная ли это формулировка вопроса?
Возьмём известный пример, игру «сталкер». Когда она была только в проекте, то наверно разработчики точно так же ставили вопросы «а нужен ли открытый мир?», «нужен ли продвинутый ИИ?», «нужен ли транспорт?». Конечно, на все вопросы ответ «ДА!!!», и всё это было тут же обещано будущим игрокам.
Но вот прошли годы, и вопросы уже стали звучать по другому. Не "нужно ли это в игре?", а "можем ли мы позволить себе тратить время на это, когда уже прошло несколько лет, а у нас ещё ни хрена из обещанного не готово???". И вот тут то под нож пошли и открытый мир, и транспорт, и ИИ, и прочее. Потому что если бы всё это не порезали, игра бы не вышла вообще никогда.
Тут конечно ситуация немного другая, так как проект не коммерческий, и это с одной стороны хорошо, а с другой плохо. С одной стороны начальство не висит над душой, требуя прибылей, можно тянуть сколько влезет. С другой стороны, за это не платят, следовательно работа над проектом стоит на шкале приоритетов где-то внизу, после основной работы, семьи, и т.д.
Когда апдейт твоей-то игрушки выйдет, кстати (без сарказма)?
Апдейт у меня скоро выйдет, щас делаю что-то типа ЗПС, только вот на работе работать заставляют, что сильно мешает.
Но только я не планирую постить каждый чих и каждый баг, уже если выкладывать, так только если есть на что посмотреть
А работа да, она такая, коварная.
Ну, и не только, но она самые кошерные песни исполняет там.
Ну и вам желаю чтобы к тому времени сделали таки анимацию ходьбы. Кстати, это вам наверно говорили, но у ваших поней глаза как у мёртвой рыбы. Пока они нарисованные, такого впечатления не создаётся, но вот у 3д-шных да.
С этим надо что-то решать
Я просто не всегда успеваю переводить посты, так что снимаю шляпу за твоё усердие в переводе)
Четвероногое животное легче всего представлять себе как два двуногих (как два человека в костюме лошади например). Тогда вопрос с перемещением решился бы автоматически — задний бипед тянется за передним. Они к этому и пришли, но шли довольно долго. И всё равно не используют тот же подход для наклонных поверхностей. Если бы реальные животные спускались с горы так же как поняша в посте верхняя часть тела постоянно перевешивала бы заднюю и зверюшка спускалась бы намного быстрее — кувырками. Если же представить поняшу как двух людей в костюме пони сразу ясно что стоять они должны прямо — ноги перпендикулярны земле. И люди и животные спускаются так, потому что с гравитацией фиг поспоришь!)
Картинка
Тем более что в этой книге сюжет намного интересней, чем в той игре, по которой она писалась. Отличный материал, на самом деле, весь вопрос в количестве необходимых для этого ресурсов
Не срача ради, интереса для — это какая такая идея?
Хотя, графа «Дух сериала» весьма расплывчата и каждым видима по своему.
фое не убил «дух» млп, а кристализовал его, я уже говорил об этом, это превосходный кроссовер, взявший всё лучшее и от фолача и от млп, взявший и превосходно дополнивший одно другим. В фое в отличие от оригинальных фолачей, есть мощная сюжетная линия, замешанная на моральном ядре поней — на понимании, что даже в самой жуткой тьме всё ещё есть свет. Что собсно и раскрывается в полную меру в финале.
А как тех злодеев-мафиози из серии с Дэринг Ду звали?
Не, я считаю, что с идеей там всё в порядке. В fallout-е там вообще никаких идей не было, кроме банального «война никогда мененяется»
Ну а ваще эт круто, назвать ФоЕ религиозно-философским текстом :-)
Противоречит, говорите?
В сериале нам много раз показывают, как mane6, Селестия и прочие выдающиеся личности спасают пони от войны — то с яками, то с бизонами, то с кристальной империей, то ещё с кем-нибудь. Как можно спасать от того, что невозможно и противоречит духу мира?
Ну, если выкинуть из канона все, что не нравится и не соответствует твоей позиции, то можно доказать все, что угодно :)
Там же СЕРИЯ целая была с этим, емое!
Нет, мир Эквестрии нихрена не дружбомагичен по своей сути. Он более мягкий, чем реальность, но не более того. И то стоит учесть, что видим мы в основном Понивилль, который, как бы так сказать, ну, дерёвня. И нихрена не показывает общую суть поней.
Мне в том треде вообще было смешно спорить, потому что выглядело это примерно так:
Оппонент: «Это литРПГ, потому что только главные герои пьют лечащие зелья».
Я: выхожу на балкон покурить и читаю в книжке «солдат Анклава спрятался за ящиком, чтобы выпить зелье».
И так далее.
В данном случае, лол, ты упомянул про метеорит, из-за которого начались все проблемы. Так вот, ты не поверишь, но в мире Fo:E все проблемы начались из-за метеорита :D
Вот сейчас, когда выяснилось, что ты фанф не читал, спорить действительно стало бессмысленно.
Вот на что я отвечаю. Ядерная пустошь возникла именно из-за метеорита. Я не говорил, что из-за этого началась война.
Война началась из-за того, что не все пони карамельно-хорошие. И это не противоречит духу мира пони ни в чем :)
У пони — не могут.
Более того, в каноне нам уже говорилось о войнах — например, о войне с Сомброй, или о чуть было не разразившейся войне трёх племён. Да что там, нам открытым текстом говорят . Но да, как обычно, спрячем голову в песок и будем говорить про неправильный канон.
Аргументов я набросал достаточно. Их можно свести к паре слов «дружба это магия».
Кстати интересный момент, когда Ксенит увидела Энжела — зайка Флутершай — она выложила кладку кирпичей с воплями «зайка смерти ааа зайка смерти!!1», вот и суть зебр — они слишком суеверно относились к вещам. А Энжел просто по легенде любил въедать боевых стимуляторов и порвать пару десятков зебр.
Что там дальше было? Боюсь, что сцена «а давайте мы на них нападем, у нас пегасы есть» — это из ПГ, а не из оригинала.
Не выйдет. К сожалению, в фанфике весьма логично расписано, как и почему мир стал таким. Просто то, что ты называешь миром пони — на самом деле твоя головопушка на тему, которая отличается от того, что в сериале.
Вот специально проверил, нету в книге такой цитаты. Так что за тот тред, кстати, вы ещё не ответили.
А ты спрашивал? Я не заметил. Но пофиг. Это был тред про «млпшеры не поняли основную идею» или как-то так, если мне память не изменяет.
Войны с зебрами и фаллаута в Эквестрии не может быть в единственном случае: все поголовно пони сознательные, добрые и не способны на расизм, агрессию, внушаемость и прочее. Сколько раз нам в сериале показывали обратное? Более того, вы подобными заявлениями наоборот, обесцениваете идею сериала в стиле «Твайлайт Спаркл решила проблему дружбы? Пфф, а зачем, всё равно никакого серьёзного вреда это не могло бы принести».
Но в любом случае отсюда далеко до ядерной войны, и еще дальше до превращения в каннибалов-рейдеров пустоши.
На самом деле Твай не раз показывала, что да будут сдерживаться. Например, во всех оношениях с Дискордом, которого казалось бы давно пора снова закатать в камень.
Не путайте ещё раз, непосредственную угрозу и вариант, когда можно себе позволить оставить врага в живых. Не всегда так выходит, представляете?
Знаете, есть расхожее выражение про лягушку. Если её бросить в кипяток — она выпрыгнет, но если её положить и потихоньку нагревать воду, то она вполне себе сварится живьём. В FoE, которое вы не читали, как раз был показан процесс этого медленного варения, занявший не одну сотню лет. По-вашему, пони не способны на маленькие и медленные перемены?
Ну, мне на срач пофиг — я просто хотел написать, что для меня такое «дух сериала».
Главное, хорошо ли вышло в итоге. Я прочитал книжку, мне понравилось, я получил удовольствие. Какая фиг разница, противоречит она чему-то или нет?
В 3м он тоже был так себе и совееершенно не вызывал никаких чувств. Как раз благодаря этому фанфику я впервые смог взглянуть на него с новой стороны.
Хотя наверно потому, что это всё-таки литература. Это совсем не то же самое, что игра, в игре намного сложнее передать сюжет, чтобы ещё и при этом не пострадал геймплей
Мне в голову как-то давно пришла идея общей сюжетной концепции игры по ФоЕ, которая была бы не тупо пересказом фанфика и игр. Даже хотел поделиться ею с разрабами, но они отмахнулись, типа: «У нас уже есть сюжет, изменять ничего не будем».
Так что 16.8 кг золота достаточно.