Разработка ремейка методами чайника. Часть 2

В прошлой части я рассказал о том, какие плагины были подобраны для морской части игры. В этой части речь пойдет о первых шагах по переносу моделей кораблей из оригинальных корсаров на движок Unreal Engine. Тут будет меньше красивых картинок и больше технических особенностей моделей движка Storm Engine. А также щепотка моих забав с физикой моря и управления кораблем.

Модели долго искать не пришлось, они лежат в \RESOURCE\MODELS\Ships\* и каждый корабль разделен на составляющие. Разумеется, чем больше корабль, тем больше составляющих кусков он имеет.

Разработка ремейка методами чайника. Часть 2

Т.е. получается нужно где то в коде искать логику по которой корабли собираются? - подумал я, чувствуя приближающуюся головную боль.

Но для начала неплохо было бы взглянуть на них, хоть они и завернуты внутри специфичного .gm формата, разработчики создали специальную программу для их простого просмотра: GM Viewer.

Разработка ремейка методами чайника. Часть 2

Включив флаги на отображение загадочных локаторов, я получил перегруженную какими-то точками серую модель корабля без мачт и деталей. Самое интересное здесь - это эти точки, имеющие закономерное название. Я разумеется понятия не имел в чем заключается закономерность и для чего это нужно. Но точки типа mast1, mast2 и т.д. очевидно совпадают с названиями моделей Brig1_mast1.gm, Brig1_mast2.gm. Получается модели знают какие части куда нужно прикреплять и никакого кода искать не нужно, это уже хорошо!

В левом нижнем углу находится информация о материалах и текстурах, которые используются моделью, и возможность предпросмотра модели с текстурами. Как правило, текстуры для конкретного корабля находятся в папке \RESOURCE\Textures\Ships\*имя корабля*, но некоторые текстуры размещены и в родительских папках. Из-за чего не получится так просто сделать предпросмотр модели с текстурами, придется их вручную находить и копировать в нужную папку. Собственно эта проблема распространяется не только на GM Viewer, но и на конвертацию в Blender-е. Но это я забегаю вперед…

Примерно разобравшись как модели можно собрать в единое целое, я, как любой уважающий себя ленивый программист, пошел искать уже готовое решение. Насколько мне было известно, со всем что связано с кораблями лучше всего разбирается команда Ship Pack, все таки они столько новых кораблей в игру внесли. Значит у них должна быть информация о логике построения кораблей и этих локаторах.

И знаете что? Я нашел у них просто ультимативный плагин для сбора всех частей корабля в единое целое с применением текстур, прорисовкой канатов, парусов и даже стартовой анимацией для них! Да хранят богини великих Арти и Tosyk-а!

Разработка ремейка методами чайника. Часть 2

Устанавливаем плагины в Blender, указываем папку с моделями, папку с текстурами, прожимаем галочки на генерацию всего что нам доступно, и получаем готовый корабль внутри редактора. Чудеса!

На картинке можно заметить что один из парусов имеет некорректное положение. Это ошибка в локаторах модели, поэтому я пока что не буду заострять на этом внимание.
На картинке можно заметить что один из парусов имеет некорректное положение. Это ошибка в локаторах модели, поэтому я пока что не буду заострять на этом внимание.

Дальше дело за малым, экспортируем цельную модель в .fbx формате, импортируем в UE, собираем модель в единый pawn-объект и отправляем на карту:

Неужели можно будет так просто перенести все корабли на новый движок!?
Неужели можно будет так просто перенести все корабли на новый движок!?

Какое-то время я находился в эйфории совсем не обращая внимания на очевидные проблемы. Я думал теперь мне остается только сделать анимации парусов, а это можно отложить на потом, тем более что в анимациях я хуже чайника. Поэтому я занялся настройкой веса корабля и точки тяжести, чтобы он держался на волнах более стабильно. И разумеется мне хотелось сделать какое-нибудь управление кораблю, чтобы насладиться проделанной работой, встав за штурвал своей посудины!

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

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

