Вышел Bevy 0.20: трассировка путей Solari на macOS и новый синтаксис BSN

Вышел Bevy 0.20: трассировка путей Solari на macOS и новый синтаксис BSN

8 октября 2026 года команда Bevy Contributors объявила о выходе Bevy 0.20, открытого игрового движка на Rust с data-driven подходом (архитектурой, управляемой данными). В релизе, по словам авторов, участвовали 227 контрибьюторов и 817 pull request'ов. Предыдущая версия вышла «несколько месяцев назад». Для перехода с 0.19 есть руководство по миграции.

Главное, рендерер Solari, трассировщик путей Bevy, работающий в реальном времени. Качество изображения выросло: благодаря улучшениям реализации ReSTIR освещение стало практически несмещённым (более точным), тени у движущихся объектов больше не отстают, а отражения заметно меньше «мерцают» в движении, особенно у неметаллических материалов. Одновременно ReSTIR теперь необязателен и по умолчанию выключен: по оценке авторов, DLSS-RR стал очень хорош, а ReSTIR во многих сценах съедает заметную долю производительности без значительного выигрыша в качестве. Кому нужен прежний результат, включить SolariLighting::restir. Без ReSTIR в сценах с множеством источников света ожидается более низкое качество теней и пропадающие тени в движении; команда ищет более дешёвые способы выборки света. Кроме того, код управления сценой в Solari переведён в режим retained (как оптимизации retained render world в прежних версиях Bevy) и сильно оптимизирован, что заметно снизило нагрузку на процессор (конкретных цифр в тексте нет). В SolariLighting появились настройки: размер мирового кэша, число световых выборок на пиксель, временное накопление и число отскоков лучей.

Solari теперь поддерживает освещение от Atmosphere и EnvironmentMapLights на камерах, в дополнение к DirectionalLight и излучающим мешам; поддержку PointLight, SpotLight и RectLight авторы надеются добавить в ближайшем будущем. Solari заработал на macOS через Metal, но встроенного шумоподавителя для macOS в bevy_solari пока нет; MetalFX Ray Reconstruction названа возможным решением, помощь сообщества приветствуется. Крейт dlss_wgpu обновлён и поддерживает DLSS-RR 4.5, что заметно улучшает шумоподавление. Тем, кто использовал DLSS в Bevy 0.19, нужно скачать и настроить новейшую версию DLSS SDK, иначе будут ошибки компиляции.

Второй блок, BSN, новая система сцен Bevy. Синтаксис переделан, после чего, как надеются авторы, он «в основном устоится». Теперь все ссылки на сцены в bsn! требуют префикса @ (@scene_variable, @scene_function(), @SceneComponent, @{scene_expression}). Обёртки template_value больше не нужны для значений компонентов, вызовов функций и цепочек методов вроде Transform::from_xyz(...).looking_at(...). Перечисления (enum) работают без VariantDefaults и FromTemplate, если реализуют Default и Clone; ценой становится то, что в bsn! у вариантов enum нужно указывать все поля. Для списков сущностей вместо запятых и скобок () теперь используется разделитель --; старые варианты объявлены устаревшими. Скобки [] и () для bsn_list! и bsn! не рекомендуются, так как rustfmt портит форматирование; вместо них советуют bsn_list! {}, которого rustfmt не касается. Авторы планируют собственный автоформатер BSN.

Далее, событие Ready: оно срабатывает для каждой сущности спавненной сцены «снизу вверх», когда выполнена вся логика спавна, включая потомков. Это нужно для самодостаточных составных сцен и для наложения логики Bevy на другие представления сцен, например glTF.

У Feathers, редакторского UI-набора Bevy, появились виджеты Color Input (выбор цвета с цветовым кругом, RGB и HSL и сеткой недавних цветов), прокручиваемый список с выбором, выпадающий список и Lazy Menu (создаёт меню при открытии и удаляет при закрытии). Числовое поле теперь можно «скрабить» перетаскиванием, с жёсткими и мягкими пределами. В bevy_ui_widgets добавлены headless-вкладки (TabList и Tab) без встроенного оформления, с поддержкой клавиатуры и доступности.

