Привет, Гильерме на связи, главный разработчик Cave Engine, и мне очень приятно написать для вас эти заметки к релизу.
Последние четыре месяца в студии были сумасшедшими — мы разрабатывали игры и инструменты как никогда раньше. Следующая игра, которую мы создаем в Uniday Studio, гораздо сложнее всего, что мы делали до этого, и поэтому движок сильно эволюционировал. Надеюсь, этот релизный обзор наглядно это покажет.
Cave Engine 1.4 — это буквально лучшая версия движка на сегодняшний день. Бесчисленное множество улучшений и исправлений, он стал гораздо стабильнее как для Windows, так и для Linux. Ожидайте улучшенного пользовательского опыта, повышенной производительности, больше инструментов и продвинутых функций для создания ваших игр.
Что нового?
Я постараюсь выделить самые интересные новшества, так что давайте сразу приступим к изучению.
Новые обучающие руководства для новичков
Это действительно лучшая версия для начала работы с Cave, если вы новичок. В версии 1.4 добавлена система онбординга с первыми шагами в движке (встроенная в UI), чтобы вы могли научиться тестировать игру, изменять её и даже экспортировать как runtime. Я также значительно улучшил обучающие материалы и документацию прямо в движке, чтобы всем было проще.

Это часть моего усилия сделать движок настолько простым, чтобы учебники были почти не нужны. :)
Новый опыт создания проекта
Теперь создание нового проекта в Cave гораздо интереснее и приносит много новых возможностей.

Я полностью переписал меню создания проекта, теперь вы можете выбрать между пустым проектом, игрой от первого лица, от третьего лица или видом сверху. Новые шаблоны игр более стабильные и полные. Подробнее об этом расскажу дальше. Но прежде — еще одна новая фишка: кнопка генератора случайных названий игр. Если у вас нет идей, просто нажмите её, и она сгенерирует случайное название проекта, которое наверняка вдохновит вас.
Новые стандартные ассеты для проектов
При создании нового проекта у вас теперь больше вариантов для инициализации игры с предустановленными ассетами. Среди них были такие уже существующие элементы в Cave:
- Главное меню
- Меню паузы
- Контроллер персонажа от первого лица
- Контроллер персонажа от третьего лица
- Контроллер персонажа с видом сверху
- Полностью анимированный прототип персонажа (с обратной кинематикой)
- Индикатор здоровья и система окончания игры
- Система завершения уровня и перехода к следующему
- Стандартная сцена с сгенерированным рельефом
- Стандартные примитивы мешей (куб, сфера, цилиндр, плоскость, конус)
- Стандартный тестовый материал
- Процедурная текстура неба (с облаками, звёздами, солнцем и др.)
- README файл с объяснением содержимого проекта и указаниями по расширению
Теперь добавилось:

- Улучшенная генерация рельефа, теперь объекты, добавленные на сцену, подстраиваются под него.
- Контроллер транспортного средства (с мешем и физикой) и включенный шаблон.
- Шаблон врага с базовым поведением Wander AI, созданным на базе системы State Machine.
- Больше стандартных примитивов меша, чтобы дать вам блоки для построек (стены, двери, окна, лестницы и т.д.).
- Новый стандартный меш "Ramp".
Бесчисленные улучшения UI и UX редактора
В интерфейсе редактора и общем пользовательском опыте сделано огромное количество улучшений. Я выделю основные, а вы сможете исследовать остальные самостоятельно.
Новый интерфейс компонента UI элемента

Теперь гораздо проще и интуитивнее задавать позицию, масштаб и точки якоря UIElement. Также улучшена вкладка Behavior.
Улучшения редактора Python-скриптов
При открытии Python-скрипта из Asset Browser теперь весь скрипт можно редактировать в полноэкранном режиме прямо во вкладке Properties. Это избавляет от необходимости открывать скрипт в отдельной вкладке — писать код в редакторе Cave стало гораздо удобнее.

Появилась вкладка Inspect для просмотра содержимого скрипта, а инструменты редактора теперь имеют отдельную вкладку, где можно зарегистрировать, перезагрузить инструмент или запустить скрипт внутри редактора.
Улучшения редактора Shader Program
Как и с Python, теперь нет необходимости куда-то переходить для полноценного редактирования Shader Program. Вершинные и фрагментные шейдеры отображаются сразу во вкладке Properties. Но при желании их всё ещё можно открыть в отдельных вкладках.
Улучшения вкладки Консоли
Добавлена кнопка для копирования всех сообщений в буфер обмена — полезно при отладке или обмене выводом консоли с кем-то.
Proto Character и Vehicle в меню "New Entity..."

Если вы не удаляли Proto Character или Vehicle, которые теперь по умолчанию присутствуют в новых проектах, они появятся как опция для быстрого добавления на сцену при нажатии Shift + A.
Автоматическое создание Rigidbody
При перетаскивании меша на сцену из Asset Browser можно нажать Drag + Ctrl, чтобы автоматически создать rigid body для него.
Камера с управлением как в Blender (3D View)
Это, наверное, самая долгожданная функция с момента выпуска Cave Engine. При навигации в 3D виде можно использовать среднюю кнопку мыши для орбиты вокруг объектов, как в Blender.
Эта функция экспериментальная, поэтому если хотите сообщить о багах или предложить улучшения — пишите нам в Discord.
Улучшения системы State Machine

При написании кода переходов состояний теперь нет нужды обращаться к локальным переменным "from state" как к свойствам словаря. Их можно сразу использовать как локальные переменные.
Код перехода до обновления (пример):
result = state.get("myVar") == 3
После обновления (пример):
result = myVar == 3
Улучшения системы Path Component

