October 30, 2021

Более тонкие детали

Это перевод статьи "The Finer Details" из блога разработчиков TF:S2

Возвращение к работе

🙍‍♂️Команда TF:S2

Для команды Amper это были два напряженных месяца. Начало учебного года в университете и конец летних праздников означали, что нам пришлось временно переориентировать наши приоритеты. Тем не менее, это дало команде прекрасную возможность уделить время и внимание мельчайшим деталям, необходимым для подлинного опыта Team Fortress.

В этом месяце мы пригласили членов нашей команды обсудить в блоге, чего они достигли с тех пор, как мы в последний раз погрузились в процесс разработки проекта Team Fortress: Source 2.

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

А теперь к деталям!

Точное воссоздание фирменного стиля

🙍‍♂️rob5300

В s&box недавно была добавлена возможность для аддонов использовать собственные шейдеры. Используя HLSL, мы можем расширить базовые шейдеры Source 2, чтобы настроить внешний вид моделей в игре. Это позволяет нам начать заново реализовывать различные знаковые функции шейдинга TF2, чтобы лучше соответствовать его стилю. В настоящее время мы работаем над двумя функциями: процедурное контурное освещение и световые искажения. Вот краткий обзор нашего прогресса в этом вопросе:

Процедурное контурное освещение

Оно используется в TF2, чтобы модели игроков всегда были видны даже в условиях плохой видимости, таких как тёмные углы и туннели. Это достигается за счет выделения самых крайних частей модели в определенных местах, позволяя их знаковым силуэтам выделяться на фоне одинакового цвета. В настоящее время у нас есть базовая реализация этого, позволяющая достичь того же эффекта. Вот пример того, как реализовано процедурное контурное освещение:

Световые искажения

Эта функция позволяет регулировать освещение моделей. Source 1 использовал это для настройки стандартного перехода от светлого к темному с помощью настраиваемого градиента на основе 2D-текстуры. Этот эффект используется во многих играх Source 1, таких как Day of Defeat и TF2, где широко используется эта функция, чтобы сделать переход от светлого к тёмному более резким и создать свой фирменный стиль. В настоящее время у нас есть базовая версия этого, однако необходимы дополнительные настройки, чтобы они больше напоминали реализацию Source 1.

Вот пример того, как выглядят световые искажения текстуры:

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

Пример стиля рисунка с помощью световых искажений:

Оттачивание анимаций

🙍‍♂️[N-cognito]

Наша цель в долгосрочной перспективе - максимально точно воспроизвести систему анимации TF2 или даже обновить её, чтобы получить больше преимуществ от набора инструментов Source 2. К сожалению, из-за некоторых ключевых различий между методами настройки моделей и анимации в Source 1 и Source 2, для этого требуется много ручной работы.

На данный момент у нас действительно есть все девять классов, которые работают с правильной, хотя и скучной, анимацией. Теперь всё, что нужно сделать, это очистить файлы playermodel. Из-за возраста TF2, множества разработчиков, которых она видала, и переноса контента из Source 1 в Source 2 не один к одному, в моделях TF:S2 возникло много беспорядка.

Самым большим препятствием сейчас является система правил обратной кинематики. Система, использованная в Source 1, была имела простую реализацию, но была очень простой в настройке и использовании, и её можно было напрямую применить к анимационной последовательности. Система обратной кинематики Source 2 намного надежнее, но, к сожалению, позволяет делать перенос [вероятно, из Source 1] и требует дополнительных настроек, чтобы начать работу, не нарушая исходную систему анимации TF2. Как вы могли представить, выполнение этого для 3+ наборов анимации оружия для 4+ типов движения с 9+ направленными анимациями для 9 классов может быть немного утомительным (минимум 108 анимаций для каждого класса, только для обратной кинематики ноги!). Это особенно утомительно для Разведчика и Медика, поскольку у них есть направленная анимация для анимации прыжка из-за их двойного прыжка и пальто соответственно.

Я игнорировал эти проблемы, чтобы заставить модели игроков работать для внутренних игровых тестов, но, в конце концов, я стремлюсь исправить их должным образом. Моя цель — максимально упростить понимание, разборку и повторное использование наших файлов, поскольку доступный моддинг — БОЛЬШАЯ причина, по которой я впервые попал в TF2.

