Fluorite: Toyota построила игровой движок консольного уровня на Flutter и Dart
Fluorite -- это игровой движок 3D с открытым исходным кодом, встраивающий рендеринг Google Filament в виджеты Flutter и позволяющий писать игровую логику на Dart.
Toyota Connected North America открыла исходный код Fluorite, игрового движка 3D, полностью работающего внутри Flutter. Он был представлен на FOSDEM 2026 в Брюсселе и с тех пор привлекает внимание на Hacker News. Предложение: рендеринг консольного уровня, ECS-ядро на C++ и игровая логика, написанная на Dart с использованием стандартного инструментария Flutter.
Почему Flutter для игрового движка
Toyota нужны были интерактивные 3D-впечатления для цифровых кабин и приборных панелей в автомобиле. Unity и Unreal несут затраты на лицензирование и ресурсный вес, не подходящие для встроенного автомобильного оборудования. Накладные расходы на запуск Godot были ещё одной заботой. Flutter уже был в их стеке для работы с UI, поэтому они построили слой рендеринга поверх него, вместо того чтобы вводить второй фреймворк.
Результат — Fluorite: тонкое ECS (Entity-Component-System) ядро на C++ для критичной к производительности работы, с Google Filament, обрабатывающим PBR-рендеринг через Vulkan, и Dart в качестве скриптового языка для игровой логики.
FluoriteView и интеграция с Flutter
Ключевая точка интеграции — виджет FluoriteView. Вы помещаете его в дерево виджетов Flutter, и он рендерит живую сцену 3D:
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: [
FluoriteView(
scene: myScene,
onReady: (controller) {
controller.loadModel('assets/car_interior.glb');
},
),
Positioned(
bottom: 16,
right: 16,
child: ElevatedButton(
onPressed: () => setState(() => _lightsOn = !_lightsOn),
child: Text(_lightsOn ? 'Lights Off' : 'Lights On'),
),
),
],
),
);
}
Несколько виджетов FluoriteView могут одновременно рендерить одну и ту же сцену с разных углов камеры. Состояние перетекает между игровыми сущностями и виджетами Flutter с использованием тех же шаблонов, что вы уже применяете: setState, провайдеры или любой подход к управлению состоянием, на который опирается ваше приложение.
Сенсорные зоны, определённые моделью
Одна особенность, которая выделяется для автомобильного использования, — это сенсорные зоны, определённые моделью. 3D-художники маркируют кликабельные области прямо в Blender. Во время выполнения Fluorite раскрывает эти теги как источники событий, так что разработчик может слушать onClick на конкретной ручке или элементе управления приборной панели, не определяя вручную геометрию hit-test в коде.
Hot reload работает
Поскольку Fluorite работает внутри Flutter, hot reload flutter run применяется и к изменениям сцены. Измените раскладку виджета, настройте параметр источника света или замените ссылку на модель, и обновление отразится за несколько кадров. Это значительное преимущество рабочего процесса по сравнению с движками, где для просмотра изменений нужна полная перекомпиляция.
За пределами приборной панели
Движок нацелен на мобильные, настольные, встроенные и потенциально консольные платформы. Toyota построила его для машин, но архитектура не ограничивает его этой областью. Любой проект Flutter, которому нужен 3D с аппаратным ускорением, подумайте о конфигураторах продуктов, архитектурных прогулках или простых играх, может использовать Fluorite, не покидая экосистему Dart.
Проект доступен на fluorite.game под открытой лицензией. Если вы уже поставляете Flutter и нуждаетесь в 3D без прививки второго runtime движка, Fluorite стоит оценить.