Path Component и Path Tool были добавлены экспериментально в версии 1.3 и с тех пор сильно развились. В 1.4 основные новшества — новые методы PathComponent: GetSampleAdvance(...) и GenerateProceduralMesh(...).
Первый метод позволяет задать позицию и получить ближайшую точку на path component относительно неё, а также значение смещения. Это полезно для реализации следования персонажа, транспортного средства или других объектов по пути.
Второй метод, как видно из названия, принимает меш и процедурно размещает и генерирует новый меш вдоль пути, позволяя создавать дороги, стены, здания и многое другое.
Улучшения системы рельефа
Система terrain в Cave получила много улучшений в этой версии, и я могу уже сказать — теперь весь рельеф рендерится гораздо быстрее.

Теперь можно ОТМЕНИТЬ! (Ctrl + Z)
Наконец можно отменять изменения скульптинга или другие операции с рельефом через Terrain Tool. Это очень полезное улучшение удобства работы.
Оптимизация рендеринга terrain
Я снизил количество вызовов рисования для рендера terrain примерно в 100 раз, приблизив показатель к теоретическому минимуму. Также улучшены внутренние системы оптимизации рендера рельефа. Ожидайте улучшенную производительность.
Новый режим выравнивания по пути
Как говорилось ранее, система path получила много улучшений, что затронуло и terrain. Теперь есть режим выравнивания по path, который позволяет выбирать путь на сцене и использовать его для деформации рельефа. Отлично подходит для создания дорог и подобных объектов.
Улучшенное генерация heightmap
Стандартная генерация heightmap раньше была довольно посредственной, теперь она улучшена для создания более интересных ландшафтов. Также исправлена проблема с одинаковым seed, из-за чего рельефы всегда были одинаковыми.
Теперь seed можно задавать в коде, что обновит генерацию terrain соответственно.
Новый метод Terrain Raycasting
По заданным точкам начала и цели можно использовать компонент terrain для raycast проверки пересечения с рельефом, возвращая позицию и нормаль столкновения при наличии.
Улучшения производительности рендеринга
Внутренние системы OpenGL-кеширования были значительно усовершенствованы для снижения нагрузки на драйвер. У Cave Engine и раньше были развитые механизмы кеширования и оптимизации затрат драйвера, но теперь это поднялось на новый уровень.
В некоторых случаях удалось сократить нагрузку драйвера практически в тысячу раз по сравнению с предыдущими показателями. Итог зависит от вашей системы, но если раньше драйвер был узким местом, теперь вы можете заметить существенное улучшение производительности в этой версии.
Новые внутренние оптимизации включают в себя:
- Кэш связывания шейдерных программ
- Кэширование значений uniform
- Логика инвалидирования кэша
Эти изменения уменьшают избыточные вызовы OpenGL и улучшают производительность рендеринга.
Кроме того:
- Улучшена безопасность связывания uniform
- Возможное решение проблем с очисткой глубины на AMD
Исправления для версии на Linux
Я также исправил многочисленные проблемы с путями Python, с которыми сталкивались некоторые пользователи Linux при использовании движка, особенно при создании нового проекта.
Новые Python API
С большинством вышеперечисленных функций были добавлены или обновлены новые Python API, но есть и многое другое. Вот несколько из них.
VehicleComponent.SetSteering(...)
Mesh.AddMeshAsLod(...)
PathComponent.GenerateProceduralMesh(...)
PathComponent.GetSampleAdvance(...)
PathEdge.GetPointA()
PathEdge.GetPointB()
Transform.AlignAxis(...)
Также были добавлены новые опции для VSync и ограничения FPS. Ознакомьтесь с заглушками Python, чтобы увидеть все нововведения.
Больше API в cave.ui и улучшенная разработка инструментов
Если вы любите или нуждаетесь писать пользовательские инструменты для редактора, чтобы помочь при разработке игр, ваша жизнь стала лучше. Теперь вы можете ознакомиться с API заглушками из нашего кода cave.ui и рассчитывать на более стабильную работу инструментов редактора. Вкладки отладки теперь перезагружаются при перезагрузке игры.
Исправления ошибок
В этот релиз вошли следующие исправления:
- Исправлены проблемы экспорта на Linux
- Исправлен сбой на Linux из-за неправильного пути Python
- Исправлена ошибка, из-за которой высотная карта terrain всегда генерировалась с одинаковым результатом
- Исправлен сбой рекурсии при перезагрузке шаблона
- Исправлены чёрные миниатюры при использовании ручной экспозиции
- Исправлен некорректный код по умолчанию для DebugTab
- Исправлена невозможность редактирования CodeEditor при пустой строке
- Исправлены некорректные AABB границы у анимированных мешей
- Исправлены ошибки отсечения чанков terrain
- Исправлены пропавшие ссылки на компонент StateMachine
- Исправлены опечатки в UI редактора
- Исправлены опечатки в документации
- Исправлен сбой EntityMap
- Исправлены проблемы подсветки строк в CodeEditor
- Исправлена подсветка комментариев в CodeEditor после строк
- Исправлена реализация копирования в буфер обмена, теперь используется SDL
Известные проблемы
Есть несколько известных проблем, о которых стоит упомянуть. Они не исправлены либо из-за низкого приоритета, либо потому что нам не удалось их постоянно воспроизвести. Если у вас есть идеи по ним, пожалуйста, сообщите в нашем Discord сервере.
- Cave не работает на некоторых (или большинстве) системах Linux с Wayland (в настоящее время поддерживается только X11).
- Иногда чанки terrain исчезают в зависимости от угла камеры (ложное срабатывание отсечения). Это очень редкий глюк, и мне пока не удалось его воспроизвести.