S&Box DevBlog Июнь 2021 - S&box - Моддинг Игр и Серверов Перейти к содержанию
Гость

S&Box DevBlog Июнь 2021


OriginalShaman
 Поделиться

Рекомендуемые сообщения

S&Box DevBlog Июнь 2021

*Повествование ведется от первого лица, так как текст - это перевод с официального сайта разработчика игры.

 

В этом месяце произошли значительные улучшения UI, ИИ, и анимации игроков

Лицевые выражения ситизенов(Taylor)

Июнь 2021, изображение №1
 
 
Июнь 2021, изображение №2
 
 
Июнь 2021, изображение №3
 
 

Я добавил набор морф таргетов в модель Ситизена, сосиски теперь с выражениями лиц максимально харизматичные!

Это очень похоже на первую версию чего-то, что будет развиваться со временем, пока Макс работает над анимацией. Формы могут быть изменены либо добавлены, если мы увидим, что они не особо подходят под выражения, а сами правила гибкости(морфов) все еще нуждаются в небольшой настройке. Как я уже говорил, система очень гибкая(и с ней чертовски весело играться!)

Макс уже настроил несколько простых выражений лица, срабатывающие при выстреле, и мне не терпится увидеть то, что мы можем сделать с ними в будущем!

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

Анимации Ситизенов(Maxime)

Анимграф ситизенов преследует 3 дизайнерские цели:

  • Он должен быть легок в понимании (и тщательно прокомментирован)
  • Он должен быть гибким, и легко «масштабируемым», от простого базового поведения до более приличных форм
  • Он должен расставлять приоритеты, требуя наименьшего количества входных переменных, чтобы получить наибольшее количество функций
Июнь 2021, изображение №4
 
 

Это может выглядеть пугающе... но это не так уж сложно для понимания.

Прямо сейчас, если вы ходите добавить новый «тип держания»(способ держать что-то, типа оружие) для своего игрового режима, вам нужно скормить его всего в двух позах - одна стоя, другая приседая.

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

Но вы также можете добавлять дополнительные позы (и конечно анимации), чтобы все было более приличным. К примеру, вы также можете поставить «long idle» позу: используя логику, полностью управляемую анимграфом, если вы не двигаетесь или не выполняете никаких действий (стрельба/перезарядка) в течении определенного времени (~10сек), ветвь типа «удержания» переключается на другую позу, с иной системой цепей.

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

  • IK и look цепи включают и отключают себя в определенное время
  • Каждая ветвь оружия отвечает за свои цепи внешнего вида, и может переключаться на другие с различными настройками затухания. Вот так оружие опережает верхнюю часть тела, добавляя немного задержки, инерции и прослеживания, что делает движения немного более естественными.
  • Компоновка верхней части тела использует различные весовые списки при бездействии, перемещении или выполнения жестов (таких как перезарядка), позволяя использовать более или менее основную анимацию движения.

В данное время еще не все идеально; обычно большая часть проблем, с которыми мне приходится иметь дело, вызвана непреднамеренными сигналами сброса, уменьшающимися значениями, которые блокируются, когда они не должны, или наоборот. Это действительно сложная часть графа, и я стараюсь оставлять заметки об этих крайних случаях в нодах комментариев, или в заметках где-нибудь внутри самих нодов. (Это функция из ModelDoc, которую мы специально портировали в AnimGraph - Спасибо Лайла!)

А еще есть несколько функций, которые не используются. Для примера, поза прицеливания в видео выше? Это полностью процедурные look цепи. Как только матрица позы будет добавлена в смешивание, прицеливание начинает выглядеть более естественным. ( Но это свидетельство силы Анимграфа в том, что все уже выглядит довольно хорошо!)

Время от времени мы добавляем всякие новые украшательства(последним было аддитивное направленное смешивание, используемое при полете во время ноклипа). Я надеюсь создать что-то подобное для прыжков.

