오픈 소스 게임 엔진

네이티브 게임을 만드는 언어, TypeScript

TypeScript로 작성하고, 네이티브 게임으로 출시하세요. 브라우저도, C++도 필요 없습니다. Bloom은 게임을 사전 컴파일(AOT)하여 Metal, DirectX 12, Vulkan, WebGPU에서 실행합니다 — 하나의 코드베이스로 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가 치트시트 한 장에 들어갑니다. 클래스도, 상속도, 마법 같은 동작도 없습니다. 호출하는 함수들뿐입니다.

진짜 네이티브

하나의 렌더러, 네 개의 백엔드 — Metal, DirectX 12, Vulkan, WebGPU. PBR 머티리얼, 캐스케이드 섀도, TAA, 포스트 이펙트가 기본 제공됩니다.

모든 곳으로 출시

macOS, Windows, Linux, iOS, tvOS, 웹까지 하나의 코드베이스로. 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

하나의 코드베이스. 모든 플랫폼.

Bloom은 단일 wgpu 기반 렌더러를 통해 각 플랫폼의 네이티브 그래픽 API에 매핑됩니다. TypeScript는 진짜 바이너리로 컴파일됩니다 — 또는 웹용 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, 웹도 이제 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은 오픈 소스이며 무료입니다. 바로 뛰어들어 무언가를 만들고, 어디든 출시하세요.