В первый пост Об этой игре я рассказал о технических трудностях, которые пришлось преодолеть.
Второй пост, который вы сейчас читаете, более понятен.
Здесь я проиллюстрирую гифками весь путь построения физической модели и кратко расскажу о каждом шаге.
От создания нового проекта в Unity до публикации бета-версии в Steam прошло 10 месяцев.
90% времени было потрачено на создание, оптимизацию и доводку физической модели, остальное — на геймплей.
Целью было создать полностью физический мир.
Но подход, реализованный в Red Faction, показался слишком громоздким и не очень реалистичным.
В той игре, когда сетки взрывались, они разбивались на части, на которые натягивались физические коллайдеры.
Я решил не мучиться с силой сопротивления и множеством частных случаев разрушений, а сделать простую систему, работающую во всех случаях.
Я сделал всё из взаимодействующих частиц: землю, здания, танки игроков, врагов, снаряды и бонусы — всё.
Взаимодействия между частицами я реализовал на видеокарте, так как при параллельных вычислениях она в 50-100 раз производительнее процессора.
Материя, образующаяся из частиц, сначала выглядела странно и напоминала то ли жидкость, то ли газ:
А для игры нам нужно было что-то прочное, способное держать форму.
Испробовав разные способы взаимодействия частиц, я обнаружил, что сила Леннарда-Джонса производит самое прочное вещество.
Получилось что-то вроде манной каши.
Для экспериментов я добавил взрывы по щелчкам мыши.
Частицы уже имеют температуру, а материя меняет свойства, плавясь от жара взрывов.
Материя сама по себе удерживает объем, частицы стремятся образовать шестиугольную решетку.
Небольшая вязкость (помимо силы Леннарда-Джонса) обеспечивает лучшую стабильность вещества.
Проблема со стабильностью вот в чем.
Дискретный характер модели ограничивает величину силы взаимодействия между частицами, так как при большой скорости частицы могут сблизиться за один шаг, игнорируя самую крутую (двенадцатую степень) кривую роста силы отталкивания.
Это придаст им огромное ускорение, делая еще более вероятным еще один неестественный подход. Закон сохранения энергии нарушается, вещество взрывается.
А вязкость позволяет ослабить этот эффект.
Когда материя стала вести себя более-менее удовлетворительно, я собрал из частиц танк и сделал для него управление: на каждом этапе вычислений данные о нажатых игроком клавишах передаются в видеопамять, и эти данные используются для управления вращением колес и наклоном орудия:
Взаимодействие с физически реалистичным миром было захватывающим и вдохновило меня.
Игра развивалась именно в том направлении, в котором я хотел.
Потом я добавил модуль построения уровня по картинке: считывались пиксели и на их месте создавались физические частицы.
Кроме того, материя «обуглилась», почернев от длительного воздействия высокой температуры.
На этом этапе выявилось несовершенство физической модели.
Каменные колонны повели себя как желе:
Пришлось пожертвовать производительностью, уменьшить шаг выборки и тем самым увеличить силу взаимодействия между частицами, без риска нестабильности.
Материя стала более прочной, и я создал несколько разных физических материалов: камень, металл, снег, песок, землю, лед, желе и т. д. Каждый материал немного отличался от других, песок был рыхлым, камень был прочным, металл был прочным и прочным.
гибкий, а желе было гибким и ломким.
Дерево горит и превращается в пепел, а лед прочен, но легко тает. Потом я создал из одних и тех же частиц несколько типов летающих тарелок и там же в шейдерном коде, работающем на видеокарте, написал систему управления врагами.
Они хорошо целятся, уклоняются друг от друга и используют разные тактики боя.
Получилось очень похоже на компьютерную игру в традиционном понимании:
В этой гифке вы можете видеть, что я использовал новую сущность — своего рода кость, которая задает расстояние между частицами.
Они также являются мышцами, поскольку их жесткость и длина меняются со временем.
Так появилась возможность укрепить высокие здания и сделать на уровнях подвижные платформы.
Кроме того, я создал универсальную систему описания оружия, которая позволяла описывать широкий спектр средств поражения, просто нанизывая одно единое воздействие на другое, создавая цепочки событий.
Появились пулеметы, огнеметы, распадающиеся в полете снаряды, многолучевые солнца термоядерных взрывов, вентиляторы молний, лавометы и еще куча силовых модификаторов материи.
Еще я создал бонусы, чтобы вы могли подбирать патроны, усиливать танк или влиять на уровень по принципу кнопки-события.
Например, здесь вы можете увидеть, что происходит, когда игрок берет в руки ключ:
Также можно заметить похожий интерфейс с полосками здоровья и другими характеристиками персонажа-танка, а также со списком доступного оружия.
Игру стало возможно публиковать, я провел неделю, заполняя различные формы в Steam, ожидая результатов проверки, оформляя страницу и делая трейлер и скриншоты.
К тому времени Greenlight был завершен, потому как как только он был готов, я опубликовал гифки на реддите, вызвав устойчивый интерес к моему необычному подходу к построению мира.
Наконец-то игра вышла в раннем доступе, вот трейлер: (Музыка из техно-оперы Виктора Аргонова «2032».
Не совсем соответствует смыслу, но захватывает).
Подводя итог опыту разработки: эксперимент показал, что глубокое проникновение физики в геймплей технически осуществимо, но пока не очень понятно, как его использовать с наибольшей пользой для геймплея.
Нам еще предстоит выяснить, какие уникальные особенности игры исходят из физического мира.
Сейчас я работаю над одиночной кампанией, в которой пытаюсь использовать необычные способы взаимодействия с миром, создавая своеобразный гибрид Леммингов и платформера-шутера.
В Леммингах много рыли, взрывали и строили, а в Стрелке много стреляли.
Посмотрим, какой гибрид мне удастся придумать.
Надеюсь, игроки дадут несколько советов.
В настоящее время единственная игра, доступная в опубликованной игре, — это боевой режим, имитирующий игру Scorched Earth. Цель данной публикации — поделиться результатами этого эксперимента с другими разработчиками.
Возможно, кто-то заинтересуется и захочет уделить больше места физике в своей игре.
В комментариях наверняка спросят про страницу в Steam, так что сразу Я укажу .
Теги: #физическая модель #вычисления на графическом процессоре #артиллерия #геймдизайн #разработка игр #C++ #Параллельное программирование #unity
-
«Обертка» Важнее Содержания
19 Oct, 24 -
Офис Liveinternet Переехал В Пионерлагерь
19 Oct, 24 -
Jsx: Антипаттерн Или Нет?
19 Oct, 24