S&Box DevBlog Май 2021 - S&box - Моддинг Игр и Серверов Jump to content
Guest

S&Box DevBlog Май 2021


OriginalShaman
 Share

Recommended Posts

S&Box DevBlog Май 2021

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

 

«Запросы сообщества, много рефакторинга, и немного экспериментов в этом месяце»

Изменение тона (Garry)

В блогах произойдёт небольшая смена тона, поскольку теперь они больше ориентированы на людей, имеющих доступ к dev preview. Если вы не разработчик, то, вероятно, вы получите кучу неинтересной для вас информации.

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

Фреймрейт вьюмодели

Энтити анимации на стороне клиента обновлялись от тикрейта сервера. В основном это было заметно только при уменьшении значений host_timescale или тикрейта.

Отрисовка

Я добавил возможность рисовать в реальном времени. Такое вроде уже было в GMod, но в S&box это работает немного по-другому, давая определенные преимущества.

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

Май 2021, изображение №1
 
 

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

Май 2021, изображение №2
 
 

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

 

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

Стилистика Мира

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

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

Вот несколько стилизованных концепций, которые мы попробовали с пропорциями ситизена:

Май 2021, изображение №3
 
 
Май 2021, изображение №4
 
 
Май 2021, изображение №5
 
 

В начале этого месяца мы решили взять на себя обязательство и сказать, что мы хотим реализм. Отчасти это было связано с тем, как великолепно ситизен выглядел на уровнях Half-Life: Alyx. Контраст между видом настоящего мира и мультяшным сосискоголовым ситизеном - это именно то, что мне нужно. Выглядит интересно.

Май 2021, изображение №6
 
 

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

Цель этого состоит в том, чтобы исправить проблему с основным контентом. С GMod нам было легче, потому что у нас были все материалы и пропы с Half-Life 2. Сейчас у нас стиль Rust, который не всегда подходит масштабам Source

Поэтому мы пытаемся собрать все воедино. На данный момент мы хотим чтобы 3 наших художника сделали все, чтобы мир выглядел также хорошо, как в HL:A.

Рефакторинг игрока

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

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

Поэтому в этом месяце я сделал систему Pawn (прим. пер. система пешек). Теперь при подключению к серверу, он может создать энтити (прим. пер. то есть «пешку»), которой вы будете управлять. Сервер может изменить вашу «пешку» в любое время.

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

Рефакторинг сети

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

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

Почему 4? Обычная, предсказательная, локальная и локально-предсказательная. При переработке этого я понял, что нам вообще не нужны предсказательные, потому что мы сами справляемся с предикциями. Так что остались только обычная и локальная.

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

Трассировка Стеков

Май 2021, изображение №7
 
 

Я добавил отображение трассировки стеков в игровую консоль. Вы можете кликать на один из стеков, и он откроется/переключится в Visual Studio в нужном файле и строке.

Хелпер Передвижения

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

В Source Engine код передвижения не так прост, как “двинься сюда, если можешь, остановись, если не можешь”. Если игрок сталкивается о поверхность, то скользит по ней. Если ударяется о другую поверхность, то скользит и по ней, пока мы не собираемся его толкать в его исходную.

Поэтому я извлек все это поведение в вспомогательную структуру под названием MoveHelper.

Май 2021, изображение №8
 
 

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

Зависимости

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

Зависимости в среде выполнения сосут жопу. В S&box я хочу это исправить. Ваша игра должна включать в себя все необходимое для запуска. Она не должна закачивать 8 разных аддонов. Ей не нужно, чтобы люди устанавливали CS:S.

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

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

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

Бильярд (Conna)

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

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

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

Construct (Louie)

Май 2021, изображение №9
 
 

В Garry’s Mod — gm_construct начинал свою жизнь как легкая карта, в которую можно быстро зайти и проверить что-либо. Альтернатива ожиданию загрузки d1_trainstation_02 на протяжении 50 секунд.

Когда переделываешь карту для S&box, появляется соблазн сделать её больше, добавить новые зоны, горки, гоночные треки, футбольные поля. Но это все идет в разрез с ее первоначальными задачами.

  • Быстрая загрузка
  • Белая комната (для скриншотов пропов)
  • Черная комната (тестирование энтитей в темноте, создание динамического света для скриншотов)
  • Вода (для тестирования энтитей в воде)
  • Плоские участки (для тестирования транспорта и т.д.)
  • Навмеш (для тестирования ИИ)
  • Ступеньки (для тестирование передвижения)
  • Рампы (для того же)

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

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

Май 2021, изображение №10
 
 

Энтити Карты(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.

Ошибки компиляции

Май 2021, изображение №11
 
 

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

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

Динамические Меши (Layla)

Я добавил поддержку создания и обновления буферов вертексов и буферов индексов в GPU. Их можно использовать для создания мешей через код.

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

Это позволяет нам создавать сетки со многими треугольниками в среде выполнения, т.е. кодом

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

Улучшения производительности (Garry)

ХРАНЕНИЕ ПРЕДИКЦИИ

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

Кто-то в discord упомянул, что с тонной предикций энтити работает хреново, поэтому я сделал оптимизирующий проход и ускорил всё в 40 раз, так что теперь даже в vprof ничего не регистрируется.

КОМПИЛЯЦИЯ

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

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

ФАЙЛОВАЯ СИСТЕМА

Я нашел проблему в том, как Zio выполнял поиск файлов в общей файловой системе. В одном из моих тестов поиск в нашей основной папке для “*_c* занял более 10 секунд

В live версии вызов Assets.LoadAll на клиенте обычно занимал 3-4 секунды. Теперь этот показатель снизился до 0.07 секунды. В целом, данное исправление ускорило загрузку каждой карты более чем на 6 секунд.

Статистика Пакетов

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

Май 2021, изображение №12
 
 
Май 2021, изображение №13
 
 

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

Май 2021, изображение №14
 
 

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

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

Одежда Ситизенов (Taylor)

Вместе с тем, как Макс(Maxim_Lebled) объединял CitizenV2 в этом месяце, мы пересматривали одежду ситизенов. Старые пару стилей не очень понравились нам, вручную нарисованный вид выглядел очень резким рядом с чем-то с реалистичным или грубым стилем.

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

Май 2021, изображение №15
 
 

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

Физика со Значением Шага по Времени(Garry)

Я добавил пару физических параметров, чтобы помочь Конне с бильярдом У него были проблемы с шарами, проходящими через другие шары с высокой скоростью, поэтому я добавил Global.PhysicsSubsteps, которые вы, вероятно, захотите изменить только в определенных обстоятельствах.

Май 2021, изображение №16
 
 

Я также добавил Global.PhysicsTimescale.

Май 2021, изображение №17
 
 

Если вы подключите его к MathF.Sin то получите хороший лагучий enumerator ГМодовского сервера.

Итоги

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

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

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

Link to comment
Share on other sites

 Share

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

×
×
  • Create New...
Search In
  • More options...
Find results that contain...
Find results in...

Write what you are looking for and press enter or click the search icon to begin your search