Следует заметить: хотя мы не планируем использовать их в релизной версии базы TF, я постараюсь настроить анимации не стоковых оружий, чтобы создателям было легче получить к ним доступ на запуске проекта. Сюда входят анимации для таких оружий, как Охотник, Ракетница и Одноглазый горец. Однако я не могу гарантировать, что мы доставим их в готовом виде, поскольку они имеют низкий приоритет по сравнению с другими функциями и механиками, которые еще предстоит реализовать.

Криты

🙍‍♂️Mikusch

Для меня нет ничего более яркого, чем попадание ракеты с критом по цели. Вот почему я взял на себя задачу реализовать критические попадания в TF:S2.

Было бы удивительно узнать, что большая часть времени разработки критических попаданий была потрачена на визуальные эффекты. Функциональная реализация была довольно простой, так как по большей части это вопрос простого умножения урона в 3 раза.

Настоящая проблема заключалась в том, чтобы заставить их выглядеть правильно в этом новом движке. В первом Source была изящная мелочь, называемая прокси материалов, которая, помимо прочего, также обрабатывала свечение критического оружия. Она позволила разработчикам TF2 установить параметры в материале оружия, в данном случае это параметр $selfillum.

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

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

Забавный факт: частица оружия прикрепляется к вашим рукам, а не к оружию. Это так же работает и в Team Fortress 2. Вы больше никогда не сможете это забыть.

HUD

🙍‍♂️Moonly Days

В последнем сообщении блога мы объявили, что в рамках создания базы TF на Source 2 мы хотим максимально придерживаться ванильного TF2. Это, конечно же, подразумевает и HUD.

В течение последних нескольких месяцев я работал над воссозданием базового HUD из Team Fortress 2 в s&box. Одно из наиболее заметных различий между этими двумя играми — это то, как обрабатываются системы HUD. Люди, которые хотя бы пробовали возиться с HUD в базовой игре, вероятно уже знают, что TF2 использует систему vgui.

Хотя система vgui хороша в том, что она делает, я бы не стал считать vgui самой надежной системой HUD. Однако в s&box для создания HUD мы используем scss (к лучшему или к худшему, в зависимости от того, как вы об этом думаете). Эта система превращает HUD игры в псевдо-веб-страницу со множеством элементов, которые вы можете стилизовать как настоящую HTML-страницу при помощи CSS: каждый элемент HUD имеет свой собственный класс, которому мы назначаем различные свойства в файле таблицы стилей. Файлы таблиц стилей подгружаются в s&box в горячем режиме, что делает процесс быстрого изменения файла и просмотра результата невероятно плавным и простым.

Теперь поговорим конкретно о HUD из TF2; Хорошо известно, что способ создания элементов пользовательского интерфейса TF2 не идеален. Иногда они накладываются друг на друга, переполняют контейнер [скорее всего, имеется в виду интерфейс] и даже исчезают прямиком вверх — старый добрый спагетти Source. Поскольку s&box использует scss вместо vgui с упором на flexbox, выравнивание элементов вместе становится намного проще. Чтобы лучше организовать элементы и максимально уменьшить их беспорядок, я разделил элементы HUD на 3 основные категории: жизненно важные, оружие и цели.

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

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

Элементы цели содержат всё, что связано с текущим состоянием игрового режима, например таймеры и счетчики. У каждой категории есть свои собственные хуки создания и удаления, которые могут помочь разработчику показывать и скрывать определенные элементы HUD по запросу.

Я пытаюсь сделать все элементы HUD настолько абстрактными, насколько это возможно, чтобы (при наличии надлежащей документации) люди могли повторно использовать/изменять их в соответствии со своими потребностями. Например: если вы хотите создать игровой режим, который включает в себя захват 12 контрольных точек с помощью флагов CTF за 12 минут, вы можете сосредоточиться на построении логики игрового режима, а не на изменении положения элементов HUD — всё должно работать автоматически.

Шаблон игрового режима

🙍‍♂️Moonly Days

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

Ранее я упоминал, что HUD в TF2 был не в лучшем состоянии за кулисами. О боже, даже не давайте мне начинать с логики режима игры.

