OriginalShaman Posted August 26, 2021 Share Posted August 26, 2021 S&Box DevBlog Январь 2021 *Повествование ведется от первого лица, так как текст - это перевод с официального сайта разработчика игры. «В этом месяце мы расширили API такими вещами как регдоллы, партиклы, доступ к данным моделей, физические ограничения, UI, хитбоксы и тонна других вещей» Регдоллы (Garry) В первом Source регдоллы создаются с помощью специальной «prop_ragdoll» энтити. В GMod'е для «спавнменю» требуется знать какую энтити необходимо заспавнить, чтобы она была создана как регдолл. В данном случае это не так. Вы спавните ModelEntity, и указываете модель. Если модель — регдолл, она просто будет работать и все. Это делает кучу работы намного проще. То, как двигаются регдоллы — действительно чувствуются приятно и мясисто. Режим Песочницы Мы начали играть в режиме «sandbox», который основан на режиме песочницы GMod'а. Мы пока что не делаем это всерьез, но используем его как способ убедиться, что все возможно к расширению возможностей моддинга. Инструменты Песочницы (Layla) Я начал переносить инструменты с песочницы GMod'a, чтобы мы могли видеть, как это все держится. У нас есть некоторые идеи по улучшению оригинальных инструментов Garry's Mod, но пока мы просто хотим воспроизвести то, что у нас уже есть в GMod, и убедиться, что все это работает. Самое главное для меня — это то, насколько хорошо физика синхронизируется по сети в мультиплеере, кажется, что все работает точно так же, как и в локальной игре. Чем больше я использую Source 2 — тем больше я его люблю. Воздушные шарики очень просты, вы можете просто применить к ним отрицательную гравитацию, и все работает так, как вы бы и ожидали. Статистика игроков (Garry) Вы можете подумать, что статистику легко сделать. Просто взять список игроков, нарисовать их имена и результаты, ведь так? Нет. Проблема в том, что ваш клиент может не знать об игроке, потому что он находится где-то в другом месте на карте и по сети не синхронизирован для тебя. Нам нужно отправить конкретную статистику таким образом, чтобы она не была связана с энтити игрока. И так как мы классные, мы хотим способ, который может быть расширен аддонами и игровыми режимами без необходимости изменять исходный код. Мы называем это PlayerInfo. Класс игрока имеет функции для установки и получения его. Вы можете реализовать его в таком свойстве, как это: Таким образом, вы можете использовать «Deaths» как обычную переменную. На стороне UI клиента вы взаимодействуете с PlayerInfo через класс PlayerInfo. Этот класс, с его Добавленными / Обновленными / Удаленными хуками, позволяет вам действительно очень легко сделать табло. Матчмейкинг Когда мы думаем о том, что нам нужно сделать, чтобы начать тестирование, одна из важных вещей заключается в том, чтобы людям было легко присоединиться друг к другу. В этом месяце я добавил поддержку Лобби + Матчмейкинга. Это позволяет нам видеть, когда люди играют в игры, и благодаря Steam Networking, если я создаю игру, то люди могут присоединиться к ней, не раскрывая свой IP-адрес и не вмешиваясь в настройки брандмауэра. Эта легкость присоединения к активным играм породила мем в команде S&box, где вы присоединяетесь к чьему-то серверу, и пока игроки alt'tab'нутые — надеваете им коробку на голову. Console v4 Несмотря на то, что я довольно долго работал над внешней игровой консолью, и некоторые вещи, которые она делает, действительно полезны, я нахожу мысль, что она не является заменой внутренней игровой консоли . И я могу себе представить, что многие люди будут чувствовать то же самое на релизе. Хорошим аргументом в пользу игровой консоли является то, что если наша система UI не является говном собачьим, то она должна быть более чем возможной для создания рабочей консольной системы, и это должно заставить нас устранить любые недостатки с помощью системы UI, если мы вынуждены ее использовать. Теперь, когда я говорю "консоль", я имею в виду не просто текстовое поле для ввода консольных команд и поле прокрутки с выводом консоли. Я представляю себе это как нечто большее. Сейчас она немного грубовата и пуста, но со временем мы поработаем над тем, чтобы сделать ее более полезной и пригодной для использования. Чат, Статистика Убийств и Прицел С появлением новой системы UI, приближающейся к пригодному для использования состоянию, пришло время начать очистку и создание основных элементов HUD. Они будут служить в качестве значений по умолчанию и примером для людей, чтобы создать свои собственные системы замены UI. Разрушаемые пропы Модели могут содержать кучу данных о ключевых значениях (KeyValues). Один из способов использования этих данных — это такие вещи, как разрушаемость, которые описывают, как модель должна ломаться, когда она повреждена. Я подумал, что было бы полезно получить эти данные в игре, не только для разрушающихся пропов, но и для всего остального. Поэтому я добавил функцию. Вы можете использовать это с любой структурой, но я включаю встроенные переменные по умолчанию. Я пытаюсь избегать повторных дефайнов этих структур по умолчанию, чтобы мы могли сохранить некоторый уровень совместимости с другими ассетами Source 2. Я добавляю методы расширения к объекту модели для дефолтного кода. Таким образом, весь код находится в коде аддона (поэтому он может быть использован как референс или адаптирование). «Многабукаф, ниасилил» заключается в том, что когда вы ломаете проп в S&box, обломки создаются в C#. Контекст Меню Изнутри мы создаем то, что мы называем контекстами, чтобы разделить логику между клиентом и сервером. Это означает, что клиент не может влиять на код сервера, а сервер не может влиять на код клиента. Они не знают друг о друге. Если вы измените глобальные переменные на клиенте, они не будут изменены на сервере. В этом месяце я добавил еще один контекст для меню. Это сделало код намного более управляемым на бэкэнде и исправило кучу ошибок компиляции/горячей загрузки. Вода и Океан (Sam) Вы на 70% сделаны из воды, даже в ваших костях есть вода, к концу прошлого месяца я работал над водой, но у меня не было времени написать об этом. План состоит в том, чтобы повторить водный рабочий процесс, с которым люди знакомы, и устранить недостатки, которые люди имеют с этим потоком, чтобы сделать ее эффективней, водные системы разделены на два модуля, которые имеют одно и то же ядро: Вода с заданным объемом, и Океан. ● Вода с объемом работает как традиционные водные объекты, с которыми вы знакомы в Хаммере, вы определяете область для бассейна, и она заполнена H2O, это специально для конечных тел. ● Океан, с другой стороны, является точечной энтити заполнит горизонт таким телом, сделанным для облегчения создания и повторения сцен пространства без необходимости подделывать большой объем воды. Для конкретного водного материала вашей карты вы можете очень легко настроить ряд параметров, и поскольку все вычисления выполняются аналитически, они в конечном итоге даже реплицируются в симуляцию, так что волны будут влиять на физическую симуляцию. Есть еще кое-какая работа над этим, прямо сейчас это демонстрация дешевого для отрисовки варианта водного материала, я очень уверен во всем пайплайне рендеринга Source 2 на данный момент, и я должен быть в состоянии продемонстрировать дорогой для отрисовки вариант в ближайшее время. Система Времени В этом месяце я начал работать над расширенной системой времени суток, над ней еще предстоит поработать, но она начинает выглядеть хорошо, скайбоксы теперь представляют собой просто набор объектных слоев и полностью поддаются скриптам. Если вы подниметесь достаточно высоко, вы даже сможете увидеть кривизну крошечной планеты и понаблюдать за звездами. Как и в случае с нашими шейдерами, они открыты для редактирования разработчиками сообщества на свой вкус, вы можете использовать их в качестве основы для добавления разброса атмосферы конкретной планеты в космической игре, которую вы хотите сделать. Вы все еще можете использовать его и на статических сценах, и атмосфера будет соответствовать освещению на сцене, что должно помочь правильно выглядеть освещению на вашей карте, не охотясь за текстурами скайбоксов, если вы их выберете (Традиционные скайбоксы все еще поддерживаются). VRAD3 запечет дополнительную информацию, которая включает в себя то, что я называю «Покрытием неба», которое работает как своего рода направленная окклюзия для неба, то есть непрямой свет из самой атмосферы не будет иметь постоянного плоского вида или что такой свет будет кровоточить, пока вы находитесь в метро, но если вы видите решетку, ведущую на поверхность, свет атмосферы должен градиентно проходить, как вы ожидаете, и не мешать любому запеченному внутреннему освещению. Я бы хотел иметь солнечные тени, которые простирались бы почти до бесконечности, я думаю, что есть случай, когда люди нуждаются в больших картах, которые сохраняют точность независимо от того, как далеко вы идете или в какое время суток, традиционно такие методы были бы очень требовательны для производительности, поэтому VRAD также запечет SDF-информацию о геометрии, которая позволяет нам очень эффективно отслеживать далекие тени для далекой геометрии, среди некоторых действительно интересных эффектов, которые я хочу расширить в более позднем посте. Пока интересно говорить о технических деталях, художникам и мапперам даже не придется беспокоиться о том, что за этим стоит, это должно просто работать. Объект скайбокс сцены не обязательно должен быть просто бесконечным небом, но действительно может быть чем угодно, и вы можете легко добавить его в качестве слоя, я хочу улучшить атмосферу позже, добавив облачную систему. Графические Улучшения Между делом я работал над некоторыми небольшими графическими изменениями, которые, по моему мнению, значительно улучшают качество жизни игры. Помните ту классную штуку из CS:GO, где ваши руки и оружие находятся в тени? Я написал нашу версию этой фичи в этом месяце, она очень дешевая и будет просто работать со всем, что будет в промежутке тени, больше нет теневого неравенства на вашей мировой игровой модели и на том, что у вас на руке. Я повторил проход АО прокси, чтобы иметь лучшую точность и лучше работать для моделирования диффузных теней, результат приближается близко к основному эталону истинности, и это все еще дешевле, чем любой SSAO, расчет выполняется полностью аналитически. Я бы хотел как можно больше избегать эффектов глубины экранного пространства, они часто стоят дорого и выглядят не так уж здорово по сравнению с подобными решениями. Мы используем Forward Shading, пока это делает вещи действительно эффективными, то, как все настроено прямо сейчас, может занять некоторое время, чтобы повторить сложные эффекты, мы, вероятно, скоро сделаем проход очистки многих из этих шейдеров, я уже удалил много кода рендеринга, который не имел отношения к тому, что мы строим, и это помогло мне двигаться вперед быстрее. В качестве бонуса помните последний пост, где мы упоминали рабочий процесс создания шейдеров? Шейдеры теперь также просто в реалтайме компилируются при сохранении аналогично C# коду и компилируются в своем собственном эксклюзивном потоке. Партиклы (Garry) Редактор партиклей(частиц) в первом Source всегда был для меня непомерно сложным. Вот почему в GMod'е я создал нашу собственную систему частиц. Я действительно не хочу делать это снова, если мне это не нужно, поэтому я рассматриваю, как мы можем заставить существующую систему частиц работать на нас. Как я могу заглушить его, чтобы я мог использовать его, но сохранить всю классную функциональность? Вот к чему я пришел: ● Удаление избыточных функций ● Называть их более полезно ● Называть составляющие так, чтобы они группировались естественней ● Размещение редко используемых опций в Расширенном разделе ● Сделать кнопку "Base Properties" более очевидной ● Начать новую частицу с рабочей системы частиц ● Переключиться к «Velocity» вместо «Position Previous» ● Не всегда перезапускать систему при изменении свойств Я уверен, что мы можем сделать еще кое-что, но я думаю, что это будет хорошим началом. Он уже опустился до уровня, на котором я могу его использовать. На стороне кода системы частиц стали довольно простыми в работе. Вы можете сделать это на стороне клиента или сервера. Вы можете хранить Систему Частиц и обновлять ее или уничтожать, когда захотите. Хитбоксы Настройка хитбоксов в ModelDoc сосет жопу. В этом месяце я настроил его так, чтобы вы могли указать лучу, чтобы попасть в хитбоксы. Вы можете узнать, в какой хитбокс он попал, в возвращенном результате трассировки. Мне было немного весело делать это, потому что клиентские хитбоксы не работали.. поэтому я сделал пистолет для трассировки лучей, чтобы отладить его. Выталкивание Когда вы застреваете в объекте, движение игрока аля Source 1 обнаруживает это и отталкивает вас как только может. Для этого он тестирует кучу позиций вокруг вашей текущей позиции, чтобы увидеть, находятся ли они в коллизии или нет. Если их нет, то он перемещается туда. Мой метод более случайный, чем стандартный. Я просто тестирую случайные точки, но пока он выполняет свою работу, и мы можем усовершенствовать его со временем. Link to comment Share on other sites More sharing options...
Recommended Posts