オープンソースゲームエンジン
ネイティブゲームを TypeScript
TypeScript で書き、ネイティブゲームを出荷します。ブラウザも C++ も不要です。Bloom はゲームを事前コンパイルし、Metal、DirectX 12、Vulkan、WebGPU 上で動作させます。1 つのコードベースで 6 つのターゲット、本格的な PBR レンダリングと物理演算を標準で備えます。
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();
} なぜ Bloom なのか?
Bloom は TypeScript で書いて真にネイティブなゲームを出荷できる唯一のゲームエンジンです。Electron も WebView もブラウザランタイムも使いません。コードは Perry コンパイラによって事前コンパイルされ、Rust コアの上で動作します。
シンプルな API
API 全体がチートシート 1 枚に収まります。クラスも継承も魔法もありません。呼び出すのは関数だけです。
真のネイティブ
1 つのレンダラーに 4 つのバックエンド — Metal、DirectX 12、Vulkan、WebGPU。PBR マテリアル、カスケードシャドウ、TAA、ポストエフェクトを標準搭載しています。
あらゆる場所へ出荷
macOS、Windows、Linux、iOS、tvOS、Web を 1 つのコードベースから。Steam、App Store、itch.io にすぐ対応できます。
必要なものはすべて揃っています
9 つのモジュール式サブシステムが、それぞれ独立してインポート可能です。必要なものだけをご利用いただけます。
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 1 つのコードベース。あらゆるプラットフォーム。
Bloom は単一の wgpu ベースのレンダラーを通じて、各プラットフォームのネイティブグラフィックス API へマッピングされます。TypeScript は本物のバイナリへ — もしくは Web 向けの WASM バンドルへコンパイルされます。
新着情報
Bloom は活発に開発中です — ここ数週間だけで 300 以上のコミットがあります。最近のハイライト:
Auto-DRS と CAS シャープニング
ターゲット FPS に合わせて動的レンダースケールが自動調整され、アップスケールと RCAS シャープニングパスにより、分数解像度でも鮮明さを保ちます。
プラナーリフレクション + テクスチャ配列
斜めクリップと IBL フォールバックを備えた鏡面のようなプラナーリフレクション。ミップ付きテクスチャ配列バインディングによるスプラットマップ地形。
インポスターベイカー CLI
遠景 LOD 用の八面体アトラス — ドローコール予算を圧迫することなく、密集した森や群衆を出荷できます。
スタック可能なポストパス
ACES / AgX トーンマッピング、自動露出、ブルーム、被写界深度、モーションブラー、SSGI、SSAO、TAA — ピンポンレンダーターゲットで構成されます。
クロスプラットフォーム HiDPI
Windows、Linux、Web も、macOS と iOS が既に備えていたのと同じ HiDPI 処理を共有するようになりました。あらゆるディスプレイで UI が鮮明に表示されます。
WGSL シェーダーホットリロード
シェーダーを保存すれば、結果が 1 秒以内に反映されます。開発中はマテリアルがその場で再コンパイルされます。
馴染みのあるパターン、ネイティブのパワー
プレーンなインターフェース、純粋関数、魔法はゼロ。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();