开源游戏引擎

原生游戏,源自 TypeScript

编写 TypeScript,发布原生游戏。无需浏览器,无需 C++。Bloom 会提前编译你的游戏,并在 Metal、DirectX 12、Vulkan 和 WebGPU 上运行 —— 一套代码库,六个目标平台,开箱即用的真正 PBR 渲染与物理。

main.ts
import { initWindow, windowShouldClose,
         beginDrawing, endDrawing,
         clearBackground, drawText,
         Colors } from "bloom";

initWindow(800, 450, "My Game");

while (!windowShouldClose()) {
  beginDrawing();
  clearBackground(Colors.RAYWHITE);
  drawText("Hello, Bloom!",
    190, 200, 20, Colors.DARKGRAY);
  endDrawing();
}
0 运行时开销
6 目标平台
9 模块化子系统
1 需要维护的代码库

为什么选择 Bloom?

Bloom 是唯一一款让你用 TypeScript 编写并发布真正原生游戏的引擎。无需 Electron、无需 WebView、无需浏览器运行时。你的代码由 Perry 编译器提前编译,并基于 Rust 核心运行。

简洁 API

整个 API 一张速查表就能装下。没有类,没有继承,没有黑魔法,只有你调用的函数。

真正原生

一套渲染器,四个后端 —— Metal、DirectX 12、Vulkan 和 WebGPU。开箱即用的 PBR 材质、级联阴影、TAA 与后处理特效。

处处可发布

一套代码库即可覆盖 macOS、Windows、Linux、iOS、tvOS 和 Web。Steam、App Store 和 itch.io 均可发布。

你需要的一切

九个模块化子系统,均可独立导入。只用你需要的部分。

Core

窗口创建、游戏循环、输入处理、计时与帧控制。

bloom/core

Shapes

2D 图形绘制 —— 直线、矩形、圆形、多边形 —— 以及碰撞检测。

bloom/shapes

Textures

图像加载、纹理管理、精灵批处理与渲染到纹理。

bloom/textures

Text

TTF 与 OTF 字体加载、文本渲染与度量。

bloom/text

Audio

音效、音乐流播放、3D 位置音频,支持 WAV / OGG / MP3。

bloom/audio

Models

glTF 2.0 加载、GPU 骨骼动画、PBR 材质、网格基本体。

bloom/models

Math

向量、矩阵、四元数、缓动函数与随机数生成。

bloom/math

Physics

由 Jolt 驱动的刚体与软体、角色控制器、载具、射线检测、约束。

bloom/physics

Scene

保留模式场景图 —— 变换、可见性、阴影、材质绑定。

bloom/scene

一套代码库,所有平台。

Bloom 通过单一的 wgpu 渲染器在每个平台上映射到原生图形 API。你的 TypeScript 编译为真正的二进制文件 —— 或为 Web 编译为 WASM 包。

macOS
Metal
Windows
DirectX 12
Linux
Vulkan
iOS
Metal
tvOS
Metal
Web
WebGPU / WASM

最新动态

Bloom 正在积极开发中 —— 仅最近几周就有 300 多次提交。近期亮点:

Renderer

Auto-DRS 与 CAS 锐化

动态渲染缩放会自动调整以匹配你的目标 FPS,并通过升采样加 RCAS 锐化通道在分数分辨率下保持清晰。

Materials

平面反射 + 纹理数组

类似镜面的平面反射,支持斜裁剪与 IBL 回退。通过带 mips 的纹理数组绑定实现地形 splat 贴图。

Tools

Imposter baker 命令行工具

为远距离 LOD 烘焙八面体图集 —— 在不撑爆绘制调用预算的前提下发布茂密森林与人群。

Post-FX

可堆叠的后处理通道

ACES / AgX 色调映射、自动曝光、bloom、景深、运动模糊、SSGI、SSAO、TAA —— 通过乒乓渲染目标进行组合。

Platform

跨平台 HiDPI

Windows、Linux 和 Web 现在共享与 macOS、iOS 一致的 HiDPI 处理方式。你的 UI 在每种显示器上都保持锐利。

DX

WGSL 着色器热重载

保存着色器,一秒内即可看到效果。开发期间材质会就地重新编译。

熟悉的模式,原生的力量

纯接口、纯函数,零黑魔法。如果你懂 TypeScript,你就懂 Bloom。

2D 图形与碰撞

import { drawRect, drawCircle,
         checkCollisionRecs } from "bloom/shapes";

drawRect(100, 100, 200, 80, Colors.GREEN);
drawCircle(400, 300, 50, Colors.GOLD);

if (checkCollisionRecs(player, enemy)) {
  playSound(hitSound);
}

3D 相机与模型

const camera: Camera3D = {
  position: { x: 10, y: 10, z: 10 },
  target: { x: 0, y: 0, z: 0 },
  up: { x: 0, y: 1, z: 0 },
  fovy: 45, projection: 0
};

beginMode3D(camera);
drawModel(tree, { x: 0, y: 0, z: 0 });
drawGrid(10, 1);
endMode3D();

准备好开发你的游戏了吗?

Bloom 开源且免费。加入进来,做点东西,然后发布到任何平台。