S&Box DevBlog Август 2021 - S&box - Всё Для Вашего Игрового Сервера Перейти к содержанию




S&Box DevBlog Август 2021


OriginalShaman

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

S&Box DevBlog Август 2021

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

 

«В этом месяце было много VR фич, но как обычно мы делали и много других вещей»

Теги Объектов(Garry)

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

Август 2021, изображение №1
 
 

Вот простейший пример, помечаем игрока тегом «игрок». Теперь каждая система в игре сможет проверить наличие этого флажка и узнать что это игрок.

Общие проверки подобные этой полезны в s&box, потому что наш «Pawn» может быть просто голой энтити, у нее не обязательно есть общий базовый класс игрока, которого мы можем тестить.

Август 2021, изображение №2
 
 

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

РАЗРЕШЕНИЯ

Самое классное в этой системе тегов то, что ее можно использовать для любых целей. Я бы мог представить, что мы поддерживаем такие вещи как «is-admin» и «can-noclip», как примитивную систему разрешений.

ГРУППЫ КОЛЛИЗИЙ

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

Август 2021, изображение №3
 
 

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

БУДУЩЕЕ

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

Это функция, для которой я надеюсь найти больше применений в будущем.

API Вики

У меня есть вики бот, который просматривает dll библиотеки s&box и добавляет страницы документации для всех общедоступных классов и т.д.

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

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

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

Волосы(Taylor)

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

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

Фидбек был потрясающим, но я надеюсь улучшить их (и улучшить волосы на лице) в течение следующих нескольких месяцев.

Смешивание Ландшафта(Sam)

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

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

 

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

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

Автоподавление RPC(Garry)

Представьте, что вы стреляете из пистолета в игре. Клиент запускает код предикции выстрела, который вызывает функцию «ShootEffects», которая воспроизводит звук и рисует вспышку выстрела. Затем сервер запускает фактический код, который также вызывает «ShootEffects», который является RPC, поэтому он отправляет сетевое сообщение клиенту для вызова функции.

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

СТАРЫЙ СПОСОБ

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

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

Поэтому я добавил Prediction.Off(), который отключил бы подавление в своей области. За исключением того, что люди, очевидно, были сбиты с толку этим, потому что они поместили его повсюду, даже в код только для клиентов.

НОВЫЙ СПОСОБ

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

Поэтому, когда клиент вызывает RPC функцию на стороне клиента, теперь они будут отмечать это.

Когда они получат RPC с сервера, они подавят его, если они уже запустили его во время предикции.

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

VR Трекинг Рук

Я добавил поддержку трекинга рук.

Вы получаете трансформирование каждой руки в легкодоступной структуре. У вас по сути есть положение и вращение каждой руки. Что может быть проще этого?

Август 2021, изображение №4
 
 

Они являются частью ввода, поэтому они доступны как на стороне клиента, так и на стороне сервера в Simulate().

VR Вводы Контроллера

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

Август 2021, изображение №5
 
 

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

VR Трекинг Пальцев

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

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

Август 2021, изображение №6
 
 

Они также являются частью вводных данных, поэтому они доступны как на стороне клиента, так и на стороне сервера в Simulate().

VR Трекеры

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

Август 2021, изображение №7
 
 

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

Они также являются частью вводных данных, поэтому они доступны как на стороне клиента, так и на стороне сервера в Simulate().

Переосмысление Базовых Энтити(Rubat)

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

Оно начинается с 4 способов создания дверей в Source - func_door, func_door_rotating для дверей на основе «брашей», которые полностью создаются в Hammer, и prop_door_rotating и prop_dynamic для дверей на основе моделей.

В S&box у нас есть только одна энтити двери - ent_door. Она может работать как с выделенными моделями, так и с «брашами», она может работать как с вращающейся дверью, так и с линейно движущейся. Его можно анимировать с помощью AnimGraph, если вращения и линейного перемещения недостаточно.

Тот же принцип был применен к нескольким другим энтити:

  • func_button и func_rot_button были объединены в ent_button
  • func_rotating и func_movelinear были объединены в ent_platform
  • func_tracktrain, func_train, path_node и связанные с ними энтити, используемые при создании объектов, подобных лифту и поезду, заменены на ent_path_platform

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

Уличное Окружение(Tom)

Август 2021, изображение №8
 
 

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

Прямое Воспроизведение Анимационной Секвенции / (Maxime)

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

RTS эксперимент, над которым работает Conna, вернулся к этому методу из-за узкого места в производительности Animgraph, которое было выявлено благодаря огромному количеству используемых единиц.

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

Вы также можете посмотреть RTS репозиторий, чтобы узнать, как работает код.

Hammer Хелперы(Rubat)

С капитальным ремонтом Hammer в Source 2 также довольно просто создавать пользовательские хелперы / визуализацию для энтити.

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

Август 2021, изображение №9
 
 

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

Инструмент Пути

Я изучаю возможности использования нового Path Tool инструмента в Hammer. Это то, что использует новая энтити ent_path_platform. Я чувствую, что он недостаточно используется и несколько недостаточно развит в базовом Source 2, но немного поработав, мы сможем это изменить.

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

 
 

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

Данные Path Tool уже доступны кодерам через BasePath класс.

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

Мировой UI(Garry)

Август 2021, изображение №10
 
 

Раньше у нас был фейковый интерфейс мира. Он всегда отрисовывался поверх основного мира, поэтому было непригодно для некоторых ситуаций.

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

Интерактив с Мировым UI

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

Нам нужно иметь возможность нажимать и перетаскивать, независимо от того, используем ли мы кнопки мыши, обзор мыши или VR.

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

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...