Start Debugging

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 стоит оценить.

< Назад