Если вы сделали или хотя бы пытались сделать карту в Hammer для Team Fortress 2, вы, вероятно, заметили, что иногда настройка игрового режима для вашего уровня может быть немного хаотичной. Например, некоторые игровые режимы требуют, чтобы вы поместили только два объекта флага и две зоны захвата, чтобы создать карту CTF. Некоторые требуют, чтобы вы возились с team_round_timer, tf_gamerules и системой ввода-вывода логических энтити, чтобы получить что-то вроде режима Захват/Удержание или 5CP [5 контрольных точек], а в некоторых игровых режимах есть свои собственные энтити tf_logic_ *, которые предположительно управляют игровым режимом.

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

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

На данный момент я решил разделить энтити, связанные с игровым режимом, на две части: энтити игрового режима и энтити цели:

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

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

Например, в игровых режимах, таких как Захват/Удержание, у нас есть объект таймера обратного отсчета (tf_logic_timer), который используется для добавления лимита времени на карту. В чём-то вроде "Царь горы" у нас будет два объекта таймера, по одному на команду, и оба таймера будут отображаться на HUD. В том же смысле, если вы, например, решите создать игровой режим "Царь горы" с 4 командами вместо 2, добавление этих 4 других времен в систему будет просто вопросом добавления еще 2 объектов таймера для обеих новых команд.

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

Ассеты Парка Наёмников

🙍‍♂️Beat Crazey

Мы с Джастином потратили некоторое время на портирование и исправление всех ассетов, используемых в cp_mercenarypark, что позволило им хорошо работать с физически корректными шейдерами в Source 2. Единственное, что мы не смогли сохранить в исходных ассетах, так это эффект раскачивания листвы, использованный в пальмах, который требовал вершинного шейдера, отсутствующего в s&box. К счастью, мы можем создать собственный шейдер и реализовать этот эффект в будущем.

Как многие из вас знают, в 2018 году Valve выпустила карту «Supervillain Lair» для SteamVR Home, в которой использовались ассеты Парка Наёмников. Джастин просто взял многие из них, потому что они уже были настроены для шейдеров Source 2, в том числе этот неиспользованный материал Зонтика, которым, по нашему мнению, было интересно поделиться.

Так же, как и система отсчета, в оригинале есть свой UV и материал для более чем 10 других моделей на карте, использование чего позволило сделать оптимизацию и уменьшить количество вызовов отрисовки за счет более эффективного пакетного рендеринга. С другой стороны, версия SteamVR Home имеет свой собственный UV и поставляется как физически корректный материал!

Непонятно, почему Valve решила не использовать этот ассет, потратив значительное количество времени на его полировку, но я думаю, мы нашли ему применение...

От рассвета до заката

🙍‍♂️KAYA

Недавно я внёс некоторые незначительные изменения в карту Well режима Арена, чтобы немного поправить освещение, и максимально приблизил его к тому, что было в TF2, сосредоточившись на освещении окружающей среды и общей насыщенности карты. По-прежнему сложно воспроизвести цветущий желто-оранжевый солнечный свет на стенах, но я уверен, что мы найдем способ.

Поскольку я уже рассказывал о портировании Well в предыдущем блоге, теперь я собираюсь показать вам новые вещи, над которыми я работал. Мы подумали, что было бы отличной идеей продемонстрировать потенциал освещения Source 2 с использованием ассетов TF2, изменив Well на ночной вариант. Вот несколько скриншотов моего прогресса:

Это не финальная версия. Я действительно с нетерпением жду того, что вы думаете об этой новой среде для Well, а также о мелких деталях, которые я добавил на карту, чтобы она стала более живой!

Возвращение в Badlands

🙍‍♂️KAYA

Ещё кое-что, над чем я работал в последние месяцы, было моей маленькой сценой в стиле Badlands, и я очень горжусь тем, как она получилась. Это также заставило нас узнать, какие настройки освещения окружающей среды мы должны использовать для других сцен в этой теме. Потребовалось немало попыток и несколько часов компиляции, и вот результат!

Спасибо всем, кто присылал свои замечательные заявки

🙍‍♂️Продюсеры TF:S2

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

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

Ещё раз спасибо всем, кто уже успел подать заявку. Мы были потрясены всеми ответами и отзывами о нашем проекте. Приятно видеть невероятный отклик сообщества и вашу страсть к Team Fortress: Source 2.

Взгляд на будущее...

🙍‍♂️Waugh Gaming

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