Dev-блог 16

KosiakS

Просвещённый
Команда форума
Пятничный Dev-Блог 16

Rust_Dev_Blog_16_1.jpg

Была ли эта неделя хороша? Чувак, эта неделя была просто "взрывной"! Вот над чем мы трудились.

Прогресс по AI
Андре работает над искусственным интеллектом. Я уже объяснял, почему работа над AI ведётся так долго, но я объясню это ещё раз, на тот случай, если вы начали читать Dev-блоги только сейчас.
Старая версия AI использовала Unity'вскую Navmesh разметку. Справочный материал от InfoRustPub:
Navmesh - это совокупность полигонов, или навигационная сетка, указывающая объекту где он может ходить.

Сетка для всего острова была размером в 400 мегабайт. Мы не можем использовать эту сетку на новом острове, потому что всё на новом острове процедурно сгенерировано. Невозможно сделать шаблон сетки, потому что она динамическая. Вот почему Андре тут потеет.

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

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

Для Stress-test серверов я дал возможность строить фундаменты и стены с относительной дешёвой стоимостью ресурсов. При этом, сломать их крайне трудно и долго. В следствии чего, зайдя на сервер, вы увидите это:

Rust_Dev_Blog_16_2.jpg

Ситуация не улучшается...

Rust_Dev_Blog_16_3.jpg
Rust_Dev_Blog_16_4.jpg

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

Исправления в системе String Table (таблица строк).
String Table - система экономии полосы пропускания данных. Вместо отправки слова по нескольку раз, некоторые слова объединяют и шифруют с помощью цифр. Это означает то, что вместо отправки 7-ми байт слова "объекта", вы можете отправить 2-х байтовое число.

Но до этого времени, в системе String Table была проблема. Которая заключалась в следующем:
клиент игры добавлял левые значения, в следствии чего, вся отправка строк буквально рушилась. Именно поэтому вы иногда могли встретить бегающее как игрок дерево и т.д.

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

Rust_Dev_Blog_16_5.jpg

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

Rust_Dev_Blog_16_6.jpg

Перемещение "скелетов" моделей персонажа.
Теперь "Скелет" модели игрока перемещается должным образом, вместо того, чтобы просто "распластаться" на земле после смерти. Кстати, с волками это тоже работает.

Пещеры.
Билл всё ещё "гонит" по пещерам. Выглядят они просто восхитительно! Это всё пока что арт-тесты, но Билл создаёт и активы, которые в будущем мы будем использовать.

Rust_Dev_Blog_16_7.jpg
Rust_Dev_Blog_16_9.jpg
Rust_Dev_Blog_16_10.jpg

Эффекты оружия.
Теперь вы можете слышать и видеть, как стреляют другие игроки, с вспышками из стволов при выстреле и соответствующим звуковым сопровождением. Ваша модель оружия имеет всё тоже самое.

Обходные пути проблем с коллайдерами.
После добавления в Rust строительства, у нас появились проблемы. Люди очень много строят. В Unity есть предел коллайдеров - 64 000, при онлайне в 100 человек, мы легко можем достичь этого показателя примерно за 10 часов. Unity 5 использует улучшенный физический движок, в следствии чего эта проблема отпадает, но Unity не любят нас настолько, что-бы предоставить нам Unity 5.
В общем, на старой версии Rust мы прибегли к некоторым системам "нипиль", дабы обойти этот недуг.
При старте игры, все коллайдеры деревьев сливались в один большой коллайдер. Вот почему мы не можем удалить деревья в этой версии игры, т.к. это экономит около 5000 коллайдеров. Следующая хитрость заключается в следующем: когда вы строите, все контактирующие между собой коллайдеры объединяются. Да это работает, но это также доставляет не мало ебли мозгов, что-бы заставить это работать, и ещё больше ебли что-бы заставить это работать без лагов сервера. Когда у вас возникают проблемы со стрельбой по объектам - вы попадаете в составной коллайдер, после чего вы должны выяснять в какой объект вы на самом деле попали...

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

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

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

"До" (Используемая память в байтах слева).

Rust_Dev_Blog_16_11.jpg

"После".

Rust_Dev_Blog_16_12.jpg

Стоит учитывать то, что мы не могли бы иметь такое же количество предметов, лежащих вокруг в конце этого графика - но на старте точно такая же ситуация. И я вижу почти 100 мегабайт разницы в использованной памяти Unity.
Также у нас было несколько ситуаций, где мы использовали InvokeRepeating для вызова функций каждую секунду и т.д. (кажется, что это медленно, но это не так). В конечном итоге все они будут вызываться с одного фрейма.

Северные земли.
Петур всё ещё работает над северным биомом.

Rust_Dev_Blog_16_13.jpg
Rust_Dev_Blog_16_14.jpg

Концепт арты.
Генераторы от Мэг.

Rust_Dev_Blog_16_15.jpg

Постройки от Пола.
Rust_Dev_Blog_16_16.jpg

Совмещение конструкций от Мэг.

Rust_Dev_Blog_16_17.jpg

Железные лестницы от Пола.

Rust_Dev_Blog_16_18.jpg

А также[БЕЗУМНЫЕ] идеи строительства от Скотта.

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