Йо-хо-хо и корабль мне в бухту!
Как вы уже поняли, речь пойдет о парусных кораблях в компьютерных играх. Тематике, по которой вы наврятли найдете (а если найдете - покажите мне), хоть какой-то вразумительный тутор.
На момент когда нам пришла в голову идея сделать игру с хоть какими то реалистичными корабликами, мы ничего не нашли. Вообще заходя из далека спрототипировать логику работы парусного корабля не самая простая задача, потому что это и векторная алгебра, и геометрия, и базовое понимание как вообще судно под парсом идет по волнам, и много еще скрытых камней которые нам пришлось найти и расколоть.
Пост пишется в формате "Ретроспективы" - с высоты полученного опыта, мы разбираем с чего мы начинали проект "Neverseas", возможно кадры, приведенные в посте, не самые завораживающие, и конечно сейчас, все выглядит совсем по-другому, но уж очень хочется поделится опытом по проделанной работе.
Начну с базы Корабль должен передвигаться в зависимости от силы ветра, кренится по той же причине, а еще отрабатывать (или хотя бы делать вид что отрабатывает) физику поверхности по которой он идет. Можно задушнить и начать с математики: разобрать векторные составляющие сил, приложить эти силы в нужные точки, научным методом тыка подогнать коэффициенты и вуаля физика движка сама все за тебя сделает, но забегая вперед, отмечу что при таком раскладе больше двух кораблей на сцене увидеть вряд ли получится. Потому что среднестатистический проц умрет в вычислениях, ведь рассчитывать движение всех вертикосов (как корабля так и всего барахла не нем) придется каждый игровой фрейм, добавим к этому вращения рей, пересчет положений бесчисленных веревок и коллизий, но даже решив все выше перечисленные проблемы, это не гарантирует, что среднестатистическая бутылка рома выпитая игроком за штурвалом корабля, при падении не отправит Вас и вашу посудину покорять море безмятежности на Луне.
Со вступлением закончили перейдем к реализации. Нашли мы кораблик в бесплатных ассетах Epic Game Store к Unreal Engine 5, слегка его нарезали в блендере и импортнули в движок
Далее произошла легкая магия блупринтов... 3*Пи на собаку
делить на кэф подгона, все же мы делали лабы по физике. А если серьезно, за основу расчета крена и тангажа (мой гендер - боевой вертолет) взята базовая формула расчёта углового положения от времени из учебника физики за 9 класс - phi = A*sin(wt+phi0)
И наш кораблик бултыхается в водичке...
Затем создаем БПшник для мачт, добавляем немного векторного секса и своей любви для вращения рей под заданный вектор ветра. Тоже ничего сложного просто интерполируем текущей угол поворота реи под заданный вектором скорости, единственная сложность - реи не крутятся на 360 :
И база готова, вот он, красавчик, стоит бултыхается на воде, крутит реями, хоть в нем нет физики (конечно всегда можно поныть, но цена вы помните - ваши ФПСы), выглядит вполне себе достоверно:
Конечно пришлось пожертвовать многими веревками, которые несомненно добавляют антуража, и предают живость и сложность такого огромного механизма, но пока нет идей как симулировать такое большое количество, динамически изменяющихся в размерах, канатов.
В следующих постах мы затронем темы:
- Управление кораблем
- Постановку и уборку парусов
- Стрельбу
- Искусственный интеллект управления кораблем и решение боевых задач
- И конечно же процедурную разрушаемость корпуса.
Спасибо что дочитали пост до конца! Если Вам не сложно лайкните пост и подпишитесь на нас, это очень важно, так как проект создается на бюджет двух банок пива, и единственное что нас мотивирует двигаться дальше, делать классный проект в который (как нам кажется) будет весело играть - это ВЫ, наш дорогой читатель.
Если вас заинтересовала наша игра - приглашаем Вас на наш сервер в Discord:
Если вас ОЧЕНЬ сильно заинтересовала наша игра - поддержите наш проект на Boosty:
С уважением, команда Neverseas