Leefield
GPU-ветер и погода для игр в реальном времени
Поле ветра, которое знает о препятствиях, — и всё, что оно несёт: дым, пыль, снег, дождь, туман, огонь и траву. Каждая модель проверена по протоколу, записанному до кода.
В большинстве игр ветер — один вектор на весь мир. Leefield считает на видеокарте полное поле ветра вокруг игрока, и мир реагирует на свою форму: за домом затишье, между двумя зданиями воздух разгоняется, закручивается в вихри и переваливает через холм.
Эффекты едут на том же ветре: объёмный дым за домом, пыль от колёс, взрывов и выстрелов, метель и сугробы, дождь на стекле, туман, искры, пожар по траве и лесу с тушением водой и перелётом искр через просеку, вспышка в помещении и огненный шар, трава с волнами по полю. Игровой код читает ветер пробами, шейдеры — прямо из текстуры.
Для сетевых игр есть общий ветер и режиссёр погоды: у всех игроков побитово одинаковая погода на любом процессоре. Для слабых видеокарт — регулятор бюджета кадра и пресеты качества: на встроенной графике по умолчанию включается лёгкий режим.
Каждая модель проверяется по протоколу, записанному до кода: пороги замораживаются, провалы записываются честно. Сверки — опыты в аэродинамической трубе (EnFlo), полевые измерения пшеницы, часовые наблюдения метеостанции KNMI за 30 лет, опыты с огненными шарами и вспышками в помещении.
Leefield вырос из ветрового движка нашей игры про ветропарки и стал отдельной библиотекой для Bevy, браузера и других движков через C API.
Что умеет
- 2D-ветер на решёточном методе Больцмана, который следует за игроком, и 3D-область вокруг зданий для потока над крышами
- Объёмный дым, пыль с запасами (колёса, взрывы, выстрелы), дождь на стекле, снег с метелью, старением и сугробами, туман, искры
- Пожар по траве, кустарнику и лесу: по ветру и склону, тушение водой, перелёт искр через просеку, дождь мочит топливо
- Вспышка в помещении, огненный шар, дульная волна, нагрев металла
- Трава и колосья: изгиб с насыщением и бегущие волны по полю
- Общий ветер и режиссёр погоды для мультиплеера — одинаково на macOS, Linux, Windows и в браузере
- Регулятор бюджета кадра и пресеты качества для встроенной графики
- Плагин для Bevy, браузер на WebGPU (Rust → WASM, отрисовка three.js), C API для Unity и Godot; шейдеры переносятся в HLSL, GLSL и SPIR-V