На глаза мне попался видеоролик все от того же разработчика плагина Water Physics, в котором он реализовал поворот лодки путем имитации судового руля. От разработчика требуется только запрограммировать кнопки на поворот объекта, а физика уже сделает все остальное. Круто, поехали!

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

Обернул куб в RotatorScene, чтобы можно было поворачивать за его край а не по центру. Если можно лучше - буду рад советам!
Обернул куб в RotatorScene, чтобы можно было поворачивать за его край а не по центру. Если можно лучше - буду рад советам!

Немного программирования в Blueprint и можно смотреть результат!

Приношу свои извинения, тут должно было быть видео как ощущается физика корабля, но я не сделал записи, когда игрался со всем этим. Поэтому я лишь опишу свои ощущения от получившегося результата.

Результат получился очень интересным, корабль плавно делал повороты в разные стороны, наклонялся, чувствовалась сила от столкновения руля с водой. Я начал задумываться, как в таком случае привязать показатели маневренности корабля к этой логике? Экспериментировал с длиной и шириной руля. И в процессе тестирования понял, что если я продолжу развивать эту идею, то никак не смогу добиться маневренности некоторых кораблей из оригинальной игры, что сильно отразится на балансе. Да и тестировать это будет ужасно неудобно. Ну и не забываем, что у руля есть своя коллизия. Что если вражеский корабль будет позади игрока? Он будет сталкиваться с невидимым игроку объектом?

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

Из видео становится очевидно, что нам не хватает эффектов брызг воды вокруг корабля и полосы из пены позади. Полосу пены разработчики Oceanology выпилили пару лет назад, из-за проблем с оптимизацией. Хоть они и обещают её вернуть, но скорее всего её тоже придется как-то реализовывать самостоятельно(хотя обещают интеграцию с FluidNinja LIVE, в котором можно получить это из коробки). А эффекты брызг можно привязать к модели корабля, и спавнить их если какая-то часть погрузилась под воду. Это вроде несложно даже для такого чайника как я, главное создать сам эффект.

А теперь вернемся немного назад: как я говорил ранее, я подвергся эйфории и упустил из виду критически важную вещь. Наблюдая за тем как работают корабли в корсарах, я заметил что паруса динамически подстраиваются под направление ветра. Т.е. паруса, реи, тросы, все это должно быть динамическим, а значит вся та чудесная генерация для блендера - абсолютно не подходит для меня!

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

Если вам понравилась статья, то буду благодарен за ваши комментарии, вопросы или советы!

3636
7 комментариев

Вижу корсаров, ставлю лайк и подписку

2
Ответить

Прошлая часть и эта в разных подсайтах, может имеет смысл добавить в первую ссылку на вторую?

1
Ответить

Как раз добавил 10 мин назад

1
Ответить

Мечтал, о ремейке это игры :) Логика ее кажется современной и сейчас Немного блендерю, чем могу помочь?

1
Ответить

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

Ответить

а значит вся та чудесная генерация для блендера - абсолютно не подходит для меня!

А мачты с реями и парусами в отдельным скелетал мешки сделать и крутить как захочется? Это можно после сборки корабля в блендере сделать как я понял

Ответить

Я решил следующим образом:
Плагин собирает корабль генерируя только паруса. Причем генерацию парусов переделать так, чтобы у них из коробки были Shape Keys которыми я смогу их сворачивать/разворачивать, без работы руками.
Это импортируется в UE вместе с локаторами которые преобразованы в сокеты.
Затем с помощью нехитрого кода и Cable Component накидываем на корабль тросы.
Реи помечаем соответствующим тегом, с помощью кода делаем их выборку и вращаем средствами UE.
Парусам добавляем анимацию через текстуру и манипулируем ими через морф таргеты.

Но это темы последующих статей.

1
Ответить