Также есть захватывающие идеи, потенциально ставшие возможными благодаря контроллеру игрока, который теперь предоставляет два набора значений: «move» (движение, как оно происходит в целом) и «wish» (описывает ввод игрока). Одна идея из моего списка: когда вы будете управлять своим персонажем в полете - ноги будут отставать от вашего движения, в то время как верхняя часть тела будет наклоняться в направлении ввода.

Более Универсальные Удержания

Теперь, когда нам не нужно работать с существующим контентом (т.е. с плеермоделями HL2DM и их наборами анимации), одна огромная тяжесть, с которой я пытаюсь больше не сталкиваться, - это размножение «типов удержания»

В Gmod у нас была дюжина таких, часто с очень маленькими различиями

С S&box моя цель - иметь меньше, но настраиваемых типов.

Отправная точка для этого: первая итерация этого нового типа «holditem».

 

Идея заключается в том, что вы можете заставить ситизена держать что угодно, указав:

  • Общая поза тела: в данный момент, комбинация узкого/широкого предмета, разведение рук и легкое/тяжелое состояние, приседание)
  • Рука: правая / левая... или и то и другое!
  • Тип «атаки»: рядом, средний бросок, или дальний
  • Поза руки: выбор из 18-ти в библиотеке(пока что) или любая точка между соседними позами

Если бы вы хотели показать ситизена несущий ящик, ваш код запросил бы у анимграфа 2H, вы бы установили позу тела на 4, а позу руки на 0.02, затем вы бы привязали модель ящика к атачменту с именем «middle_of_both_hands», которое всегда расположено в середине воображаемой линии, проведенной между обеими руками персонажа!

Если бы вы хотели показать гранату, вы бы вместо этого установили руку на RH, позу тела на 1, позу руки на 0.11, и вы могли бы переключить тип «атаки» между 1 и 2 в зависимости от того, хотите ли вы небольшой бросок, или большой(что-то типа игр Counter Strike)

Июнь 2021, изображение №5
 
 

При реализации этих систем необходимо найти компромиссы: например, сначала я представлял себе систему, которая будет использовать различные float’ы (сгибание/свертывание/крен/разброс), чтобы вы могли очень точно контролировать позу каждого пальца. Но... на данный момент куча готовых поз «достаточно хороша», и в будущем, возможно, будет разумнее просто позволить людям, которые хотят иметь точный контроль, каким то образом сделать это с помощью кода.

По мере того, как расширяется функционал системы, я нахожу недостатки, которые необходимо устранить... ну, на самом деле это просто более приятный способ сказать: «Решения, которые я принимал ранее, теперь мешают мне.» И это лишь вопрос в продолжении повторения их все больше и больше!

Эти параметры будут распространяться на другие ветки типов удержания; следующим в моем списке будет переключаться между 2-ручным и 1-ручным оружием(RH)!

Генерация FGD(Garry)

Писать FGD собственноручно - отстой. Так что, давайте украсим наши классы энтити и автоматически сгенерируем FGD.

Июнь 2021, изображение №6
 
 

Это гораздо более приятный способ работы. Мы тратим больше времени на анализ того, как мы работаем в Hammer, и приводим его под текущие реалии.

Кое-что пришедшее в голову, заключалось в том, что у нас есть два типа энтитей для множества случаев. Похоже у нас есть энтити солидов(на основе брашей), и энтити моделей. Это не нужно в Source 2, всё это просто модели.. Таким образом, мы можем объединить их в одно целое

Я уже говорил об этом раньше, но я действительно чувствую, что одна из сильных сторон S&box на данный момент заключается в том, что мы можем выбросить эту срань. Valve не может/не хочет делать этого, им приходится переделывать все старые фичи, которые они хотят поддерживать. Мы можем привнести динамит в это дело, и расчистить путь на будущее.

Улучшения UI Системы

