Показаны результаты для тегов 'garrys mod'. - Моддинг Игр и Серверов Перейти к содержанию
Гость

Поиск сообщества

Показаны результаты для тегов 'garrys mod'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Общее
    • Новости Сайта
    • Общение
    • Помощь по игровым серверам
    • Поиск плагинов/файлов
  • По играм
    • Counter-Strike 2
    • Counter-Strike: Global Offensive
    • Team Fortress 2
    • Left 4 Dead (1/2)
    • Grand Theft Auto V
    • Minecraft
    • S&box
    • Dota 2
    • Terraria
    • Half-Life 2:Deathmatch
    • GTA: SAMP
    • Counter-Strike: Source
    • Counter-Strike
    • Rust
    • PLAYERUNKNOWN'S BATTLEGROUNDS
    • Warface
    • Half-Life: Alyx
    • World Of Tanks
  • Архив/Корзина
    • Устаревшие Статьи
    • Steam
    • Новости из мира игровой индустрии
    • Халява

Категории

  • Counter-Strike 2
    • Плагины/моды
    • Карты
    • Скины / Модели
  • Team Fortress 2
    • Скины / Модели
    • Карты
  • Left 4 Dead (1/2)
    • Скины / Модели
  • Sourcemod плагины
    • CS:GO
    • Left 4 Dead
    • Team Fortress 2
    • Half-Life 2: Deathmatch
    • Counter-Strike 2
  • Counter-Strike: Global Offensive
    • Скины / Модели
    • Сборки / Готовые Сервера CS:GO
    • Карты
    • Разное
  • Half-Life 2:Deathmatch
    • Скины / Модели
    • Карты
  • Counter-Strike
    • Готовые сервера
  • Rust
    • Плагины Umod (Oxide)
  • World Of Tanks
    • Моды для World Of Tanks
    • Прицелы
    • Шкурки / Зоны пробития
    • Ангары
  • Dota 2
    • Скины/Модели
    • Разное
  • Minecraft
    • Плагины
    • Скины
    • Карты

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


О себе