Кроме того, среди главных новинок: Bevy официально принял язык шейдеров WESL (стандартизированное расширение WGSL) и теперь пишет шейдеры на нём; также добавлены пользовательские шейдерные материалы для спрайтов, расширяемые 2D-материалы для мешей, как в 3D, и камера pan orbit для навигации по сценам в стиле CAD. Исходный текст на этом месте обрывается, поэтому подробности о WESL, спрайтовых материалах и камере здесь не раскрыты.

Ключевые факты

  • Bevy 0.20 вышел 8 октября 2026 года: в релизе участвовали 227 контрибьюторов и 817 pull request'ов; движок бесплатный и с открытым исходным кодом.
  • Рендерер Solari ускорен, стал точнее и заработал на macOS через Metal; встроенного шумоподавителя для macOS пока нет, ReSTIR теперь выключен по умолчанию.
  • Синтаксис сцен BSN переработан: префикс @ для сцен, отказ от template_value, разделитель -- в списках сущностей; запятые и () объявлены устаревшими.
  • Добавлено событие Ready для сущностей сцены и новые виджеты Feathers: Color Input, список, выпадающий выбор, Lazy Menu, вкладки без оформления.
  • Bevy официально перешёл на язык шейдеров WESL; в 0.20 также появились материалы для спрайтов и камера pan orbit.

Почему это важно

Bevy, один из заметных игровых движков на Rust, и 0.20 закрепляет две его ставки: трассировку путей в реальном времени (Solari) и собственную систему описания сцен BSN. Выход Solari на macOS через Metal расширяет круг платформ, а выбор по умолчанию в пользу DLSS-RR вместо ReSTIR показывает, как авторы балансируют качество и производительность. Для BSN релиз, попытка наконец стабилизировать синтаксис: по словам авторов, после этих правок он «в основном устоится».

Кому это важно

Прежде всего разработчикам, которые уже пишут на Bevy и должны мигрировать с 0.19: у них изменится синтаксис bsn!, настройки Solari и, при использовании DLSS, версия SDK. Также интересно тем, кто присматривается к Rust для игр и инструментов, и авторам редакторских интерфейсов, для них в Feathers добавлены новые виджеты. К нейросетям релиз прямого отношения не имеет.

Как это применить

Движок бесплатный и с открытым исходным кодом; для старта есть Quick Start Guide, а для обновления существующего проекта, руководство по миграции с 0.19 на 0.20. Если использовали Solari в 0.19, проверьте, не страдает ли сцена без ReSTIR, и при необходимости включите SolariLighting::restir. Пользователям DLSS нужно установить новейший DLSS SDK. В BSN уберите обёртки template_value, добавьте @ к ссылкам на сцены и перейдите на разделитель -- в списках; для enum укажите все поля вариантов.

Можно ли доверять

Это официальное объявление релиза от самих разработчиков (подпись Bevy Contributors), то есть первоисточник, но оценки качества («значительно лучше», «очень хорош») принадлежат авторам и не подкреплены замерами: цифр по производительности Solari или снижению нагрузки на процессор в видимом тексте нет. Технические подробности по Solari авторы выносят в блог JMS55. Текст источника обрывается на разделе про WESL, поэтому часть релиза здесь не пересказана.

Риски и подводные камни

Релиз содержит несовместимые изменения: синтаксис BSN меняется, () и запятые устарели, а у enum в bsn! больше нельзя опускать поля. Без ReSTIR в сценах со многими источниками света возможны худшие тени и пропадающие тени в движении. На macOS в Solari нет встроенного шумоподавителя. Solari пока не поддерживает PointLight, SpotLight и RectLight; сроки, только «в ближайшем будущем». Обновление DLSS без нового SDK приведёт к ошибкам компиляции.

«Не волнуйтесь, мы планируем создать автоформатер для BSN!»

— Bevy Contributors, объявление о выходе Bevy 0.20