Свет в конце пайплайна: 3D-движок на чистом Dart (+gpu)
flutter3d — это полноценный 3D-движок, написанный на чистом Dart. Никакого FFI, никаких нативных библиотек для физики или звука. Всё работает через новый API Flutter GPU, который дает прямой доступ к Metal и Vulkan. Проект уже включает физику, коллизии, аудио-микшер и три играбельные игры, доступные прямо в браузере.
Архитектура построена вокруг слоя аппаратной абстракции (HAL). Это позволяет использовать три взаимозаменяемых бэкенда: Impeller (основной, через Flutter GPU), WebGL2 (для веба) и CPU-растеризатор (чистый Dart без GPU). Последний бэкенд служит эталоном: он позволяет запускать попиксельные тесты в CI без видеокарты, что выявило ошибку в WebGL-бэкенде, где 19% пикселей расходились с эталоном.
⚠️ Flutter GPU накладывает жесткие ограничения. Нет рантайм-компиляции шейдеров — все материалы должны быть известны на этапе сборки. Нельзя сэмплировать depth-текстуры, поэтому карты теней записываются в цветовые буферы. Также есть проблема «stale bindings»: при смене пайплайна старые привязки могут вызывать визуальные артефакты, что решается принудительной очисткой состояния.
💡 Инженерные решения здесь впечатляют. Вместо dirty-флагов используется версионирование трансформаций, что исключает ошибки при обновлении матриц. Горячий цикл кадра оптимизирован под сборщик мусора Dart: нет обхода дерева сцены, списки отрисовки переиспользуются, а ключи сортировки хранятся в типизированных массивах.
⚡️ Производительность на высоте. Десктопный шутер с шестью источниками света, PBR-материалами и эффектом bloom держит 120 FPS даже в debug-сборке на ноутбуке. Реализованы каскадные карты теней, HDR-конвейер с bloom и детерминированная симуляция с фиксированным шагом.
🎮 Практическое применение уже доказано. Игра Coin Climb написана всего на ~600 строк кода, из которых 36 строк — это описание уровня в JSON. Жанровая механика (двойной прыжок, coyote time) вынесена в отдельные пакеты, что позволяет создавать игры без изменения ядра движка.
Проект находится на версии 0.4.0 и активно ищет вкладчиков. Приоритетны новые жанровые пакеты и тестирование на разных GPU. Если вы хотите писать 3D-игры на Dart без выхода за пределы экосистемы Flutter — это стоит попробовать.
🔗 Полезные ссылки
flutter3d на pub.dev
Исходный код на GitHub
Документация и пакеты
🔗 Полезные ссылки
📦 flutter3d
💻 coin_climb
💻 flutter3d
📚 pleion.dev
📰 Читать оригинал на Habr
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr
Post #3065
380
- ❤ 2