オープンソースゲームエンジン

ネイティブゲームを TypeScript

TypeScript で書き、ネイティブゲームを出荷します。ブラウザも C++ も不要です。Bloom はゲームを事前コンパイルし、Metal、DirectX 12、Vulkan、WebGPU 上で動作させます。1 つのコードベースで 6 つのターゲット、本格的な 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 全体がチートシート 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 バンドルへコンパイルされます。

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

新着情報

Bloom は活発に開発中です — ここ数週間だけで 300 以上のコミットがあります。最近のハイライト:

Renderer

Auto-DRS と CAS シャープニング

ターゲット FPS に合わせて動的レンダースケールが自動調整され、アップスケールと RCAS シャープニングパスにより、分数解像度でも鮮明さを保ちます。

Materials

プラナーリフレクション + テクスチャ配列

斜めクリップと IBL フォールバックを備えた鏡面のようなプラナーリフレクション。ミップ付きテクスチャ配列バインディングによるスプラットマップ地形。

Tools

インポスターベイカー CLI

遠景 LOD 用の八面体アトラス — ドローコール予算を圧迫することなく、密集した森や群衆を出荷できます。

Post-FX

スタック可能なポストパス

ACES / AgX トーンマッピング、自動露出、ブルーム、被写界深度、モーションブラー、SSGI、SSAO、TAA — ピンポンレンダーターゲットで構成されます。

Platform

クロスプラットフォーム HiDPI

Windows、Linux、Web も、macOS と iOS が既に備えていたのと同じ HiDPI 処理を共有するようになりました。あらゆるディスプレイで UI が鮮明に表示されます。

DX

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();

ゲームを作る準備はできましたか?

Bloom はオープンソースで無料です。飛び込んで、何かを作って、あらゆる場所に出荷しましょう。