Как и в любой другой месяц, в этом месяце мы внесли кучу исправлений и обновлений в UI систему.

 
  • Поддержка для переменных
  • Поддержка для @import
  • Новый параметр: pixel-snap
  • Новая PanelEvent система
  • Поддержка text-transform
  • Поддержка font-style
  • Поддержка letter-spacing
  • Поддержка text-decoration
  • Поддержка :nth-child
  • Добавлен UseTemplate атрибут
  • Таблицы стилей придерживаются правилам специфичности css
  • sound-in, sound-out свойства
  • Поддержка :not
  • Поддержка :empty
  • Поддержка :first-child
  • Поддержка :last-child
  • Поддержка :only-child
  • Специальные pointer-events свойства
  • Поддержка backdrop-filter
  • Улучшена тень текста
  • Улучшен рендеринг текста
  • Улучшен рендеринг изображений

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

Меню - Навигация

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

Поэтому я понял, что нам нужно перемещение вперед/назад. Оно должно работать как веб-сайт. Если вы нажмете не на ту кнопку, вы просто нажмете назад, а не нажмете «Домой», и пройдетесь по списку меню, чтобы вернуться туда, где вы были. Предыдущая страница должна вернуться мгновенно, она не должна ничего загружать, она должна просто появиться.

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

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

Июнь 2021, изображение №7
 
 

Таким образом, переход по этому URL в навигаторе создаст эту панель, и сделает ее текущей страницей. Последующие переходы по этому URL снова откроют эту панель. Он не будет удален и воссоздан заново.

Июнь 2021, изображение №8
 
 

Как вы можете видеть здесь, это также поддерживает переменные. Так что, вы можете перейти к «/game/facepunch.sandbox» и эта панель будет создана, она получит свойство «game_ident» и сможет просматривать информацию об игре. Опять же, оно не будет воссоздавать это каждый раз, а создаст один экземпляр для каждого уникального идентификатора игры, поэтому больше кэширования.

Это оказалось гораздо более приятной системой, чем то, что у меня было раньше, и делает систему меню приятной для расширения, а не карточным домиком.

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

Система Пати

В этом месяце я внедрил систему пати. Она работает так, как вы и ожидали, вы присоединяетесь к пати, овнер пати присоединяется к игре - вся пати присоединяется к ним.

Я работал над тем, чтобы сделать все это как можно беспрепятственно.

Июнь 2021, изображение №9
 
 

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

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

Июнь 2021, изображение №10
 
 

Когда овнер создает игру или присоединяется к ней - пати будет следовать за ним. Когда они выйдут из игры - пати будет следовать за ними.

Июнь 2021, изображение №11
 
 

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

Навигационная Сетка

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

Создание навмеша из C# будет большой частью выполнимого, поэтому я начал работать над ним в начале этого месяца в аддоне под названием ai-lab.

 

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

 

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

Это то, с чем мне нравится играться, и я уверен, что в сообществе найдутся люди, которые сделают ИИ с его помощью еще лучше, чем я когда-либо мог. Функциональность присутствует.

Обратные Вызовы Сетевых Переменных(Conna)

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

Начальная VR поддержка(Sam)

Я пофиксил VR рендеринг, с момента запуска проекта мы много работали над улучшением некоторых гибких возможностей рендеринга для Source 2, и адаптацией его для работы с тем, что мы хотим, но до сих пор ни разу не проверяли его в VR режиме.

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

 

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

Меню - Главный Экран(Garry)

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

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

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

Индивидуальные Сети

Как насчет того, чтобы вы запустили игру, и вместо того, чтобы присоединиться к выделенному серверу или игре другого игрока, она взаимодействует с веб посредством API

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

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

Июнь 2021, изображение №12
 
 

В этом месяце Рохан исследовал это, добавив класс websocket в s&box. Затем он создал Towns в качестве доказательства концепции. В этой игре вы подключаетесь к удаленному серверу websocket, который затем транслирует данные о местности и объектах.

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

Ссылка на комментарий
Поделиться на другие сайты

 Поделиться

Подписывайтесь на нас во Вконтакте!

×
×
  • Создать...
Искать в
  • Ещё...
Поиск контента, содержащего...
Поиск результатов в...

Напишите свой запрос, а Мы попробуем найти ответ!