Йо-хо-хо и корабль мне в бухту!

Как вы уже поняли, речь пойдет о парусных кораблях в компьютерных играх. Тематике, по которой вы наврятли найдете (а если найдете - покажите мне), хоть какой-то вразумительный тутор.

На момент когда нам пришла в голову идея сделать игру с хоть какими то реалистичными корабликами, мы ничего не нашли. Вообще заходя из далека спрототипировать логику работы парусного корабля не самая простая задача, потому что это и векторная алгебра, и геометрия, и базовое понимание как вообще судно под парсом идет по волнам, и много еще скрытых камней которые нам пришлось найти и расколоть.

Йо-хо-хо и корабль мне в бухту!

Пост пишется в формате "Ретроспективы" - с высоты полученного опыта, мы разбираем с чего мы начинали проект "Neverseas", возможно кадры, приведенные в посте, не самые завораживающие, и конечно сейчас, все выглядит совсем по-другому, но уж очень хочется поделится опытом по проделанной работе.

Начну с базы Корабль должен передвигаться в зависимости от силы ветра, кренится по той же причине, а еще отрабатывать (или хотя бы делать вид что отрабатывает) физику поверхности по которой он идет. Можно задушнить и начать с математики: разобрать векторные составляющие сил, приложить эти силы в нужные точки, научным методом тыка подогнать коэффициенты и вуаля физика движка сама все за тебя сделает, но забегая вперед, отмечу что при таком раскладе больше двух кораблей на сцене увидеть вряд ли получится. Потому что среднестатистический проц умрет в вычислениях, ведь рассчитывать движение всех вертикосов (как корабля так и всего барахла не нем) придется каждый игровой фрейм, добавим к этому вращения рей, пересчет положений бесчисленных веревок и коллизий, но даже решив все выше перечисленные проблемы, это не гарантирует, что среднестатистическая бутылка рома выпитая игроком за штурвалом корабля, при падении не отправит Вас и вашу посудину покорять море безмятежности на Луне.

Это классека

Со вступлением закончили перейдем к реализации. Нашли мы кораблик в бесплатных ассетах Epic Game Store к Unreal Engine 5, слегка его нарезали в блендере и импортнули в движок

Конечно это далеко не все детали, что мы нарезали, но суть это отражает
Конечно это далеко не все детали, что мы нарезали, но суть это отражает

Далее произошла легкая магия блупринтов... 3*Пи на собаку

делить на кэф подгона, все же мы делали лабы по физике. А если серьезно, за основу расчета крена и тангажа (мой гендер - боевой вертолет) взята базовая формула расчёта углового положения от времени из учебника физики за 9 класс - phi = A*sin(wt+phi0)

ыыыы матеша за 9 класс
ыыыы матеша за 9 класс

И наш кораблик бултыхается в водичке...

бульк-бульк

Затем создаем БПшник для мачт, добавляем немного векторного секса и своей любви для вращения рей под заданный вектор ветра. Тоже ничего сложного просто интерполируем текущей угол поворота реи под заданный вектором скорости, единственная сложность - реи не крутятся на 360 :

Не забываем про переходы через Pi/2
Не забываем про переходы через Pi/2

И база готова, вот он, красавчик, стоит бултыхается на воде, крутит реями, хоть в нем нет физики (конечно всегда можно поныть, но цена вы помните - ваши ФПСы), выглядит вполне себе достоверно:

К сожалению, пост пишется в формате "Ретроспективы" и оригинальных мачт с которых все начиналось не осталось в проекте((

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

В следующих постах мы затронем темы:

  • Управление кораблем
  • Постановку и уборку парусов
  • Стрельбу
  • Искусственный интеллект управления кораблем и решение боевых задач
  • И конечно же процедурную разрушаемость корпуса.

Спасибо что дочитали пост до конца! Если Вам не сложно лайкните пост и подпишитесь на нас, это очень важно, так как проект создается на бюджет двух банок пива, и единственное что нас мотивирует двигаться дальше, делать классный проект в который (как нам кажется) будет весело играть - это ВЫ, наш дорогой читатель.

Если вас заинтересовала наша игра - приглашаем Вас на наш сервер в Discord:

Если вас ОЧЕНЬ сильно заинтересовала наша игра - поддержите наш проект на Boosty:

С уважением, команда Neverseas

1717
5 комментариев
6
Ответить

ИСПАНЦЫЫЫЫЫ!!!

4
Ответить

Мачты выглядят прикольно) хз на сколько это соответствует 'тем самым пиратский кораблям'. Быстрый ресерч не дал результата, в какой момент мачты стали поворачиваться)
А вот по поводу физике мне есть что сказать)
По вашей логике, чтобы сделать машину в игре, нужно симуляровать движение ремня грм, трение в каленвале и сжигание топлива в цилиндрах!)
Не нужно собирать весь токелаж на физике, чтобы корабль поплыл. Достаточно симулировать необходимые силы. А для этого даже нет нужды прикладывать силу к каждому вертексу поверхности. Необходимо создать условные поплавки, которые и будут принимать на себя весь расчёт физики. Штук 6 на корабль и уже получаем правдоподобное поведение) а такелажа у вас и так нет) благо не программу для испытания корпусов пишите)
Симуляция ткани на парусах куда сильнее ударит по производительности, чем 'физика' плавучести. Подсмотреть базу можно у эпиков.
Но возникает другая проблема) при малейшей просадке фпс корабль может уйти в расколбас. Ну и проблема с настройкой характеристик корабля. Не получится ему просто увеличить скорость, нужно перенастраивать систему плавучести.
По итогу это вполне применимо, но с нюансами.
Такелаж можно собрать на ниагаре и рибонах. Посмотрите примеры применения рибон рендера в примерах контента от эпиков. Чуть чуть векторки, координаты сокетов, пару модулей в стратчпаде, обвязка в бп и шасце)
Удачи с проектом)

4
Ответить

Мачты не поворачиваются. Поворачивается рей, который не закреплён жёстко к мачте, а по факту висит на ней, будучи притянут канатами. Так что развернуть его можно хоть на 180, хоть на 360 градусов. Другое дело что у прямого паруса довольно малый эффективный угол к ветру (зато их можно сделать МНОГО, по этому принципу построены Крузенштерн и Седов), и особо сильно поворачивать такой парус смысла нет.

2
Ответить

афигенно, но нет

Ответить