Найдено: 10 результатов

  1. OriginalShaman

    S&Box DevBlog Август 2021

    S&Box DevBlog Август 2021 *Повествование ведется от первого лица, так как текст - это перевод с официального сайта разработчика игры. «В этом месяце было много VR фич, но как обычно мы делали и много других вещей» Теги Объектов(Garry) Мы добавили систему тегов к энтити. Это разрешает вам помечать каждую энтити неограниченным количеством сетевых строчек. Как классы в html/css, это невероятно просто и невероятно мощно. Вот простейший пример, помечаем игрока тегом «игрок». Теперь каждая система в игре сможет проверить наличие этого флажка и узнать что это игрок. Общие проверки подобные этой полезны в s&box, потому что наш «Pawn» может быть просто голой энтити, у нее не обязательно есть общий базовый класс игрока, которого мы можем тестить. Но с помощью этой системы легко определить, следует ли рассматривать эту энтити как игрока, или npc, или гранату и т.д., не проверяя классы напрямую. РАЗРЕШЕНИЯ Самое классное в этой системе тегов то, что ее можно использовать для любых целей. Я бы мог представить, что мы поддерживаем такие вещи как «is-admin» и «can-noclip», как примитивную систему разрешений. ГРУППЫ КОЛЛИЗИЙ Мы пока не особо продвинулись с тем, чтобы сделать группы коллизий полезными и не отстойными, так что это первые шаги к решению этой проблемы . Может быть, мы могли бы делать коллизии на основе тегов? Пример этого приведен выше. Вы можете фильтровать свои трейсы по тегу, что мне кажется намного проще для понимания, чем бороться с группами коллизий. БУДУЩЕЕ Я думаю о таких фичах, как параметры триггеров в 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 Трекинг Рук Я добавил поддержку трекинга рук. Вы получаете трансформирование каждой руки в легкодоступной структуре. У вас по сути есть положение и вращение каждой руки. Что может быть проще этого? Они являются частью ввода, поэтому они доступны как на стороне клиента, так и на стороне сервера в Simulate(). VR Вводы Контроллера Вы также можете получить доступ к вводам контроллеров. В попытке их упрощения, я сохраняю их довольно общими базовыми на контроллерах, которые сейчас являются мейнстримом. Под этим я в основном подразумеваю Quest и Index контроллеры. Мы можем столкнуться с ситуацией, когда контроллеры имеют разные вводы, или они избавляются от контроллеров все вместе и просто отслеживают руки. Однако я ставлю против того, чтобы что-то существенно изменилось с точки зрения ввода. VR Трекинг Пальцев Теперь вы можете сгибать и разгибать пальцы с помощью ввода, что позволяет вам расположить пальцы так, чтобы они соответствовали вашим реальным пальцам в игре. Это позволяет вам делать такие жесты руками, как махание и лайки. Любые грубые жесты рук обнаруживаются с помощью искусственного интеллекта, в результате чего игра автоматически закрывается и вашим родителям отправляется имейл. Они также являются частью вводных данных, поэтому они доступны как на стороне клиента, так и на стороне сервера в Simulate(). VR Трекеры Я добавил дополнительную поддержку трекера для VR. Это позволяет вам узнать положение и вращение любых дополнительных трекеров, которые у вас могут быть, а также ваших базовых станций, если вы не используете Quest. Этот 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) Я продолжал работать над пропами окружения, чтобы оживить улицы констракта. В этом месяце появились несколько значков британской хай-стрит, красный почтовый ящик и черно-золотая корзина. Вместе с различными предметами мусора, которые можно выбросить, когда мусорные баки будут опрокинуты. Прямое Воспроизведение Анимационной Секвенции / (Maxime) Возможность прямого воспроизведения анимационных секвенций на моделях было отключено, но теперь оно снова работает! Это означает, что вам не нужно проходить через AnimGraph, чтобы заанимировать модель. Вы можете сделать это в стиле олдскула. RTS эксперимент, над которым работает Conna, вернулся к этому методу из-за узкого места в производительности Animgraph, которое было выявлено благодаря огромному количеству используемых единиц. Вы все еще можете сделать некоторые анимационные композиции прямо в ModelDoc, хотя это немного более ограничено. Вот вики - страница об этом! Вы также можете посмотреть RTS репозиторий, чтобы узнать, как работает код. Hammer Хелперы(Rubat) С капитальным ремонтом Hammer в Source 2 также довольно просто создавать пользовательские хелперы / визуализацию для энтити. Например, здесь у нас есть хелпер, показывающий открытую позицию для двери. Это то, с чем, как я знаю, многие мапперы сталкивались в прошлом, поэтому необходимо сократить множество итераций. Наше намерение состоит в том, чтобы в конечном итоге позволить кодерам добавлять своих собственных хелперов и инструменты для работы в Hammer - но это еще не скоро. Инструмент Пути Я изучаю возможности использования нового Path Tool инструмента в Hammer. Это то, что использует новая энтити ent_path_platform. Я чувствую, что он недостаточно используется и несколько недостаточно развит в базовом Source 2, но немного поработав, мы сможем это изменить. С помощью Path Tool нет необходимости задавать уникальные имена энтити для каждого узла, чтобы связать их вместе, поэтому создание и модифицирование пути намного проще. Затем путь компилируется в единую энтити, которую вы можете назвать и назначить другой энтити, например новой форме ent_path_platform. Данные Path Tool уже доступны кодерам через BasePath класс. В ближайшем будущем я хочу, чтобы каждый узел имел кастомные значения ключей и выходные данные, как мы уже можем делать с самими энтити для еще более высокой настраиваемости. Мировой UI(Garry) Раньше у нас был фейковый интерфейс мира. Он всегда отрисовывался поверх основного мира, поэтому было непригодно для некоторых ситуаций. С помощью UI в мире они на самом деле отрисовываются в мире в правильном прозрачном порядке отрисовки. Поэтому они рисуются на заднем и переднем плане, как вы и ожидали. Отлично подходит для именных тегов и т.д. Интерактив с Мировым UI Для надлежащего обслуживания мировые панели должны быть интерактивны так же, как обычный UI с мышью. Нам нужно иметь возможность нажимать и перетаскивать, независимо от того, используем ли мы кнопки мыши, обзор мыши или VR. Я начал изучать UI в этом месяце. Это означало небольшую перестановку внутренних компонентов, чтобы заставить его работать, но сейчас он находится в таком месте, где его можно использовать и работать.
  2. OriginalShaman

    S&Box DevBlog Июнь 2021

    S&Box DevBlog Июнь 2021 *Повествование ведется от первого лица, так как текст - это перевод с официального сайта разработчика игры. В этом месяце произошли значительные улучшения UI, ИИ, и анимации игроков Лицевые выражения ситизенов(Taylor) Я добавил набор морф таргетов в модель Ситизена, сосиски теперь с выражениями лиц максимально харизматичные! Это очень похоже на первую версию чего-то, что будет развиваться со временем, пока Макс работает над анимацией. Формы могут быть изменены либо добавлены, если мы увидим, что они не особо подходят под выражения, а сами правила гибкости(морфов) все еще нуждаются в небольшой настройке. Как я уже говорил, система очень гибкая(и с ней чертовски весело играться!) Макс уже настроил несколько простых выражений лица, срабатывающие при выстреле, и мне не терпится увидеть то, что мы можем сделать с ними в будущем! Я также добавил несколько вариаций скинов материалов, а также несколько новых блестящих глаз, в которых используется корректный eyeball шейдер. Анимации Ситизенов(Maxime) Анимграф ситизенов преследует 3 дизайнерские цели: Он должен быть легок в понимании (и тщательно прокомментирован) Он должен быть гибким, и легко «масштабируемым», от простого базового поведения до более приличных форм Он должен расставлять приоритеты, требуя наименьшего количества входных переменных, чтобы получить наибольшее количество функций Это может выглядеть пугающе... но это не так уж сложно для понимания. Прямо сейчас, если вы ходите добавить новый «тип держания»(способ держать что-то, типа оружие) для своего игрового режима, вам нужно скормить его всего в двух позах - одна стоя, другая приседая. Это так просто, как вообще может быть: существующие атаки являются аддитивными (поэтому они будут соответствовать всему), и существующие «перезарядки» не обязательно должны соответствовать вашей позе. Они могут в конечном итоге выглядеть слегка не доработанными, но смешивание будет помогать. Но вы также можете добавлять дополнительные позы (и конечно анимации), чтобы все было более приличным. К примеру, вы также можете поставить «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) При реализации этих систем необходимо найти компромиссы: например, сначала я представлял себе систему, которая будет использовать различные float’ы (сгибание/свертывание/крен/разброс), чтобы вы могли очень точно контролировать позу каждого пальца. Но... на данный момент куча готовых поз «достаточно хороша», и в будущем, возможно, будет разумнее просто позволить людям, которые хотят иметь точный контроль, каким то образом сделать это с помощью кода. По мере того, как расширяется функционал системы, я нахожу недостатки, которые необходимо устранить... ну, на самом деле это просто более приятный способ сказать: «Решения, которые я принимал ранее, теперь мешают мне.» И это лишь вопрос в продолжении повторения их все больше и больше! Эти параметры будут распространяться на другие ветки типов удержания; следующим в моем списке будет переключаться между 2-ручным и 1-ручным оружием(RH)! Генерация FGD(Garry) Писать FGD собственноручно - отстой. Так что, давайте украсим наши классы энтити и автоматически сгенерируем FGD. Это гораздо более приятный способ работы. Мы тратим больше времени на анализ того, как мы работаем в 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 систему лучше и сильнее с каждым месяцем, как вот здесь. Здорово иметь возможность просмотреть весь старый код и очистить его, переключившись на новые возможности. Меню - Навигация Навигация по множеству меню в игре имеет много болевых точек. Поэтому я попытался понять, почему это так. Мы прекрасно ориентируемся на веб страницах каждый день - почему оно отличается? Поэтому я понял, что нам нужно перемещение вперед/назад. Оно должно работать как веб-сайт. Если вы нажмете не на ту кнопку, вы просто нажмете назад, а не нажмете «Домой», и пройдетесь по списку меню, чтобы вернуться туда, где вы были. Предыдущая страница должна вернуться мгновенно, она не должна ничего загружать, она должна просто появиться. Это стимулирует гораздо больше ознакомительных щелчков, потому что у вас есть утешительное знание того, что вы можете просто нажать на боковую кнопку мыши, чтобы вернуться туда, где вы просто были. Я также хотел сделать добавление страниц таким же простым, как в веб-фреймворке. Ни одна из страниц не должна знать друг о друге, они просто должны открывать адреса, и навигатор должен уметь это делать. Поэтому я создал систему вокруг атрибутов. Таким образом, переход по этому URL в навигаторе создаст эту панель, и сделает ее текущей страницей. Последующие переходы по этому URL снова откроют эту панель. Он не будет удален и воссоздан заново. Как вы можете видеть здесь, это также поддерживает переменные. Так что, вы можете перейти к «/game/facepunch.sandbox» и эта панель будет создана, она получит свойство «game_ident» и сможет просматривать информацию об игре. Опять же, оно не будет воссоздавать это каждый раз, а создаст один экземпляр для каждого уникального идентификатора игры, поэтому больше кэширования. Это оказалось гораздо более приятной системой, чем то, что у меня было раньше, и делает систему меню приятной для расширения, а не карточным домиком. Вся эта система, атрибуты, поиск и создание написаны в коде аддона, поэтому она должна служить хорошим примером, как создавать аналогичные системы в ваших играх и аддонах. Система Пати В этом месяце я внедрил систему пати. Она работает так, как вы и ожидали, вы присоединяетесь к пати, овнер пати присоединяется к игре - вся пати присоединяется к ним. Я работал над тем, чтобы сделать все это как можно беспрепятственно. Количество людей в вашем пати в настоящее время ограничено до 16-ти. Это на самом деле не жесткое ограничение, это просто потому, что мне нужно было бы создавать специальный UI для поддержки такого количества людей. Если вы есть владельцем пати, вы получите желтый круг, и сможете управлять участниками, однако вы не можете кикнуть или забанить участников, потому что по какой то причине Steamworks не имеет такой фичи. По видимому, обходной путь состоит в том, чтобы воссоздать лобби, и пригласить всех, кроме этого человека, что одновременно и весело и тупо. Когда овнер создает игру или присоединяется к ней - пати будет следовать за ним. Когда они выйдут из игры - пати будет следовать за ними. Здесь нужно решить еще несколько вопросов. Если есть голосовой и текстовый чат, нам нужно решить, как лучше всего это работает, но основы и неизвестности были проделаны в этом месяце. Навигационная Сетка ИИ - это то, что я не хотел оставлять в качестве запоздалой мысли, поэтому я стремлюсь доказать самому себе, что мы можем иметь законный, достойный, расширяемый ИИ в коде аддона, не прибегая ни к одному из встроенных ИИ в движке. Создание навмеша из C# будет большой частью выполнимого, поэтому я начал работать над ним в начале этого месяца в аддоне под названием ai-lab. Эта игра больше похожа на приложение, в котором я могу попробовать множество различных экспериментальных функций. Выше вы можете видеть, как он строит оптимизированные пути для этих npc, используя навмеш из карты. Мы видим, как NPC успешно перемещается по карте. Это не всегда идеально, особенно когда вокруг есть другие NPC, но этого достаточно, чтобы сказать, что это работает. Это то, с чем мне нравится играться, и я уверен, что в сообществе найдутся люди, которые сделают ИИ с его помощью еще лучше, чем я когда-либо мог. Функциональность присутствует. Обратные Вызовы Сетевых Переменных(Conna) Иногда полезно знать на стороне клиента, когда изменилась сетевая переменная. Вы можете использовать это для обновления UI или сделать что-то еще, чтобы вам не приходилось запрашивать изменения. Начальная VR поддержка(Sam) Я пофиксил VR рендеринг, с момента запуска проекта мы много работали над улучшением некоторых гибких возможностей рендеринга для Source 2, и адаптацией его для работы с тем, что мы хотим, но до сих пор ни разу не проверяли его в VR режиме. Привести VR в хорошее состояние всегда было для нас проблемой, и теперь я рад, что взялся за начальную работу, чтобы была его поддержка. Это был только первый шаг, пока мало что связано с фактическим s&box кодом, поэтому единственное, что вы можете сделать прямо сейчас - это быть пассивным туристом в своих творениях, но это открывает нам возможность поэкспериментировать с ним, и создать что-то, чем каждый мог бы наслаждаться и опираться на это. Меню - Главный Экран(Garry) На главном экране слева появился Ситизен. План состоит в том, что вы сможете настроить своего ситизена с новой одеждой, цветом кожи и т.д. Очевидно, что от них зависит, использует ли игровой режим эти настройки, но я ожидаю, что там, где это имеет смысл, они разрешат их, в обратном случае как минимум перенять цвет кожи и переодеть модель. Но очевидно, что некоторые игровые режимы даже не будут использовать модели игроков ситизенов, поэтому они будут делать все, что захотят. Кнопки быстрой игры создают точно такую же игру, в которую вы в последний раз играли в этом режиме. Это действительно здорово, когда вы развиваетесь, и можете сразу вернуться туда, где вы были. В целом он будет превращен в более мужицкий плиточный экран без всего пустого пространства, но прямо сейчас он показывает то, что нужно показать. Индивидуальные Сети Как насчет того, чтобы вы запустили игру, и вместо того, чтобы присоединиться к выделенному серверу или игре другого игрока, она взаимодействует с веб посредством API Этот API сообщает вам, где находятся игроки, где находятся энтити, как выглядит мир. Ваш клиент создает эти энтити и поддерживает их синхронизацию, постоянно обращаясь с API. Эта идея интересна мне. Это относительно неизведанная территория, у нее есть потенциал для игр с десятками тысяч игроков на одном сервере. Я думаю, что если мы достаточно разберемся в этом, то сможем сделать что-то классное, или по крайней мере побудить комьюнити сделать что-то классное. В этом месяце Рохан исследовал это, добавив класс websocket в s&box. Затем он создал Towns в качестве доказательства концепции. В этой игре вы подключаетесь к удаленному серверу websocket, который затем транслирует данные о местности и объектах. Вы не можете ничего делать прямо сейчас, кроме как летать, но это доказывает концепцию и выделяет несколько областей, в которых мы можем сделать все более плавным, чтобы лучше поддерживать это.
  3. OriginalShaman

    S&Box DevBlog Май 2021

    S&Box DevBlog Май 2021 *Повествование ведется от первого лица, так как текст - это перевод с официального сайта разработчика игры. «Запросы сообщества, много рефакторинга, и немного экспериментов в этом месяце» Изменение тона (Garry) В блогах произойдёт небольшая смена тона, поскольку теперь они больше ориентированы на людей, имеющих доступ к dev preview. Если вы не разработчик, то, вероятно, вы получите кучу неинтересной для вас информации. Может быть, так было всегда, но я всё-таки решил об этом упомянуть. Фреймрейт вьюмодели Энтити анимации на стороне клиента обновлялись от тикрейта сервера. В основном это было заметно только при уменьшении значений host_timescale или тикрейта. Отрисовка Я добавил возможность рисовать в реальном времени. Такое вроде уже было в GMod, но в S&box это работает немного по-другому, давая определенные преимущества. Эти кубы нарисованы с использованием новых методов. Это не модели, они рендерятся вручную на C# каждый кадр. Самое замечательное в Source 2, что нам не нужно хранить их. Процедурный контент может выглядеть как обычные модели. Он может использовать то же освещение и отбрасывать тени, как и все остальное. Пайплайн рендера дает возможность делать прикольные штуки, как, например, рендер картинки до применения эффекта bloom. Эти штуки мы планировали использовать для чего-то вроде игровых виджетов, но с ними очень весело возиться, поэтому я думаю, что мы найдем им кучу применений. Стилистика Мира Мы уверены, в каком направлении будем развивать ситизенов. Мы знаем, чего хотим, знаем, чего не хотим. Тем более со стилистикой мира. Мы долго колебались, пытаясь решить в каком направлении мы хотим двигаться. Хотим ли мы, чтобы она была карикатурной, чтобы соответствовать ситизенам, либо чтобы они были более реалистичной? Вот несколько стилизованных концепций, которые мы попробовали с пропорциями ситизена: В начале этого месяца мы решили взять на себя обязательство и сказать, что мы хотим реализм. Отчасти это было связано с тем, как великолепно ситизен выглядел на уровнях Half-Life: Alyx. Контраст между видом настоящего мира и мультяшным сосискоголовым ситизеном - это именно то, что мне нужно. Выглядит интересно. Мы начали работу над процессом создания мира. Для меня это в новинку, поэтому я попытался всех организовать, чтобы работа каждого человека была прозрачной. Цель этого состоит в том, чтобы исправить проблему с основным контентом. С GMod нам было легче, потому что у нас были все материалы и пропы с Half-Life 2. Сейчас у нас стиль Rust, который не всегда подходит масштабам Source Поэтому мы пытаемся собрать все воедино. На данный момент мы хотим чтобы 3 наших художника сделали все, чтобы мир выглядел также хорошо, как в HL:A. Рефакторинг игрока В этом месяце я провел большой многонедельный рефакторинг системы игрока. Ранее, когда ваш игрок спавнился, это то, чем вы были. Пока технически вы могли контролировать любую энтити самостоятельно программируя систему, она не была предназначена для такой работы. Поэтому в этом месяце я сделал систему Pawn (прим. пер. система пешек). Теперь при подключению к серверу, он может создать энтити (прим. пер. то есть «пешку»), которой вы будете управлять. Сервер может изменить вашу «пешку» в любое время. Данная система лучше подходит для создания игровых режимов, которые не предполагают механики шутеров первого лица. Например, игры, в которых разные игроки могут управлять одним и тем же объектом, или режимы, где необходимо переключение между различными энтити... Или режимы, где игрок не контролирует объекты и является просто летающей камерой. Рефакторинг сети Предыдущая сетевая система была затычкой, которая была сделана на скорую руку, чтобы просто работала. При синхронизации Entity по сети вам приходилось оборачивать ее в EntityHandle, или при синхронизации List в сеть вам приходилось вместо этого использовать специальный класс NetList. Вам также приходилось вручную вызывать функции NetworkDirty. Хуже всего то, что все это было объединено в сеть в виде четырех больших байтовых массивов, и каждый раз, когда сеть была грязной/забитой, мы перестраивали их вручную снова записывая весь класс. Почему 4? Обычная, предсказательная, локальная и локально-предсказательная. При переработке этого я понял, что нам вообще не нужны предсказательные, потому что мы сами справляемся с предикциями. Так что остались только обычная и локальная. Поэтому я решил исправить все эти проблемы, и сделать системы более определенными и строгими. Вот вики страница о том, как теперь они работают. Трассировка Стеков Я добавил отображение трассировки стеков в игровую консоль. Вы можете кликать на один из стеков, и он откроется/переключится в Visual Studio в нужном файле и строке. Хелпер Передвижения Написание своего собственного кода движения немного устрашает. У меня было что-то, что мы бы могли кратко изложить и упростить - это фактический код скольжения. В Source Engine код передвижения не так прост, как “двинься сюда, если можешь, остановись, если не можешь”. Если игрок сталкивается о поверхность, то скользит по ней. Если ударяется о другую поверхность, то скользит и по ней, пока мы не собираемся его толкать в его исходную. Поэтому я извлек все это поведение в вспомогательную структуру под названием MoveHelper. Я хранил его как структуру, потому что он довольно легкий и вообще не ссылается на энтити, поэтому вы можете использовать его для того, что не является энтити. Зависимости Одна из вещей, которая периодически всплывает в наших devpreview чатах в Discord - это тема зависимости. Многие люди хотят сделать аддон, который зависит от другого аддона. Они хотят сделать базовый аддон, а затем сделать дополнения на его основе. Некоторые люди хотят только создавать базовые аддоны. Зависимости в среде выполнения сосут жопу. В S&box я хочу это исправить. Ваша игра должна включать в себя все необходимое для запуска. Она не должна закачивать 8 разных аддонов. Ей не нужно, чтобы люди устанавливали CS:S. Использование наследования и повторное использование кода - это разумное решение. Проблема в том, чтобы это делать в реальном времени. Представим, что аддон, который вы используете - обновляется или удаляется, либо аддон, от которого этот аддон зависит, делает то же самое. В итоге мы имеем целый вагон аддонов, которые не работают. Поэтому официальная рекомендация на данный момент - скопировать и вставить код в свой аддон, чтобы повторно использовать его между проектами. Если вы хотите создать аддон на основе sandbox, загрузите репозиторий и скопируйте то, что вы хотите взять с него. Он не будет оставаться в актуальном состоянии официального репозитория, но это и хорошо - вы контролируете ситуацию. Бильярд (Conna) В этом месяце я работал над бильярдом, и при этом я нашел кучу полезных фич, которые мы могли бы перенести в S&box. Начнем с того, что шары цеплялись за край стола, а не отскакивали, как это должно происходить. Я обнаружил, что в движке порог отскока был захардкожен до скорости 40, что означало, что если бы шары двигались еще медленней, то не отскакивали бы вообще. Мы изменили данное значение, чтобы его можно было изменять для каждой поверхности, так что все шары теперь имеют значение 0.1. Еще одна проблема заключалась в том, чтобы определить момент времени, когда шары останавливаются, чтобы следующий игрок мог сделать свой ход, но Гарри добавил способ ускорить физическую симуляцию, чтобы через определенное время игра могла перематываться вперед. Construct (Louie) В Garry’s Mod — gm_construct начинал свою жизнь как легкая карта, в которую можно быстро зайти и проверить что-либо. Альтернатива ожиданию загрузки d1_trainstation_02 на протяжении 50 секунд. Когда переделываешь карту для S&box, появляется соблазн сделать её больше, добавить новые зоны, горки, гоночные треки, футбольные поля. Но это все идет в разрез с ее первоначальными задачами. Быстрая загрузка Белая комната (для скриншотов пропов) Черная комната (тестирование энтитей в темноте, создание динамического света для скриншотов) Вода (для тестирования энтитей в воде) Плоские участки (для тестирования транспорта и т.д.) Навмеш (для тестирования ИИ) Ступеньки (для тестирование передвижения) Рампы (для того же) В текущей карте мы пытаемся сохранить внимание на этих требованиях. Это карта для тестирования ваших игр, энтити или моделей. И только для этого. Это также возможность для нас работать над стилем мира и наладить внутренние рабочие процессы, чтобы текстурировать и украшать карту как команда, разбивая ее на блоки и передавая по кругу. Энтити Карты(Garry) Есть что-то, что вызывает некоторую путаницу - это наше отношение к энтити карты. Мапперы, получившие ранний доступ находятся в некотором замешательстве из-за того, что I/O система работает не так, как они ожидали. В данный момент у нас есть уникальная возможность освободить движок от его 20-ти лет итераций. Удалить старые энтити, дать новым более логичные имена, упростить всем работу. Input/Output система теперь полностью на C#. Энтити, которые пытаются работать на стороне C++ ничего не делают. Это означает, что нам нужно удалить C++ энтити, и переписать их на C#. Вот чем мы занимались на этой неделе. Это не столько развлечение, сколько кураторство. Когда мы конвертируем энтити, можем ли мы сделать их лучше, можем ли добавить функции, которые означают, что мапперам не нужно создавать веб систему ввода-вывода, чтобы что-то сделать. Так что, если вы находитесь в devpreview, создаете карту, а энтити ведут себя не так, как вам хотелось бы.. пожалуйста поделитесь этим с нами здесь. Если вы создадите образец карты, и прикрепите его, как, например, это сделал этот юный разработчик, это очень поможет ХП - Число с Плавающей Точкой Когда я спросил в Discord сервере, следует ли мне изменить значение здоровья с int на float (прим. пер. Int - тип данных, отвечающий за представление целых чисел, то есть 1, 2, 3, float - за представление дробных, то есть 1.23, 45.6), это вызвало бурю негодования. Я не понимал, почему, поэтому спросил. Оказывается, люди думали, что это будет означать, что здоровье будет отображаться на HUD, например, 98.34534f. Так что здоровье сейчас дробное. На мой взгляд, это более удачное решение, поскольку дробное добавление или вычитание за тик является довольно распространенным явлением, и становится намного сложнее из-за того, что оно является int. Ошибки компиляции Наш генератор кода теперь может показывать ошибки и предупреждения, если вы напортачили. Я думаю, что в будущем мы могли бы расширить функционал, чтобы он стал даже полезнее.. Например, в случаях, когда вы получаете доступ к клиентским штукам в серверных функциях. Динамические Меши (Layla) Я добавил поддержку создания и обновления буферов вертексов и буферов индексов в GPU. Их можно использовать для создания мешей через код. Данные буфера могут быть установлены и обновлены в любое время, произойдет блокировка данных в GPU, что позволит произвести запись. Это позволяет нам создавать сетки со многими треугольниками в среде выполнения, т.е. кодом Я использую этот API для создания воксельной песочницы. Вы можете опробовать его прямо сейчас, мы будем работать над режимом многопользовательской игры. Улучшения производительности (Garry) ХРАНЕНИЕ ПРЕДИКЦИИ После того, как произойдет предсказание(на стороне клиента), мы делаем бэкапы всех предсказанных переменных для всех предсказаний энтити. Это делается для сравнения результата клиентской стороны с результатом сервера, когда сервер просчитывает этот тик, и отправляет все сетевые переменные обратно, таким образом мы можем принять меры, если переменные различаются. Кто-то в discord упомянул, что с тонной предикций энтити работает хреново, поэтому я сделал оптимизирующий проход и ускорил всё в 40 раз, так что теперь даже в vprof ничего не регистрируется. КОМПИЛЯЦИЯ При редактировании игрового режима и горячей компиляции этих изменений мы также компилировали базовый аддон. Я исправил это, так что теперь ему нужно скомпилировать только то, что вы изменили. В лучшем случае, это происходило в 2 раза медленней, но исправление ускорило процесс в 8 раз.. В худшем случае это происходило за секунду-две, но теперь оно сокращено до долей секунды и чувствуется в разы лучше. ФАЙЛОВАЯ СИСТЕМА Я нашел проблему в том, как Zio выполнял поиск файлов в общей файловой системе. В одном из моих тестов поиск в нашей основной папке для “*_c* занял более 10 секунд В live версии вызов Assets.LoadAll на клиенте обычно занимал 3-4 секунды. Теперь этот показатель снизился до 0.07 секунды. В целом, данное исправление ускорило загрузку каждой карты более чем на 6 секунд. Статистика Пакетов Я начал отслеживать время проведенное в играх в начале этого месяца. Поэтому у нас есть своего рода таблица лидеров - как для игр, так и для карт Со временем, она перестанет выглядеть, как дерьмо, но вы можете углубиться в свою игру или карту, чтобы увидеть статистику использования за день. Одна из причин, по которой мы хотим отслеживать эти статистические данные, заключается в том, чтобы монетизировать их.. чтобы люди не делали контент просто так. Идея заключается в том, что мы можем брать лучшие игры каждый месяц, и выплачивать за них в зависимости от их позиции, или игровых часов/игровых часов в пределах часа. Это все будет уточнено позже, но для меня важно, чтобы на этот раз мы позволили разработчикам каким-то образом извлечь выгоду из их работы. Если нет, то почему бы вместо этого не приложить дополнительные усилия для создания игры в Unity? Одежда Ситизенов (Taylor) Вместе с тем, как Макс(Maxim_Lebled) объединял CitizenV2 в этом месяце, мы пересматривали одежду ситизенов. Старые пару стилей не очень понравились нам, вручную нарисованный вид выглядел очень резким рядом с чем-то с реалистичным или грубым стилем. Обновленный стиль - это все о реалистичных материалах на мультяшных пропорциях граждан. Сшитый на заказ костюм должен выглядеть так, будто он сделан из ткани, а их умные туфли должны выглядеть так, будто они сделаны из кожи. Вот беглый взгляд на обновленный костюм: Мы стремимся сделать все как можно более модульным, предметы могут быть использованы повторно во множестве различных нарядов, и должны быть окрашиваемыми, где только возможно. Физика со Значением Шага по Времени(Garry) Я добавил пару физических параметров, чтобы помочь Конне с бильярдом У него были проблемы с шарами, проходящими через другие шары с высокой скоростью, поэтому я добавил Global.PhysicsSubsteps, которые вы, вероятно, захотите изменить только в определенных обстоятельствах. Я также добавил Global.PhysicsTimescale. Если вы подключите его к MathF.Sin то получите хороший лагучий enumerator ГМодовского сервера. Итоги Хороший стандартный месяц в этом месяце. Ничего удивительного, ничего слишком блестящего - просто сортировка говна, с каждым днем его становится немного меньше. В течении следующего месяца я бы хотел, чтобы у нас было больше направлений в стилистике мира. Я бы хотел, чтобы карта construct была в значительной степени выполнена, и в идеале не использовала никаких ассетов из Rust. Я бы хотел, чтобы система тусовок работала, и тусовка следовала за хостом в игры. Я хотел бы автоматически скрывать игровые режимы, которые генерируют ошибки компиляции. Я также хотел бы, чтобы работал VR, даже если вас от этого тошнит. Я также очень хотел сделать бы пару собственных игровых режимов, и добавить больше вещей в DM98. Мы должны сбалансировать то что хотим сделать, с тем, что нам нужно сделать для сообщества, потому что этот список не сокращается сам по себе, но проверка собственной игры это достаточно хороший способ добраться до сути фундаментальных проблем.
  4. OriginalShaman

    S&Box DevBlog Апрель 2021

    S&Box DevBlog Июль 2021 *Повествование ведется от первого лица, так как текст - это перевод с официального сайта разработчика игры. «Мы провели dev превью и потратили целый месяц на уборку беспорядка» Dev Превью(Garry) Самое важное событие этого месяца заключалось в выдаче доступа некоторым разработчикам. Это где-то меньше 100 ключей. Это было ВЕЛИКОЛЕПНО для нас, показать на чем мы должны сконцентрировать энергию, чего не хватает, что мы портим. Не только в плане игры, но и в плане поддержки разработчиков, документации типа Wiki, дискорда, отчетов об ошибках, просьб о добавлении новых фич и баг репортов. Мы смогли привести все это в порядок, так что мы можем строить на этом будущее. Само собой, теперь нас донимают насчет ключей, поэтому мы раздаем ключи по номинациям. Люди, имеющие доступ, номинируют тех, кто должен получить ключи. Само собой это обречено на предвзятость, нечестные выборы, борьбу за популярность, не лучшая реализация, но пока что оно служит своей цели - передать ключи в руки способных людей. Наконец, хочу подчеркнуть, что это dev preview. Здесь не во что играть. Мы работали над основой последние 4 месяца. Поэтому, если ты игрок и хочешь поиграть в GMod2, то это не для тебя, не ожидай многого - ты разочаруешься, если получишь доступ. Масштабирование (Layla) Я добавил инструмент масштабирования в режим песочницы. На самом деле я изначально забыл добавить проверку, чтобы он не работал на игроках, потому что я посчитал, что это просто не будет работать. Оказалось, все работает без всякой надобности кодить что-то особенное для этого - поэтому я оставил это как есть Dev Сайт(Garry) Я потратил пару недель в апреле, настраивая девелоперский сайт s&box, который позволяет людям загружать их игры и карты. Он, все еще, очевидно, находится в разработке, здесь есть много над чем подумать, и одна из причин пригласить разработчиков заключалась в том, чтобы заставить нас подумать об этом в самом начале. ОРГАНИЗАЦИИ Мы организуем ассеты в организации. Это значит, что конфликт с названиями не произойдет. Так, если вы хотите поиграть в flatgrass от facepunch, то можете открыть консоль и ввести «map facepunch.flatgrass». Если же хочется поиграть в sandbox от facepunch, то можно ввести в консоль «gamemode facepunch.sandbox». В реальном случае не нужно будет вводить это в консоль (потому что есть UI), но в игре это работает так. КОНТЕНТ Можно добавлять контент в свою организацию. Под этим подразумеваются пока лишь карты и игровые режимы, но в будущем это будет затрагивать и кучу других вещей, которые пока у меня лишь в планах. Важное замечание: в системе игровые режимы и карты - одно и то же. Конечная цель заключается в том, что если вы создаете карту и загружаете ее в эту систему, то сможете добавить ачивки и смотреть статистику игры так, как это было бы в игровых режимах. Контент также может быть загружен множеством разных способов. Я представляю, что это будет развиваться со временем, к примеру, предоставление разделенных загрузок хоста и клиента. Дистанционные карты Это заняло несколько дней, но я заставил дистанционные карты работать. Так что, если вы пытаетесь загрузить карту которой у вас еще нет, она запросит бэкенд, и спросит об этом. Затем он скачает и загрузит карту. Никакой ручной загрузки, никакой установки, просто игра. На самом деле это настолько быстро, что вы даже не знаете, что это происходит большую часть времени. Когда вы думаете о загрузке карты, то вы вероятно думаете о том, как вы лет 10 назад ждали минут 20, пока карта загрузится с сервера со скоростью 30 кб/с. Это всё не то. Папки Ассетов У Valve была следующая система ассетов: /content/alyx/models/gman.mdl <-- исходные файлы /game/alyx/models/gman.mdl_c <-- скомпилированные файлы И я изменил ее на более аддоно-подобную. /game/addons/sandbox/content_src/models/balloon.mdl /game/addons/sandbox/content/models/balloon.mdl_c Что-ж, в этом месяце я решил что она(система) тоже сосет, так что теперь она такая. /game/addons/sandbox/models/balloon.mdl /game/addons/sandbox/models/balloon.mdl_c Логика здесь примерно такая. Нахождение ресурсов в отдельных папках определенно имеет свои преимущества. Оно создает четкую грань между тем, что должно быть упаковано, и что не должно. С другой стороны, появляется ещё одна сбивающая с толку вещь, которую необходимо объяснить. Это ещё одна папка, о которой нужно знать, но гораздо приятней хранить связанные друг с другом файлы вместе. Ведь понятно, какие файлы исходные, а какие - скомпилированные, потому что скомпилированные файлы заканчиваются на _c Поэтому я решил, что это для нас путь вперед Культурный Конфликт Когда люди начали играть, произошло нечто забавное, о чем я бы никогда подумал. У игроков из СНГ запуск прерывался чёрным экраном. У них не работала обработка таблиц со стилями. Я не учёл то, что работа функции float.Parse зависит от языка. На английском языке ожидаются дробные числа с точкой, например “1.23”, в то время как на русском вместо точки используется запятая: “1,23”. Я это починил и теперь наши русские разработчики могут играть без проблем. Citizen V2(Maxime) Вместе с Тейлором мы доработали модель Гражданина, чтобы заложить добротную основу не только для нас, но и для всех, кто хочет создавать одежду, анимации и т.д. для этих забавных ребят. Мы взяли оригинальную модель и переработали ее с нуля, чтобы лучше воспользоваться преимуществами Source 2, с совершенно новыми мешами и наборами материалов. В основе лежит все тот же персонаж, только более отполированный и функциональный.. Хотя визуальные изменения незначительны, большое количество изменений находится “под капотом”. Здесь совершенно новые риги с намного более плавной развесовкой и процедурными хелперами. Новой версии пока что нет в preview билде; Она заменит старую где-то в мае. Вы можете взять текущий исходный файл здесь. Если вы уже начали работу над одеждой для первой версии модели, то нужно подправить ее под новые привязки позы. Имейте ввиду, что s&box находится в стадии активной разработки, и мы не можем гарантировать, что с очередной обновлением ничего не сломается! Левел Дизайн и Творчество(Louie) Я потратил большую часть месяца на создание пары визуально приятных карт, пытаясь помочь закрепить стиль наших уровней, одновременно предоставляя немного разнообразия в дизайн уровней. Эта карта является одной из самых больших, которые мне доводилось делать. Я старался делать открытые и закрытые пространства, как в шутерах девяностых. Это помогло избавиться от некоторых идей для интерьеров научных / складских творческих ассетов, и также, я чувствую, что хотя оно и не последнее, но хорошее направление для улучшений. Это карта для дезматча, которая была показана в последнем блоге. Она основана на бруталистской архитектуре, что позволило ускорить создание карты, так что нам не пришлось весь день наблюдать ее без текстур, но также она выглядит скучно, поскольку она очень серая. Это, пожалуй, не то направление, в котором мы хотим двигаться. Горячая Загрузка Анимграфов(Layla) Горячая загрузка анимграфов не работала, но теперь работает. Взрывы Данные взрывов могут быть настроены в ModelDoc, если энтити - проп, он будет использовать данные чтобы приложить силы и нанести урон в пределах радиуса. Это также может пригодиться вашим кастомным энтити. Ползунки Свойств Свойства значений в инструментах раньше были без ползунков, теперь можно зажать и перемещать курсор возле окна значения, чтобы поменять последнее, как у большинства других инструментов. Тестовые Игры(Conna) Меня пригласили в Facepunch в начале этого месяца, и с того момента я пытаюсь сломать игру. Целью было тестирование API и нахождение каких-либо проблем или мест, которые можно было бы улучшить для игроков, желающих создавать всякого рода игры. Концепт Арт(Howie) Энтити Освещения(Layla) Создать динамический свет проще простого: в нашем распоряжении есть точечные, направленные и ортографические источники света. Это также просто, как создание энтити и настройка его световых свойств. Динамический свет также может быть использован для фонариков. Итоги(Garry) Это действительно ощущается как ранняя разработка GMod. По утрам исправляются баги, по вечерам - что-то улучшается. После сна всё по-новой. Каждый день что-то становится лучше. Какое-то время мы продожим так работать. Будем чинить баги, направлять запросы и экспериментировать. Я уже нашел немного довольно больших вещей, которые я хочу исправить и переработать, чтобы сделать все проще для всех в будущем. Это лучший период разработки для меня. Люди развлекаются от разработки, никто не угрожает рефандом, если я что-то не поменяю обратно. Все показывают, что они сделали - как волшебники показывают друг другу фокусы.
  5. OriginalShaman

    S&Box DevBlog Март 2021

    S&Box DevBlog Июль 2021 *Повествование ведется от первого лица, так как текст - это перевод с официального сайта разработчика игры. “Хедлайнерами этого месяца являются предикция и загрузка аддонов, но мы сделали массу вещей” Ввод курсора (Garry) Layla играется с какой-то штукой, для которой нужен был старый ввод курсора в стиле контекстного меню GModа, поэтому я ему его сделал. Присоединение к игре друга Играть с друзьями должно быть просто. В этом месяце я написал кучу всего в серверном лобби и RPC, чтобы действительно легко присоединяться к игре друга. Я уже упоминал об этом в предыдущих блогах, но думаю, что это важный момент. Если вы создадите игру, то люди смогут присоединиться. Вам не нужно будет играться с брандмауэром, оно просто будет работать. Предикция У меня вся предикция работает. Я откладывал это на пару месяцев, потому что думал, что это будет заноза в заднице, в конце концов это заняло 2 дня и было не так уж плохо. ЧТО ТАКОЕ ПРЕДИКЦИЯ В общем, по-быстрому объясню как предикция работает в Source. Клиент создает пользовательскую команду, которая представляет собой структуру, описывающую входные данные игрока. Основные данные, такие как кнопки и углы прицеливания. Он посылает эту пользовательскую команду на сервер, и сервер перемещает игрока, стреляет из пистолета и т.д. Во время отправки на сервер он также запускает его локально, поэтому все, что вы делаете, происходит мгновенно. Когда сервер запускает свою версию и мы получаем результаты, мы сравниваем их с результатами нашей предикции. Если все получилось, то игрок должен находиться в одном и том же месте, оружие должно иметь одинаковое количество патронов и т.д. АТРИБУТЫ Любые переменные, которые вы используете во время предикции, должны быть помечены как предикция. Если переменные не помечены как предикции, это может привести к дальнейшим ошибкам предикции, потому что клиент не сможет получить хорошую отправную точку, где он синхронизирован с сервером. Здесь нет ничего сложного, это как и любая другая сетевая переменная. ПЕРВЫЙ РАЗ Если есть ошибка предикции, клиент может вернуться назад и пересчитать несколько кадров назад, чтобы вернуть все на места, где оно должно быть. Когда предикция рассчиталась, вы не хотите делать такие события, как повторное воспроизведение звуков. Для этого мы создали защиту от дурака Predict.FirstTime. Оно всегда имеет значение true на сервере, но на клиенте принимает значение true лишь в том случае, если кадр прогнозируется впервые. ОТКЛЮЧЕНИЕ Когда ты стреляешь, проигрывается звук. Этот звук прогнозируется локально, но когда кадр воспроизводится сервером, звук проигрывается всегда. Мы немного подшаманили за кулисами, чтобы предотвратить проигрывание этого звука снова, если он был спрогнозирован локальным клиентом. Но иногда ты воспроизводишь какой-то код только на сервере.. Ну, например, если ты делаешь выстрел и кто-то помирает, то наверное стоило бы звуку проиграться для всех - в том числе для локального игрока - потому что они не могли спрогнозировать этот звук. В таких ситуациях используется Prediction.Off() чтобы выключить предикцию. Он создает IDisposable, с которым легко охватить его. Мне не очень нравится этот синтаксис, потому что мы все-равно должны проводить проверку, воспроизводится ли код на сервере, поэтому синтаксис может измениться. Обновленный Эффект Свечения(Sam) Гарри хейтил L4D-подобный эффект свечения, который был по дефолту с движком, поэтому я переписал его, вдохновляясь нашим Facepunch.Highlight эффектом свечения меша, выводящемуся в HDR, потому само свечение получается естественным образом от интенсивности контура, что хорошо помогает ему выделиться. Весь эффект достаточно легко настраивается, можно указать, аддитивен или прозрачен ли он, и сейчас он распознает глубину, видимую и скрытую часть свечения можно изменить, чтобы, к примеру, предметы, которые держатся физганом становились частично видимыми, когда закрыты каким-либо препятствием. Чтобы свечение так работало, нужно просто чтобы видимые и скрытые части имели одни и те же параметры. Можно сделать кучу всякого интересного с этим эффектом, он позволяет разработчикам создавать что-то неожиданное, например, если ты делаешь игровой режим в стиле Хищников / Зомби, ты можешь запросто использовать его чтобы создать что-то вроде волхака. Улучшения ModelDoc(Layla) В этом месяце я сделал еще несколько улучшений в ModelDoc. ModelDoc - инструмент, используемый для создания/импорта моделей в Source 2. МНОЖЕСТВО БИНД ПОЗ По умолчанию в ModelDoc FBX импорт поддерживает только одну бинд позу. И это вероятно хорошо, если вы делаете свои модели на заказ.. Но если вы, как мы - импортируете модели из других мест, вы столкнетесь с проблемами. ViewModel Арбалета из Rust был сломан из-за этого, теперь он пофикшен. VIEWMODEL РЕЖИМ Теперь есть режим камеры “ViewModel”, который просто блокирует обзор на нули, это полезно для того, чтобы увидеть, как выглядит ваш viewmodel в игре, и если вам нужно будет его сместить. Вероятно есть и другие полезные режимы камеры, которые я могу добавить в будущем. ИМПОРТ SOURCE МОДЕЛЕЙ Я добавил поддержку для импорта моделей из первого Source. Конечно спорно, должны ли мы вообще включать это в S&box, потому что нам хочется поощрять создание новых ассетов, а не портирование старых. Однако, я вижу это так: люди все равно будут портировать старые ассеты и я бы не хотел, чтобы люди качали какие-то старые паленые MDL декомпиляторы ФИКС PhysicsHullFromRender Раньше это не работало. Не визуализировалась или не рассчитывалась информация о массе, потому я это исправил. EntityIO(Garry) Каждый, кто достаточно глубоко погрузился в маппинг с использованием Hammer, наверное знает о Entity IO. Это система, которая позволяет связать выходы энтитей со входами других энтитей. К примеру, можно вызвать выход на кнопке, названной “OnPressed” ко входу света названного “Toggle”, и кнопка будет включать или выключать свет. В этом месяце я перенес это в C#. Чтобы создать вход на энтити, нужно просто отметить его с помощью атрибута “Input”. И чтобы запустить выходы, нужно просто вызвать “FireOutput”. Здесь есть чего еще доработать, но все работает так, как вы и ожидали. ПЕРЕДАЧА ФАЙЛОВ Изначально, здесь не было никакого кода для передачи файлов с сервера на клиент при его подключении, поэтому я чутка накодил. Этот метод получения файлов с сервера через сетевой сокет игры не идеален, но работает неплохо, как метод крайнего случая. Идеальный сценарий в релизе - это загрузка файлов в аддонах, или скачивание с вебсайта. Таким образом мы сможем поддерживать несколько загрузок одновременно, и все будет грузиться гораздо быстрее. Это то, как оно должно работать в 99% случаев и обязательно будет поддерживаться. Но мне кажется, что загрузка с сервера важна при разработке аддона. Если я делаю игровой режим и люди на моем сервере не хотят грузить аддон со свежими изменениями - они должны получить их в реальном времени. И это то что происходит сейчас. Если я меняю таблицу стилей на моем сервере, клиенты будут оповещены об этом, и в итоге осознают, что у них нет того нового файла, и затем загрузят его с сервера. Когда они загрузят его, он будет загружен “на горячую”, и все будет снова синхронизировано. Иметь возможность редактировать в реальном времени имеет огромную разницу. Таким образом преобразуется процесс разработки. Игроки на сервере становятся лабораторными крысами, реагирующими на каждую перемену разочарованием или радостью. Разработка превращается в игру. Асинхронная Стратегия Какое-то время я пытался понять, как же работает асинхронизация, но затем начал разбирать все это по полочкам на этой неделе. Вот вам FAQ. ЧТО ТАКОЕ АСИНХРОНИЗАЦИЯ Это позволяет воспроизводить вам функции асинхронно Таким образом, если вызвать функцию сверху, она будет воспроизводиться до await, затем <секунд> секунд позже она воспроизведет Toggle(). Может быть, это не так примечательно само по себе, но можно связать эти вещи. Также они могут возвращать значения, таким образом можно ожидать значение из функции - что довольно-таки полезно для вещей, вроде вызова API. ЭТО МУЛЬТИПОТОЧНОСТЬ? По умолчанию, это сделано так что это будет воспроизводиться на основном потоке, но возможно воспроизводить задачи и на других потоках. КАКОВА СТРАТЕГИЯ? Думая о задачах для аддонов, мы должны подумать о паре вещей. Во-первых, если использовать Задачу на энтити, и энтити удалена, что должно произойти. Я хочу обуздать это хорошим и автономным способом. Я не хочу страдать с CancellationTokens и прийти к тому, что асинхронизация станет невыносимо долгой. Также, если вы воспроизводите задачу и затем отключаетесь с сервера, задача должна отмениться. У нас не должна оставаться куча задач, воспроизводящихся в меню после отключения от игры. Существующие по умолчанию функции типа Task.Delay воспроизводятся в реальном времени, а мы, вероятно, хотим использовать внутриигровое время по умолчанию. И в конце концов, мы хотим иметь возможность возобновиться в какое-то конкретное время. Ну, например, может вы хотите подождать до начала следующего кадра, или до конца, или до следующего тика, или на следующий кадр физики. И КАК С ЭТИМ ДЕЛА? Мне кажется, у нас есть неплохое, сбалансированное решения для всех этих вещей. Использование Игроком В этом месяце я реализовал использование кнопки игроком. Я говорю о кнопке Use у игрока, но в целом она универсальна, так что технически NPC тоже могут ее использовать. Чтобы сделать объект пригодным для использования, вы просто подключаете этот интерфейс. Автозаполнение Я добавил автозаполнение в стандартное поле “TextEntry”. Он также может иметь историю на базе файлов cookie, так что история сохраняется между игровыми сессиями. Я сделал это для консоли, но оно доступно для использования всем.. Реализация Энтитей Вместо использования нативных энтити, нам лучше всего перенести их в C#. Такое чувство, что у нас есть возможность здесь, начать с чистого листа, удалить и очистить все, чтобы сделать их более осмысленными Я не думаю что у Valve была эта роскошь, я предполагаю, что они должны поддерживать демки, сохранения, карты десятилетней давности, они не могут проебать это все. Поэтому в этом месяце в качестве первого шага, я конвертировал энтити дверей, кнопок, и освещения в C#. Это раскрыло еще больше энтитей, которые я бы хотел перенести в C#. Нативный код имеет “MOVETYPE_PUSH“ систему, где энтити(как двери) двигаются, но и толкают энтити. Они могут убивать энтити, которые блокируют путь и т.д. Это система, которая нам нужна, потому что мы действительно не хотим делать такие вещи, как контроллеры игроков / npc базирующиеся чисто физически. Но я также думаю, что это система, которую нам лучше реализовать на C#, так что мы можем манипулировать ею немного легче. Из чего-то такого, что появилось, было платформами и лифтами. Эти вещи движутся весьма предсказуемо на уровне кода, но у них нету предикции. Я думаю мы можем исправить это, чтобы сделать их очень плавными. Голосовой чат(Layla) Голосовой чат это нечто, что уже было в Source 2, но как и большинство фич - если оно связано с геймплеем, в идеале мы хотим перенести это в C#, чтобы начать с нуля и иметь полный контроль над этой фичей. Игрок может записывать вход с микрофона, который передается на сервер, эти две функции ниже являются виртуальными функциями в игровом режиме. Существует серверная функция для входящих голосовых данных, и ваш игровой режим может затем решить, кто будет их слышать Затем есть функция на стороне клиента для голосовых данных, отправленных сервером. Здесь у вас есть возможность делать с ними что угодно, прямо сейчас это базовый вывод аудио, но когда мы углубимся в звуковую сторону движка, я уверен, что будет много классных фильтров, которые мы сможем использовать для воспроизведения звука. Рендер захвата сцены Мы хотели получить способ рендера 3D объектов на UI. Можно разделить это на две части. Первая часть заключается в том, что сцены, которые ты хочешь отрисовать на UI, в идеале, не должны существовать в основной сцене, ведь будет не очень круто спавнить энтити в основной мир и прятать его лишь ради того, чтобы отрисовать его на UI Вместо этого, новые миры - сцены могут быть созданы и объекты сцены добавлены к ним. Объекты сцены являются по сути тем, что вся игра использует для рендера мира, поэтому их можно просто использовать без расходов на создание новых энтитей. Вторая часть заключается в том, чтобы иметь возможность рендерить мир сцены на цель рендера. Как только есть цель для рендера, эта текстура может быть просто отрисована на UI Поскольку у нас есть доступ к объектам сцены, они также могут быть помещены в основной мир сцены. Представьте себе бильярдный стол: вместо создания по энтити на каждый шар, можно просто добавить их как объекты сцены и они будут рендерить модель также, как если бы это была энтити, но без всей лишней херни, которая вам не нужна. Эти объекты моделей сцены могут быть анимированы, но в данный момент API поддерживает только настройку костей. В следующем месяце я сделаю так, что их можно будет анимировать с помощью animgraph. Загрузки игровых режимов(Garry) Процесс установки - отстой. Представь, если бы тебе пришлось устанавливать вебсайт, который ты хочешь посетить. Такое мое отношение к игровым режимам и картам в S&box. В этом месяце у меня получился довольно жирный кусок работы по загрузке игровых режимов. Теперь игра будет автоматически загружать их с GitHub. Это веселый этап для меня, потому что это значит, что мы можем начать делать всякое и пробовать впечатлить друг друга. По большей части, это невидимо для конечного пользователя, в такой степени, что можно ввести “gamemode dm98” в консоль и затем “map testmap” и она автоматически установит dm98 и игра начнется в течение 5 секунд. Очевидно, загрузка до абсурдности быстрая, поскольку игровой режим весит только 500КБ, но держите в уме, что в этот маленький период загрузки отправляется запрос гитхабу на последнюю версию, загружается, разархивируется, компилируется и, наконец, запускается. МАСТЕРСКАЯ Разговоры о GitHub могут заставить людей волноваться, что мы больше не используем Workshop. Мы все еще собираемся использовать его, но как один из многих вариантов. Хотите ли вы загрузить игровой режим в Workshop, либо на Github, либо на свой собственный веб-сайт - не имеет значения, пока мы можем его скачать Баги, выявленные в игре Ранее в этом месяце, после того, как я расправился с предикшеном, мы немного протестировали игру, чтобы убедиться, что мультиплеер работает. Технически, в основном, он работал, но были и некоторые очевидные баги. ERROR МОДЕЛИ Много моделек были еррорками, потому что клиент не мог найти настоящие модели. Так случилось потому что модельки занетворчены как ResourceID, которые, в свою очередь, являются хэшами файловых имен и типов. Клиент имеет ResourceID, только если ресурс загружен. Я нашел кучу кода сетевого прекэша в движке, но он не был ни к чему привязан, поэтому я полностью снес его и перенес в C#. Это не то, о чем программист должен волноваться. Когда ты устанавливаешь модель для энтити, она добавляется в таблицу прекэша сети автоматически, которая, очевидно, отправляется на клиент, позволяя ему понять, что это за модель. ЧИТЫ Люди имели возможность использовать читы. В частности, Layla летал повсюду и спавнил ботов. Я попытался исправить это пару раз и у меня не вышло, потому все закончилось переписыванием большей части системы консольных команд. На самом деле, у нас было две системы консолей. Когда мы делали игру на Unreal Engine, я сделал нашу собственную систему консоли, которая была единственной системой консоли, которую мы использовали. Она в значительной степени отражала работу системы Source консоли. Теперь, когда мы используем Source 2, это имеет меньше смысла. Мы все еще хотим использовать консольные команды и консольные переменные, но единственная настоящая система консоли должна быть родной. Вот как это работает в данный момент. СМЕЩЕНИЕ ЭНТИТЕЙ У нас какое-то время был баг, когда клиентская энтити была смещена относительно серверной. Это можно наблюдать на картинке выше… зеленая сетка - серверная физика. Серебряная мусорка находится в самом конце карты для сервера, но для клиента она находится прямо перед игроком. Пока что, это нераскрытое дело, ожидающее расследования. Улучшения CSS Рендеринга(Sam) Я потратил довольно немало времени чтобы вернуться к элементам пользовательского интерфейса; рефакторинг; оптимизация и завершение некоторых незакрепленных итогов, это начинает казаться почти таким же, как если бы вы могли проектировать с полной силой CSS браузера сейчас, без гигантской массы фактического ношения браузера. Для каждого элемента мы делаем кучу тестов, чтобы убедиться, что все соответствует ожидаемому результату. CSSBOX CSSBox контейнер был почти целиком переписан, и границы, и сам “box” имеет очень хорошее, гладкое аналитическое субпиксельное сглаживание, оно выглядит особенно хорошо, когда оно анимировано, или движется динамически как в HUD, где есть динамическое перекрестие. РЕНДЕРИНГ ТЕКСТА Текст, включая рендеринг эмодзи, теперь очень четкий, раньше мы использовали некоторые хитрости, чтобы сделать его четче. И вы можете все видеть тесты что у нас есть для него: ГРАНИЦЫ КАРТИНОК Я также реализовал 9-сегментное масштабирование, вы можете использовать изображение в качестве границы вашего контейнера, и украшать его так, как вам нравится, игры типа MMO и RPG отлично используют его, вы можете спроектировать его так же, как и с CSS border-image параметром. Для референса, чтобы помочь визуализировать, используемое изображение в качестве 9-сегментной текстуры для тестирования границ выше выглядит примерно так: СООТВЕТСТВИЕ Даже когда мы добавляем больше поддерживаемых элементов, все эти элементы должны как можно лучше соответствовать W3C стандартам, большая часть знаний, которыми уже обладают люди, должна легко переводиться даже при составлении сложных эффектов при проектировании их пользовательского интерфейса на S&box, с тем преимуществом, что мы не несем на спине целый браузерный пакет. Карты Детматча(Louie) Я начал в Facepunch с экспериментов над картами для детматча, которые, надеюсь, выйдут достаточно универсальными, для использования в нескольких разных игровых режимах. Масштаб Карты Нам начала встречаться проблема с некоторыми ассетами из Rust, так как они имеют неоднозначные размеры. Большая часть ощущений от Source движка это неоднозначный масштаб для всего. И для того чтоб помочь нам с этим, я сделал карту для референса размеров при создании карт и моделей. Карты тестов объектов Гарри хотел несколько карт для тестирования кнопок, дверей, двигающихся платформ и пуш-тригеров. Эти карты были созданы до того как энтити были внедрены и были использованы для тестирования их во время разработки. CodeGen Оптимизации(Garry) При компиляции аддонов мы применяем поверх них codegen. Это модифицированная версия Source Generators и она добавляет кучу трюков которые мы используем с RPC и сетевыми переменными. Это занимало примерно 4 секунды на нашем базовом аддоне (у которого очень много файлов). Я переписал его и теперь это занимает 0.1 секунды. Виртуальный Скроллинг Когда у тебя огромный список чего-то в UI, ты часто сталкиваешься с проблемой что получается слишком много панелей. И не важно на сколько быстрая у тебя UI система, количество панелей всегда станет тем что сломает её. Виртуальный скроллинг решает это показывая только те панели что видимы. По мере прокрутки, панели что уходят из поля зрения - разрушаются, а те что появляются - создаются. Так что вместо создания панелей ты добавляешь данные в список. Потом ты просто говоришь какой тип дочерней панели создать. Итоги Еще один хороший месяц прогресса, хорошая скорость. Все обретает форму, где я хочу всё начать. У нас накопился большой список фич и ошибок, который расширяются каждый месяц, но самая большая оставшаяся задача - это серверная часть для регистрации игровых режимов/карт. Думаю, я смогу сделать это за день или два. Я говорю это в каждом девблоге, но в этом месяце я немного раздвоен по поводу выпуска раннего доступа. Часть меня хочет в течение месяца воздержаться и возиться с созданием разных игровых режимов. Если мы откроемся, я не думаю, что смогу это сделать, потому что надо будет работать над документацией, будут запросы фич и отчеты об ошибках. Но с другой стороны, будет больше людей, с которыми можно будет поиграть и поделиться. Думаю, я уговорил себя. Мы будем раздавать несколько ключей в Апреле.
  6. OriginalShaman

    S&Box DevBlog Февраль 2021

    S&Box DevBlog Февраль 2021 *Повествование ведется от первого лица, так как текст - это перевод с официального сайта разработчика игры. В этом месяце мы работали над системами декалей, свойствами поверхностей, звуками и тонной других вещей. Физика Упругости(Garry) Возясь со свойствами поверхности, я изо всех сил старался сделать объекты упругими. Если бы я хотел сделать мяч супер упругим, я мог бы увеличить его эластичность, но если бы он ударился о что-то другое, что было упругим, он выстрелил бы со скоростью миллион миль в час. Мне удалось подправить работу свойства эластичности, чтобы заставить упругость работать так, как мы хотим. Я не знаю, насколько это физически точно, но это позволяет нам делать упругую срань. Декали По соображениям производительности декали являются довольно захардкожеными, и их трудно заставить работать по пути моддинга как мы хотели. В этом месяце я придумал способ сделать их немного более модульными, и разработал API для их размещения. Так что теперь декали определяются как свободные файлы, как материалы. Они могут иметь несколько текстур, и вы можете определить очевидную срань как их размер, поворот, и т.д. Звуки Подобно декалям, звуки были в очень недружелюбном виде для моддеров. Теперь они являются свободными .sound файлами и редактируются таким же образом. У нас есть кое-какая работа, чтобы сделать этот интерфейс менее всратым, но вы поняли идею. Вы можете создавать и редактировать их во время работы игры, и они загружаются в горячем режиме, как и следовало ожидать. Эти звуки также появляются по всему редактору, поэтому, когда вам нужно выбрать звук в Hammer или ModelDoc - они есть Свойства Поверхностей Свойства поверхностей также хранились в некотором недружелюбном для моддеров виде. Так что теперь мы определяем свойства поверхностей в свободных файлах .surface, например так. Когда вы бросаете луч в игре, вы получите столкновение от поверхности, которое даст вам всю вышеприведенную информацию. Например, чтобы воспроизвести звук шагов DoFootstep - это расширение, которое живет в коде аддона. Мы помещаем его в код аддона, чтобы вы могли видеть, что он делает, и делать что-то еще, если вам это не нравится. Пользовательские Типы Ассетов Три вещи выше - это пользовательские ассеты. Вы сами можете задефайнить эти файлы. Вот что внутри sound.asset. Это FGD файл, который определяет структуру данных. Это позволяет вам создавать и редактировать материалы в редакторе ассетов Затем в вашем коде аддона вы создаете соответствующий класс, подобный этому: На этом все. Вы можете использовать их, как и любой другой ассет, и они автоматически загружаются. Они также интегрируются в систему ассетов Source 2, так что все это ощущается как часть движка. Это начиналось как только редактор для декалей, но я решил, что эти данные достаточно универсальны и легки, чтобы мы могли относиться к ним именно так, и попытаться сделать один редактор, который работает для кучи вещей.. таким образом, любые усилия, направленные на улучшение этого одного редактора, улучшают рабочий процесс тонны ресурсов.. так что это более вероятно. Hammer(2) На этой неделе я довольно часто пользовался Хаммером и чувствовал, как все старые тропы в моем мозгу восстанавливаются, когда я начал использовать горячие клавиши, которые никогда сознательно не помнил. Я столкнулся с несколькими проблемами (в основном исправляя вещи, которые я сломал), но я добавил пару новых вещей. Наши C# энтити теперь могут получать ключевые значения из карты. Для этого вы просто отмечаете одно из своих свойств с помощью [HammerProp], и оно автоматически устанавливается, когда объект создается картой. Однако это было бы бесполезно без добавления энтити вашего аддона в Hammer.. итак, теперь вы можете поместить fgd в папку config/ вашего аддона, и ваши пользовательские определения энтити будут доступны! Навмеш Я проделал кое-какую исследовательскую работу с навмешами, чтобы убедиться, что мы можем их использовать. Хорошая новость - мы можем. Большая часть навигационных путей привязана к базе сущностей NPC AI движка С++, которую мы не хотим использовать, но навмеш в основном абстрагирован. Это работает для нашего подхода, так как мы хотим связать голые основы и код как можно больше в c#. Вода + Плавание В коде есть много случаев, когда вам нужно проверить, находитесь ли вы в воде, и сделать что-то другое. По этой причине я хотел сделать это как можно скорее, чтобы нам не пришлось менять тонну кода после того, как мы его добавили. Физические объекты должны взаимодействовать с водой по-разному, некоторые вещи должны плавать, некоторые вещи должны тонуть, все движение должно быть смочено. Пули должны попасть в поверхность воды и продолжить свой путь. Под водой пули обычно действуют по-разному. Игроки должны двигаться под водой также по - разному. Они должны уметь плавать. Их вид нуждается в куче постобработки и тумана, звук на выходе должен быть более приглушенным. Source 2 не имеет ничего из этого, поэтому мы начинаем с нуля. В этом месяце я сделал все самое важное. Есть еще много вещей, которые нужно сделать, но я не хотел тратить целый месяц на создание идеальной воды. Эффекты от Выстрелов Свойства поверхностей позволяют определить, какие партикли должны появляться при попадании пули на определенную поверхность. Бесшовные Кубмапы (Sam) Отражения от карт окружающей среды(envmap) теперь рассматриваются скорее как непрямые источники света, а не назначаются каждому объекту, это позволяет нам сделать их незаметный переход не зависимо от того сколько их пересекается. Это не идеально, но это убедительное решение для игроков, художникам не нужно беспокоиться об их настройке. Шум(Garry) Я связал кучу шумовых функций, и мне захотелось посмотреть, что они делают, поэтому я быстро создал энтити, чтобы визуализировать их. Это довольно бесполезно для всех, но это выглядело круто. Улучшения Инструментов (Layla) Эти инструменты - огромный шаг вперед по сравнению с Source1, но я уверен, что есть еще много улучшений качества жизни, которые мы можем добавить, чтобы сделать их еще лучше. Вот некоторые изменения, которые облегчили нам жизнь в этом месяце. Теперь можно переносить fbx файлы из проводника в ModelDoc и добавлять их как «Render Meshes» Легкое создание материала с помощью ПКМ по картинке в браузере ассетов Импортируя меш в ModelDoc теперь можно выровнять его по min/max/center границам на каждой оси. Это полезно для тех случаев когда вы ходите чтобы ось модели находился в центре меша, но не был экспортирован таким образом Фильтр по типу в поиске браузера ассетов Вы можете принудительно поменять/применить веса Render Mesh к какой либо кости в ModelDoc Эксперименты с Транспортом Я запилил базовую физику транспорта. Она работает, прослеживая вниз на колесах и применяя пружинные усилия для подвески. Затем я могу приложить силы к телу, чтобы заставить его двигаться. Я портировал модульные транспортные ассеты из rust. Это не идеально, но это одна из многих попыток. Все это на C#, на уровне аддона, так что вы сможете создать свою собственную физику автомобиля. Сейчас нет хорошего способа водить машины, так что это то, над чем мы будем работать. Глубина Резкости (Sam) Я также реализовал настраиваемый эффект глубины резкости, сейчас он немного медленный и в некоторых случаях поломан, но результаты, которые мы получили с ним до сих пор действительно впечатляют. Если вы программист игрового режима, вы можете просто включить его, изменив значения диафрагмы в объекте камеры, как вы сделали бы это с любой физической камерой, и так же просто, как изменить FoV. Deathmatch(Garry) Я работал над игровым режимом deathmatch, добавляя новое оружие и решая, что еще нужно сделать. Конечная цель для этого - быть играбельным, чтобы быть хорошим тестом для всей системы аддонов gamemode. У меня есть код на Github. Я пытаюсь разрабатывать его как обычный разработчик, чтобы найти и исправить любые шероховатости в этом процессе За каждую вещь, которую мне удается запилить из моего списка, я нахожу еще 3, чтобы добавить к нему. Но это делает хороший прогресс, даже несмотря на то, что сам режим deathmatch, кажется, не движется вперед, он двигает все остальное вперед вокруг него.
  7. OriginalShaman

    S&Box DevBlog Январь 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 обнаруживает это и отталкивает вас как только может. Для этого он тестирует кучу позиций вокруг вашей текущей позиции, чтобы увидеть, находятся ли они в коллизии или нет. Если их нет, то он перемещается туда. Мой метод более случайный, чем стандартный. Я просто тестирую случайные точки, но пока он выполняет свою работу, и мы можем усовершенствовать его со временем.
  8. *Повествование ведется от первого лица, так как текст - это перевод с официального сайта разработчика игры. S&Box DevBlog: Данные игрока и табло Я пришел сделать табло и должен был думать о том, как сделать сетевую срань. Вы не можете просто перечислить игроков и получить от них счет и имена, чтобы построить табло... потому что они могут быть не связаны с вами одной сетью, они могут быть на другом конце мира. Итак, вот что я получил. На объекте игрока вы определяете такие свойства. Это вызов Get / SetPlayerInfo. Серверная часть автоматически сверяет эту информацию и объединяет ее в сеть. Я, вероятно, добавлю [attribute], чтобы сделать это в будущем, чтобы сделать код немного проще. Тогда в вашем табло вы бы сделали что-то вроде этого. Затем в вашей AddPlayer срани вы можете создать новую панель, которая имеет такую функцию… Добавим немного css и все готово
  9. OriginalShaman

    S&Box DevBlog Декабрь 2020

    S&Box DevBlog Декабрь 2020 *Повествование ведется от первого лица, так как текст - это перевод с официального сайта разработчика игры. Привязка (Garry) Я не думаю, что привязка когда либо работала так, как вы ожидали ее видеть в гмоде. Это определенно не так просто и прозрачно как это сделано в других движках. Поэтому я предпринял дополнительные шаги, чтобы сделать ее простой в использовании на этот раз. Шейдеры (Sam) Чтобы сделать максимально гибкими и мощными контент и создание игр, мы собираемся позволить моддерам создавать свои собственные шейдеры и выставлять их так, как они хотят, будь то вычислительный шейдер, эффект постобработки, пылающее пламя для рыцарского меча или любые другие спецэффекты. Мы ожидаем, что создатели аддонов будут компилировать их в автономном режиме и включать их так же, как они включали бы текстуры или модели в свои пакеты аддонов. УЛУЧШЕНИЯ НАЧИНАЯ С SOURCE 1 Рабочий процесс шейдера в Source 1 был большим бардаком, каждый шейдер имел много шаблонности, которую нужно было бы заполнить, вам нужно было бы правильно вручную привязать каждый регистр двунаправленно между кодом рендеринга и кодом шейдера, даже если бы вы попытались улучшить описание идеи того, к чему должен быть привязан каждый регистр, это все равно было бы рутиной. Valve значительно улучшила это в Source 2, добавив множество почти беззатратных фич, чтобы облегчить жизнь каждому, но это все еще требует большого вмешательства с внешними инструментами командной строки, которые заставляют части рабочего процесса чувствовать себя как дежавю - мы многое из этого решили. ДЕЛАЕМ ШЕЙДЕРЫ ПРОЩЕ Я хотел сделать все возможное, чтобы сделать любой вид разработки шейдеров максимально упрощенным, включая любые средства по манипулированию и перезагрузке шейдеров, никогда не прикасаясь ни к чему, кроме «Met» и вашего любимого редактора кода. Я переработал часть кода в движке Source 2, чтобы добавить поддержку загрузки и синтаксического анализа шейдеров из нашей системы аддонов, компиляции их в игре, а также других итеративных улучшений, и я позаботился о том, чтобы добавить все эти улучшения качества жизни в редакторах. Теперь весь рабочий процесс шейдера — это замкнутый цикл, от создания до распространения. Его сохранение в редакторе и изменения, которые вы предварительно просмотрели, мгновенно будут применены обратно в игру, если вы работаете над новым файлом, который еще не был скомпилирован, он появится в списке шейдеров и скомпилируется сам при первой загрузке. Вы также можете скомпилировать шейдеры с помощью шаблона для пакетной компиляции сразу нескольких шейдеров VFX О да, Source 2 использует новый исходный формат шейдера, на ядре это все еще HLSL-код, только предварительно обработанный в их синтаксис и выставляющий множество помощников. Он описывает все функциональные возможности, необходимые в шейдере, инкапсулируя все шейдерные программы в один аккуратный источник, включая параметры, которые вы зададите в редакторе, и они легко появляются там в виде переменной, устанавливаемой для каждого материала или динамически в C# коде. Многое из того, как Valve настроила свои шейдеры, напоминает мне о том, как другие игровые движки описывают идею базового материала, который будет расширен их редактором материалов, за исключением описания его в коде, а не в нодовой графе, который невероятно элегантен. Например, я играл с ним для создания тестового вершинного шейдера для blob меша Вы можете ожидать такой же готовности при построении вашего шейдера, расширяющегося по параметрам PBR, например, и это может быть расширено бесконечно, мы все еще оцениваем, как мы можем сделать его более доступным. ДИНАМИЧЕСКИЕ ВЫРАЖЕНИЯ Даже если это не наше, я думаю, что было бы неплохо упомянуть о динамическом выражении материала в их редакторе и о том, что вам не нужно создавать шейдер, чтобы делать простые вещи, такие как мигание цвета или динамическое изменение параметра. Это несомненно то, что мы собираемся расширить в будущем. ЭФФЕКТЫ ПОСТ-ОБРАБОТКИ Я думаю, что одна из самых непосредственных вещей, для которых люди будут использовать пользовательские шейдеры, - это пользовательские эффекты постобработки, и они будут максимально просты для игрока, не теряя его мощности, вместо того чтобы передавать сложный список параметров и команд, в большинстве случаев вам нужно только указать, какой материал вы хотите визуализировать в списке проходов. Эффекты постобработки могут варьироваться от простых эффектов виньетки до некоторых сумасшедших идей, которые вы можете найти в чем-то вроде Reshade, только лучше, потому что вы действительно контролируете все. В БЛИЖАЙШЕМ ВРЕМЕНИ Мы еще за многое в конвейере можем рассказать игрокам, и это должно быть сделано самым разумным способом. Наш конвейер рендеринга достаточно податлив для выполнения любых расширений в долгосрочной перспективе без модернизации значительной его части и сохранения совместимости. Физические Ограничения(Layla) В Source 1 все ограничения были некого рода скрыты от нас. Единственный способ получить к ним правильный доступ - через энтити. Это означало, что каждое ограничение, добавленное в GMod, на самом деле было энтитей. На этот раз ограничения могут быть добавлены и доступны непосредственно из физического мира. Это делает API приятным и чистым. Мы используем дизайн конструктора для API ограничений, вот пример: Вы получаете доступ к конструктору для ограничения, которое хотите построить, у конструкторов есть все функции, которые могут установить все свойства, необходимые перед созданием. Свойства также могут быть заданы после создания ограничения. Здесь существует 7 основных типов ограничений, но на стороне C# мы можем создавать псевдо-ограничения, используя базовый тип ограничений. Хорошим примером этого является создание шарнира, который использует шарнирное соединение с ограниченными значениями по умолчанию. Вы можете подумать, является ли сварной шов шатким, как желе, или жестким и твердым, как вы всегда мечтали? Сварное соединение не является идеально жестким, поэтому его следует использовать только в качестве фиксированного ограничения. Для реальной сварки нам нужно присоединить объекты и объединить их коллизию, это уже выглядит многообещающе. Сварные швы все еще имеют некоторые классные применения, их можно использовать для изготовления физгана! Инвентарь (Garry) Для меня важно, чтобы мы не делали предположений о том, какие игры будут сделаны с s&box. Я не должен хардкодить слот в стиле HL2 и систему инвентаризации ведер и ожидать, что каждая игра будет использовать его. Поэтому я посмотрел, как работает система инвентаризации в Source 1, и разбил ее на общую систему, которую можно легко адаптировать к множеству различных сценариев. Каждая сущность имеет элемент инвентаря, который по умолчанию равен null. Если он не равен null, то когда энтити получает новый дочерний элемент или удаляется дочерний элемент, она сообщает об этом инвентарь. Так что теперь любой класс, который вы установили в качестве своего инвентаря, отвечает за эту логику. Я закодировал простой класс инвентаря, который, как я предполагаю, удовлетворит 90% потребностей людей, но весь этот код является аддонновым, так что вы можете посмотреть на него, вывести из него или просто создать свой собственный класс. Система инвентаризации отвечает за две основные задачи.. ведение списка энтитей в инвентаре игрока и обработка активной энтити. Активная энтити - это та, которая находится в ваших руках, та, которая выбрана. Оружия (Garry) В гмоде система оружия была основана в движке на CBaseEntity. В S&box мы даже не используем нативные классы. В S&box оружие - это просто энтити с кучей реализованных интерфейсов. Система оружия на самом деле глупо проста. Он основан на системе ActiveEntity. Эта функция вызывается во время тика игрока. Если у вас есть ActiveChild и это IPlayerControllable, он также будет тикать. Так что на вашей энтити пушки вы можете делать такие вещи. Вьюмодели(Garry) Я действительно боролся с вьюмоделями. Мне кажется слишком сложным, что вьюмодели находятся на стороне сервера, и они всегда существуют, и мы меняем модель, когда меняем оружие, но они предсказаны и когда-либо видели только мы. Так что после нескольких дней попыток найти в этом смысл, я сделал их полностью клиентскими. Я рассуждаю это так: они должны вести себя как HUD, как будто они нарисованы на экране. Это сделало вещи в миллиард раз проще... и хотя есть вещи, которые, я знаю, нам придется ускориться, это работает именно так, как я ожидал. Вот некоторые кодовые переменные. В BaseViewModel нет ничего волшебного или скрытого, он существует в коде аддона. Свойство EnableViewmodelRendering может быть установлено на любой модели, и оно в основном помечает ее как вьюмодель- что означает, что она будет отображаться только в том случае, если вы находитесь от первого лица и просматриваете одного из ее родителей. Он также будет визуализироваться в пути вьюмодели, которая останавливает ее отсечение через стены. Единственное, что действительно особенное в BaseViewModel, - это то, что я подключил его к вызову, когда мы устанавливаем положение камеры, чтобы он мог позиционировать себя в глазах игрока. Замена Панорамы (Garry) Вспомните тот блог, где я рассказывал о том, как великолепна Панорама и как сильно я ее люблю. Что же, в этом месяце я распорол ее и заменил самодельной системой на C#. ПОЧЕМУ Я знаю себя. Я знаю, что в конце концов сделал бы это. Проще и лучше переписать его на c#, чем исправить то, что меня раздражает в c++. ЧТО ИЗМЕНИЛОСЬ Система компоновки теперь основана на yoga, так что все это основано на flex. Панорама имеет нестандартную систему компоновки, которая является своего рода flex'ной, но она не так мощна/полна, как правильный flexboxing. (Любой, кто попросит поддержки сетки, может быть выебан имхо) CSS-переходы в Панораме подключены в обратном направлении, поэтому, если у вас есть переход, установленный на :hover, он использует этот переход, когда вы не ховерите. Есть куча таких мелочей, которые сами по себе ничего не значат, но заставляют вас спотыкаться, когда вы работаете с ними, и все они начинают складываться. Такие вещи, как ивент указателя и работа курсора. В общем, улучшение заключается в том, чтобы сделать все более соответствующим тому, как вы ожидаете, что реальные таблицы стилей будут вести себя. Мы можем добавить некоторую особую магию к листам, например звуки и различные режимы рендеринга, но в целом, если вы используете простой css, он должен работать так, как вы ожидаете. ПРИНУДИТЕЛЬНЫЕ ПРИВЯЗКИ Делая это, мы имели очевидное преимущество, заставляя нас связывать кучу вещей для рендеринга и получения / управления входными данными. Чем больше вещей мы перемещаем в область аддонов, тем больше вещей связывается.. что означает больше функциональности для моддинга. Суммарно Достаточно много в этом месяце много довольно низкоуровневых фундаментальных вещей. Я действительно доволен нашей скоростью. Такое чувство, что каждый шаг вперед, который мы делаем, также увеличивает нашу скорость на 20%. Все, что мы реализуем, делает реализацию кучи других вещей в миллион раз проще. Моя главная цель в течение следующего месяца-сделать его играбельным. Сейчас в нее можно играть, но есть некоторые реальные шероховатости, которые мне нужно сгладить. Как только он будет играбелен нами внутри компании, мы сможем оценить, стоит ли начинать предоставлять доступ некоторым из вас, ребята.
  10. OriginalShaman

    S&Box DevBlog Июль 2021

    S&Box DevBlog Июль 2021 *Повествование ведется от первого лица, так как текст - это перевод с официального сайта разработчика игры. «В этом месяце у нас был приток новых игроков и контента, поэтому пришлось освободиться для него. И куча других вещей» Элементы Управления UI(Garry) Я добавил некоторые популярные элементы управления в UI систему. Такие, как ползунки, флажки, и выбор цвета. В верхнем видео все это держится панелью “Inspector”, которую вы даете объекту, и он создает для вас форму и все связывает автоматически. Окружающие Пропы(Tom) Я работал над пропами для карты construct, пытаясь передать дух британского города. Они должны оживить карту и создать ощущение обжитости. В этом месяце основное внимание уделялось уличной мебели. Проекция Освещения(Sam) Проекция освещения - это способ показать текстуры, которые могут использоваться на прожекторах, люди знакомые с Source 1 чаще всего запомнили его как “projected texture”. Source 2 изначально поддерживал только предварительно установленный список проецируемого освещения, которые запечены в определенной текстуре, и не изменяются во время выполнения, это не то, что мы хотим. Так что я решил создать систему, которая справится со всем этим. На фронтенде вам нужно беспокоиться только о том, какую текстуру вы хотите использовать для освещения, использование того же API текстур, который мы используем для всего остального, означает, что вы можете использовать даже картинки с интернета. Имея нашу собственную систему управления проецируемого освещения позволяет нам равномерно использовать некоторые интересные эффекты, вы можете использовать render таргеты в проецируемом освещении, чтобы использовать его в проекторе в качестве примера. Одно забавное любопытство заключается в том, что даже на спекуляр влияет проецируемое освещение, поэтому у вас должна быть хорошая четкость, что бы вы ни делали. Расширение Диапазонов Объемного Света В этом месяце я наконец исправил то, что беспокоило меня долгое время: объемное освещение имело много полос, поскольку мы не используем TAA из-за его проблемы ореола, связанное с динамическими объектами и движениями камеры. Я переписал принцип работы репроекции и семплирования и теперь у объёмного освещения нет никаких полос, при этом оставаясь настолько качественным, насколько это возможно без мыла. Самое крутое - внесенные изменения не влияют на производительность, в отличие от предыдущих методов и выглядит в тысячу раз лучше. Очередь на DevPreview(Garry) Я сделал автоматизированную очередь для получения доступа разработчикам. Она смотрит на вашу активность в workshop для GMod и HL:A и дает вам очки. Человек, набравший наибольшее количество очков - получает доступ к игре. Мы хотим ограничить скорость выдачи, с которой люди получают доступ. Этот процесс разработки на данный момент удовлетворителен для нас, и я хочу, чтобы оно так и оставалось. Если завтра 10к человек получат доступ к игре - мы будем завалены репортами ошибок и запросами фич. Это быстро превратится в работу. Это не самый идеальный способ. У каждого есть своя идея лучшего способа, которая обычно приводит к тому, что они сразу получают доступ к игре. Настройки У нас не было страницы с настройками. Поэтому мы меняли разрешение экрана с помощью командной строки на протяжении 8 месяцев. С открытием доступа к игре новой группе людей я решил, что пора что-то менять. Теперь у нас есть несколько основных настроек. Только самое необходимое. Фикс Веса Карты Карты компилировались с кучей говна, в котором они не нуждались. Из-за это размер карт был больше в 2-3 раза. Теперь данная проблема пофикшена. Исходники Модели Ситизена(Maxime) Исходники модели Ситизена теперь поставляются вместе с игрой! Изменения, которые мы вносим в модель, автоматически вносятся и на вашей стороне. Пока что персонаж и его анимации находятся в разработке, мы надеемся, что модель окажется полезным примером. Больше информации на вики: https://wiki.facepunch.com/sbox/Citizen_Model Игра и Поиск Игры(Garry) Мы получаем кучу карт и игровых режимов, поэтому я добавил простенький поиск и категории. В конце концов у нас появятся другие фильтры, такие как клавомышь/геймпад/VR. Прямо сейчас категории - это эмодзи. Они являются заполнителем, но это сделало их абстрактными и неоднозначными, поэтому мы могли бы изучить эту область поподробнее. Проблема с сетью С ростом игры у нас появилась проблема с засорением надежного сетевого канала. Как-будто туда кто-то скинул C# Возникала данная проблема из-за того, что пакеты могут быть только очень большими, а надежный канал не разбивает пакеты, и мы отправляем код игры через таблицы строк, и все они отправляются одним большим фрагментом. Теперь надежная информация разбиваются на части, если становится слишком большой. Это исправляет проблему. Улучшение Инструментария(Layla) ТОЧЕЧНАЯ СЕТКА По запросу комьюнити, фича с настроек первого Hammer в 2D Views теперь может отображать сетку из точек. Эта опция намного проще для глаз, когда в поле зрения много меша геометрии. Tools > Options > View 2D. VIEWMODEL КАМЕРА Как и в ModelDoc, в AnimGraph превью теперь есть viewmodel камера. ПЕРЕТАСКИВАНИЕ в MODELDOC Перетаскивание моделек в предпросмотре физики было поломано в нашей сборке, но работало в HLA, теперь оно пофикшено. Прогресс с Construct(EzMeow) Большую часть своего времени я потратил на изменения форм секций с травой: Визуально переопределил путь, чтобы мы могли разместить несколько скамеек, которые не находились бы прямо посередине. Создал текстуры земли взамен той, которую мы использовали до сих пор из Rust. Добавил разрушаемые стены в качестве границы (проверка работы системы), что, в свою очередь, немного изменило макет карты, поскольку физическая форма теперь определялась разрушаемым префабом. Переработана топология области травы для подготовки к покраске вершин, которые будут использованы шейдером смешивания (ленивое решение - бахнуть по кнопке разделения, но это не лучшее решение). Также небольшие изменения и исправления на главной дороге. Необходимо сначала обработать все площадки и этажи, прежде чем начинать строительство на них и добавлять больше деталей. Одна из причин, по которой мы тратим так много времени на размышления о construct, заключается в том, что мы создаем материалы и модели для мапперов для использования их же в других картах. Мы пытаемся создать базу ассетов, которые будут действовать также, как и ассеты Half-Life 2 в Garry’s Mod, так что людям не нужно заново изобретать колесо. Тени от Статического Света(Sam) Статический свет теперь может отбрасывать динамические тени, Source 2 в нашем пайплайне ранее поддерживал такую возможность, но рассчет оценки какой источник света может быть с тенью - был сделан на серверной стороне, и не был совместим с нашей игрой и вне VR. Я потратил время на рефакторинг всего этого, чтобы он рассчитывался на стороне клиента, и с лучшей эвристикой, теперь дешевые источники света могут отбрасывать тень на карте, без дополнительного вмешательства. Это полезно для придания лишних огоньков вашему окружению без каких либо дополнительных затрат бюджета вашего рендеринга. Прямо сейчас он ограничен до одного источника света с тенью кроме тени солнца, но ничто не мешает ему работать в нескольких источниках света в будущем, будь то spot лайты, либо point лайты. ИТОГИ(Garry) В этом месяце огромное количество времени было потрачено на систему меню и бэкенд. Это было необходимо, поскольку выходило много контента. Я хотел начать конкретизировать идеи, которые у нас были по этому поводу. Пока что мы еще не закончили, но теперь чуть ближе к концу. А ещё я женился и моя жена и сын подхватили Covid. Мы заговорили об идее выставить игру на продажу в Steam, но скрыть от общественности. Я не думаю, что мы к этому готовы. Даже если игры будет скрыта, в неё сыграет слишком много людей. У нас пока нет ресурсов для поддержки всего этого, но в какой-то момент это будет привлекательно. Со всем этим UI и бэкендом я забыл, что делаю игры. Я с нетерпением жду возможности покопаться в игрострое в этом месяце. Howie разработал множество игровых концепций, которые, я думаю, было бы интересно опробовать. Ребята из VR-канала в Discord очень сильно проголодались, так что я их тоже накормлю.

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

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

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