AMPEWORLD
Обсуждения
67
1
Посты
**Автор выпустил обновление для VoxelCore** Приветствую всех. Несмотря на то, что это обновление не было посвящено чему-то одному конкретному, хотя его можно было бы назвать обновление мобов, в нём было добавлено большое количество новых фич, которые довольно долго лежали в бэклоге. Все эти фичисаны по разным аспектам движка. Что ж, с чего бы начать? Наконец-то, спустя довольно долгое время после добавления сущностей, я занялся мобами. Не сказал бы, что это первая реализация мобов на движке, но в ядро наконец-то была добавлена под система поиска пути, реализации, которые на Луа были бы очень медленными не из-за скорости Луa быстр, а больше из-за постоянного переключения контекста между Луa и C++ для получения блоков. А блоков нужно получать очень много. Для поиска пути использован классический алгоритм А со звёздочкой. Доступен как синхронный, так и асинхронный поиск пути. А поскольку в блочном 3D-пространстве довольно затратная задача, второй вариант для мобов являетсяbпредпочтительным. При этом доступна возможность ограничить объём работы данного алгоритма, а также в какой-то степени настроить стоимость прохождения через какие-то блоки или по каким-то блокам. Вместе с построением добавлена и визуализация этих самых путей, а также стандартные компоненты для сущностей, позволяющие работать с этой подсистемой. был добавлен специальный компонент для поиска пути, который является прослойкой между набором функций и сущностью. Кроме того, для сущностей, которые должны двигаться самостоятельно, так называемых мобов, был добавлен соответствующий компонент, который, кстати, уже используется для реализации движения сущности игрока. Да, управление игроком было перенесено в Луа. Ну, кроме управления камерой. Этот новый компонент берёт на себя управление некоторыми параметрами физического тела, ходьбой, бегом и полётом, а в ближайшем будущем и плаванием. Документация по этим стандартным компонентам добавлена в соответствующий раздел. Кстати, эти компоненты, как и демонстрационный моб, надеюсь, я успею доделать его до релиза, реализован полностью Луа. По сути, от мобов в этом обновлении только поиск путей, встроенно в ядро. С остальным прекрасно справляется Луаджит. В движении мобов пока что есть некоторые шароховатости, которые будут исправляться ближайшими патчами и, возможно, уже исправлены. Кстати, в ласти был добавлен новый метод require компоненent, который бросает исключение в случае, если компонент не найден. В а сами компоненты теперь можно передавать какие-то дефолтные значения прямо из Джейсона с описанием сущности. Благодаря этому нововведению теперь доступна команда Entity Spawn, которая создаёт заданную сущность с дефолтными значениями компонентов. В будущем путе добавлена возможность пробрасывать прямо через команду какие-то значения. Реализация управления рукой, ну, точнее предметом в руке была перенесена в Луа. Управляется она как скелет сущности, но через специальную библиотеку Skelлеetons. При этом есть возможность полностью переписать реализацию функции, которая управляет этой самой рукой, и переназначить её с помощью специального свойства д handollлеer. Это что касается вида от первого лица. Ну а вот с видом а от третьего лица, как и раньше, нужно управлять скелетом сущности игрока. Кстати, в библиотеке векторов были добавлены новые функции. В библиотеку кодирования B64 были добавлены две новые функции, позволяющие кодировать и декодировать URL Save вариант. Была добавлена библиотека для работы со случайными числами. Это намного больше, чем даёт Луа изначально. Здесь есть генерация как недетерминированных случайных чисел, генерация гуидов четвёртой версии, а также класс рандом, который позволяет изолировать состояние генератора псевдослучайных чисел и устанавливать сит только для него. Наконец-то было добавлено событие он blлоock, который вызывается для конкретного блока. В него передаются координаты этого самого блока. И, конечно, главное не перебарчивать с количеством блоков, на которые навешивается это событие. Для того, чтобы избежать постоянного переключения контекста между C++ и Луа, которая съедает достаточно большое количество времени, используется очередь событий на регистрацию и на удаление обновляющихся блоков. И по сути вызов обновления и+ апроисходит один раз за кадр. И поскольку интервал вызова этого события обычно больше, чем один кадр, нагрузка равномерно распределяется между кадрами. Сетевая подсистема движка получила несколько нововедений. Это возможность работы с протоколом UDP, возможность передавать заголовки в HTTP запросы. Кол сallк для ошибок. Теперь передаётся не только код ошибки, но и данные. Было исправлено создание серверного TTP сокета на MacOS, а также тот самый серверный баг. Была добавлена поддержка именованных каналов Named Pipes, которая в дальнейшем, вероятно, будет использоваться для межпроцессной коммуникации редактора и игры. И, наконец, я смогу добавить брейкпоинты в Луа. Так что в ближайшем времени можно ожидать продвинутые отлачиклуа в Оксиль Корь. Благо уже есть некоторые наработки. У компонентов сущности было добавлено событие, вызываемое после каждого перерасчёта физики. Что ж, после выхода графического обновления был выпущен патч, который кроме исправления графических багов, добавляет некоторая оптимизация, одна из которых довольно значительная - это дистанция плотного рендера. В режиме продвинутой графики значительную часть производительности съедает перерасчёт теней. примерно 80% времени из которого было связано с прозрачностью в листве, поскольку при плотном рендеринге количество треугольников начан в среднем значительно повышается, что бьёт по производительности не только при включённых тенях. Эта оптимизация делает так, что в отдалённых чанках, которых прозрачность не видна из-за мимпмэппинга, эти самые чанки отображались без плотного рендеринга. При этом число вызовов от рисовки не увеличилось. Для того, чтобы не увеличивать расход видеопамяти, а также количество вызовов от рисовки, при рендеринге используется переключение индексных буферов у мешайчанков. Из-за того же мипэппинга этого самого переключения практически незаметно. Единственное, если использовать зум, вы можете увидеть этот момент. Но и это можно легко исправить, подстраивая это самое переключение под этот самый зум. Так что производительность с момента выхода 0,28 уже успела подрасти. Ну, а также были исправлены вылеты на некоторых конфигурациях систем. Кроме того, была ускорена функция блок set, в особенности при установке воздуха. На 0,30 уже, кстати, запланированы некоторые оптимизации, не касающихся рендеринга. Ну, точнее, не только его. Был добавлен класс расписания, который позволяет планировать вызов функции с заданным интервалом либо тайм-аутом. Созданное расписание нужно добавить в какую-то группу расписаний. На данный момент в движке уже есть стандартная группа расписания World Default, которая обновляется каждый кадр. Ну или так называемый такт приложения. Во встроенном редакторе предпросмотр 3D-моделей теперь автоматически обновляется при изменении модели без потребности постоянно нажимать Ctrl R. Кстати, в многосрочный текстбок добавлена возможность изменения табуляции клавишей Tab и Shift Tab, как в любом нормальном редакторе кода. Автоматических отступов, правда, пока нет, но это дело времени. И если вы задаётесь вопросом: "А зачем вообще этот редактор нужен, когда есть нормальные редакторы, я напомню, что этот самый редактор развивается в направлении атлантика для лоа скриптов модулей и компонентов. И на самом деле подсказки автодополнения уже не за горами. Об этом, пожалуй, чуть позже. Была добавлена возможность, наконец-то полностью скрыть ход бар стандартных элементов. И здесь можно перейти к системе проектов, которая плавно фоном развивается. Я бы даже сказал незаметно. были добавлены исправлены некоторые аспекты, касающиеся меню, и введён скрипт проекта, который вызывается при запуске движка, то есть на самом высоком уровне. Примером такого скрипта является клиентский скрипт, который настраивает меню. Да, на меню теперь можно влиять, но в рамках проекта. В чём же заключается смысл этих самых проектов? На самом деле это не что-то новое, не какое-то серьёзное изменение в движке. Это просто дополнительный клей, который позволяет собирать несколько паков и настраивать определённый сценарий. Как будет выглядеть меню, какие возможности будут можно вообще преобразить до неузнаваемости Voxel Core, превратить его в очень старую версию Вокселько или в какую-то игру. Так что по сути это не то чтобы изменения, это скорее нововведение. Ну а также оно нужно для того, чтобы сделать редактор для вокселькора на самом Вокселькоре как проект. Кстати, появилась возможность добавлять описание предметов в инвентаре. У блоков и предметов добавлено такое понятие, как теги. В дальнейшем они будут использоваться, в том числе, в ядре, позволяя быстро фильтровать блоки по какому-то признаку. Ну и предметы, конечно же. Кроме того, теги можно добавлять и контенту из других паков. На самом деле теги уже используются в поиске путей для возможности изменения стоимости прохождения через какой-то блок, чтобы не хардкорить конкретные блоки, обозначать их каким-то обобщённым свойством, например, жидкость. Для проверки наличия таго облака или предмета добавлены специальные функции. Не следует использовать для этого таблицу Properties, поскольку её содержимое может меняться из версии к версии. Без предупреждений, конечно же. Была добавлена возможность указывать версии зависимости. доступно несколько операторов в сравнении контрибюторам проекта было добавлено отображение конфликтов назначений клавиш в библиотеку блок была добавлена функция возвращающая имя модели блока для использования где-то ещё а ещё было сделано большое количество фиксов и на самом деле автотесты движка написанные на Луа оказываются довольно полезными и создаются они довольно просто так что любой желающий может помочь с тестированием движка таким вот способом написанием автотестов это может быть как тестирование какого-то одного класса так и определённого сценария. UI-тесты пока что не реализованы, но уже запланированы. И баг, вызывающий падение теста в GitHub Actions, имеет очень высокий приоритет по исправлению. Кроме того, большое спасибо тем, кто делает информативные баг-репорты. Что ж, предполагаю, что следующее обновление будет примерно таким же в плане не какого-то глобального нововведения, а именно большого количества небольших, но полезных. Кроме того, я наконец хочу заняться демонстрационными контент-паками. Тот же Survival, который всё никак не выйдет. Надеюсь, хоть во время монтажа я успею доделать демонстрационного моба, который будет как раз в base Survival. Кроме того, нужно наконец-то оживить М. Кстати, за это время уже развились довольно неплохие реализации мультиплеер, и в ближайших обновлениях планируется добавление функций, реализующих хэширование, шифрование, а также загрузку контент-паков прямо из памяти. Хотя, кто знает, может и что-то крупное будет. Ну а на этом пока что всё. 3 месяца назад, DanilaEngineer
Статистика
Обсуждения 20
Посты 36
Пользователи 89
Пользователи в сети
Сейчас нет пользователей в сети...