Разработка ремейка методами чайника. Часть 2
В прошлой части я рассказал о том, какие плагины были подобраны для морской части игры. В этой части речь пойдет о первых шагах по переносу моделей кораблей из оригинальных корсаров на движок Unreal Engine. Тут будет меньше красивых картинок и больше технических особенностей моделей движка Storm Engine. А также щепотка моих забав с физикой моря и управления кораблем.
Модели долго искать не пришлось, они лежат в \RESOURCE\MODELS\Ships\* и каждый корабль разделен на составляющие. Разумеется, чем больше корабль, тем больше составляющих кусков он имеет.
Т.е. получается нужно где то в коде искать логику по которой корабли собираются? - подумал я, чувствуя приближающуюся головную боль.
Но для начала неплохо было бы взглянуть на них, хоть они и завернуты внутри специфичного .gm формата, разработчики создали специальную программу для их простого просмотра: GM Viewer.
Включив флаги на отображение загадочных локаторов, я получил перегруженную какими-то точками серую модель корабля без мачт и деталей. Самое интересное здесь - это эти точки, имеющие закономерное название. Я разумеется понятия не имел в чем заключается закономерность и для чего это нужно. Но точки типа mast1, mast2 и т.д. очевидно совпадают с названиями моделей Brig1_mast1.gm, Brig1_mast2.gm. Получается модели знают какие части куда нужно прикреплять и никакого кода искать не нужно, это уже хорошо!
В левом нижнем углу находится информация о материалах и текстурах, которые используются моделью, и возможность предпросмотра модели с текстурами. Как правило, текстуры для конкретного корабля находятся в папке \RESOURCE\Textures\Ships\*имя корабля*, но некоторые текстуры размещены и в родительских папках. Из-за чего не получится так просто сделать предпросмотр модели с текстурами, придется их вручную находить и копировать в нужную папку. Собственно эта проблема распространяется не только на GM Viewer, но и на конвертацию в Blender-е. Но это я забегаю вперед…
Примерно разобравшись как модели можно собрать в единое целое, я, как любой уважающий себя ленивый программист, пошел искать уже готовое решение. Насколько мне было известно, со всем что связано с кораблями лучше всего разбирается команда Ship Pack-а, все таки они столько новых кораблей в игру внесли. Значит у них должна быть информация о логике построения кораблей и этих локаторах.
И знаете что? Я нашел у них просто ультимативный плагин для сбора всех частей корабля в единое целое с применением текстур, прорисовкой канатов, парусов и даже стартовой анимацией для них! Да хранят богини великих Арти и Tosyk-а!
Устанавливаем плагины в Blender, указываем папку с моделями, папку с текстурами, прожимаем галочки на генерацию всего что нам доступно, и получаем готовый корабль внутри редактора. Чудеса!
Дальше дело за малым, экспортируем цельную модель в .fbx формате, импортируем в UE, собираем модель в единый pawn-объект и отправляем на карту:
Какое-то время я находился в эйфории совсем не обращая внимания на очевидные проблемы. Я думал теперь мне остается только сделать анимации парусов, а это можно отложить на потом, тем более что в анимациях я хуже чайника. Поэтому я занялся настройкой веса корабля и точки тяжести, чтобы он держался на волнах более стабильно. И разумеется мне хотелось сделать какое-нибудь управление кораблю, чтобы насладиться проделанной работой, встав за штурвал своей посудины!
Реализовать передвижение и повороты судна в базовом виде - не сложно. Все что нужно - делать смещение относительно текущей координаты и корабль отправится в плавание. Но это будет выглядеть крайне аркадно, без чувства веса корабля, а мне хотелось бы получить какой-никакой но иммерсивный эффект. Разумеется чтобы это реализовать, придется рассчитывать скорость поворота корабля с учетом инерции и веса.
Но как я уже говорил, я ленивый программист, давайте лучше поищем информацию как можно было бы добиться такого качества с помощью физики движка.
На глаза мне попался видеоролик все от того же разработчика плагина Water Physics, в котором он реализовал поворот лодки путем имитации судового руля. От разработчика требуется только запрограммировать кнопки на поворот объекта, а физика уже сделает все остальное. Круто, поехали!
Поскольку у автора видео небольшая лодка, то и руль совсем небольшой. В моем же случае, корабли могут иметь громадный размер, соответственно и руль должен быть впечатляющих масштабов. Показывать его игроку я разумеется не собираюсь, поэтому это должен быть прозрачный длинный куб позади корабля, на для тестов оставим его видимым.
Немного программирования в Blueprint и можно смотреть результат!
Приношу свои извинения, тут должно было быть видео как ощущается физика корабля, но я не сделал записи, когда игрался со всем этим. Поэтому я лишь опишу свои ощущения от получившегося результата.
Результат получился очень интересным, корабль плавно делал повороты в разные стороны, наклонялся, чувствовалась сила от столкновения руля с водой. Я начал задумываться, как в таком случае привязать показатели маневренности корабля к этой логике? Экспериментировал с длиной и шириной руля. И в процессе тестирования понял, что если я продолжу развивать эту идею, то никак не смогу добиться маневренности некоторых кораблей из оригинальной игры, что сильно отразится на балансе. Да и тестировать это будет ужасно неудобно. Ну и не забываем, что у руля есть своя коллизия. Что если вражеский корабль будет позади игрока? Он будет сталкиваться с невидимым игроку объектом?
В общем, решив сильно не запариваться с этим на текущем этапе, я просто сделал поворот корабля вокруг своей оси, включил любимую погоду и поплыл…
Из видео становится очевидно, что нам не хватает эффектов брызг воды вокруг корабля и полосы из пены позади. Полосу пены разработчики Oceanology выпилили пару лет назад, из-за проблем с оптимизацией. Хоть они и обещают её вернуть, но скорее всего её тоже придется как-то реализовывать самостоятельно(хотя обещают интеграцию с FluidNinja LIVE, в котором можно получить это из коробки). А эффекты брызг можно привязать к модели корабля, и спавнить их если какая-то часть погрузилась под воду. Это вроде несложно даже для такого чайника как я, главное создать сам эффект.
А теперь вернемся немного назад: как я говорил ранее, я подвергся эйфории и упустил из виду критически важную вещь. Наблюдая за тем как работают корабли в корсарах, я заметил что паруса динамически подстраиваются под направление ветра. Т.е. паруса, реи, тросы, все это должно быть динамическим, а значит вся та чудесная генерация для блендера - абсолютно не подходит для меня!
Поскольку все придется просчитывать динамически, мы снова возвращаемся к тем самым загадочным локаторам, которые хранят все секреты. Но это уже в следующей главе моего эпоса.
Если вам понравилась статья, то буду благодарен за ваши комментарии, вопросы или советы!