เกมเอนจินโอเพนซอร์ส

เกมเนทีฟที่สร้างด้วย TypeScript

เขียน TypeScript ส่งมอบเกมเนทีฟ ไม่ต้องใช้เบราว์เซอร์ ไม่ต้องใช้ C++ Bloom คอมไพล์เกมของคุณแบบ ahead-of-time และรันบน 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 ไม่มีรันไทม์ของเบราว์เซอร์ โค้ดของคุณถูกคอมไพล์แบบ ahead-of-time ด้วยคอมไพเลอร์ Perry และทำงานบนคอร์ที่เขียนด้วย Rust

API เรียบง่าย

API ทั้งหมดอยู่ในชีตเดียว ไม่มีคลาส ไม่มีการสืบทอด ไม่มีอะไรลึกลับ มีเพียงฟังก์ชันที่คุณเรียกใช้

เนทีฟอย่างแท้จริง

เรนเดอเรอร์เดียว สี่แบ็กเอนด์ — Metal, DirectX 12, Vulkan และ WebGPU พร้อมวัสดุ PBR, เงาแบบ cascaded, TAA และ post-FX ในตัว

ส่งมอบได้ทุกที่

macOS, Windows, Linux, iOS, tvOS และเว็บจากโค้ดเบสเดียว พร้อมส่งขึ้น Steam, App Store และ itch.io

ทุกสิ่งที่คุณต้องการ

เก้าระบบย่อยแบบโมดูลาร์ แต่ละตัวสามารถนำเข้าได้อิสระ ใช้เฉพาะที่คุณต้องการ

Core

การสร้างหน้าต่าง, ลูปเกม, การจัดการอินพุต, การจับเวลา และการควบคุมเฟรม

bloom/core

Shapes

การวาดรูปทรง 2D — เส้น, สี่เหลี่ยม, วงกลม, รูปหลายเหลี่ยม — พร้อมการตรวจจับการชน

bloom/shapes

Textures

การโหลดรูปภาพ, การจัดการเท็กซ์เจอร์, การทำสไปรต์แบตช์ และ render-to-texture

bloom/textures

Text

การโหลดฟอนต์ TTF และ OTF, การเรนเดอร์ข้อความ และการวัดขนาด

bloom/text

Audio

เอฟเฟกต์เสียง, การสตรีมเพลง, เสียงเชิงตำแหน่ง 3D, WAV / OGG / MP3

bloom/audio

Models

การโหลด glTF 2.0, แอนิเมชันโครงกระดูกบน GPU, วัสดุ PBR และเมชพื้นฐาน

bloom/models

Math

เวกเตอร์, เมทริกซ์, ควอเทอร์เนียน, ฟังก์ชัน easing และการสุ่มตัวเลข

bloom/math

Physics

วัตถุแข็งและอ่อนที่ขับเคลื่อนด้วย Jolt, ตัวควบคุมตัวละคร, ยานพาหนะ, raycast และข้อจำกัด

bloom/physics

Scene

ซีนกราฟแบบ retained-mode — การแปลง, การมองเห็น, เงา และการผูกวัสดุ

bloom/scene

โค้ดเบสเดียว ทุกแพลตฟอร์ม

Bloom เชื่อมต่อกับ API กราฟิกเนทีฟของแต่ละแพลตฟอร์มผ่านเรนเดอเรอร์เดียวที่ใช้ wgpu โค้ด TypeScript ของคุณคอมไพล์เป็นไบนารีจริง — หรือเป็นบันเดิล WASM สำหรับเว็บ

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

อะไรใหม่

Bloom กำลังพัฒนาอย่างต่อเนื่อง — กว่า 300 commit ในไม่กี่สัปดาห์ที่ผ่านมา ไฮไลต์ล่าสุด:

Renderer

Auto-DRS และ CAS sharpen

Dynamic render scale ปรับอัตโนมัติให้ตรงกับ FPS เป้าหมายของคุณ พร้อม upscale และ RCAS sharpen pass เพื่อให้ภาพคมชัดที่ความละเอียดเศษส่วน

Materials

Planar reflection พร้อม texture array

การสะท้อนแบบกระจกบนระนาบด้วย oblique-clip และ IBL เป็นทางสำรอง พื้นผิวภูมิประเทศแบบ splat-mapped ผ่านการผูก texture-array พร้อม mips

Tools

Imposter baker CLI

Atlas แบบ octahedral สำหรับ LOD ระยะไกล — ส่งมอบป่าหนาทึบและฝูงชนได้โดยไม่ทำให้งบ draw-call ล้น

Post-FX

Post pass ที่ซ้อนได้

ACES / AgX tone mapping, auto-exposure, bloom, DoF, motion blur, SSGI, SSAO, TAA — ประกอบผ่าน ping-pong render target

Platform

HiDPI ข้ามแพลตฟอร์ม

Windows, Linux และเว็บใช้การจัดการ HiDPI แบบเดียวกับที่ macOS และ iOS มีอยู่แล้ว UI ของคุณยังคมชัดบนทุกจอแสดงผล

DX

WGSL shader hot reload

บันทึก shader แล้วเห็นผลในเวลาน้อยกว่าหนึ่งวินาที วัสดุคอมไพล์ใหม่แบบในที่ระหว่างการพัฒนา

รูปแบบที่คุ้นเคย พลังเนทีฟ

อินเทอร์เฟซธรรมดา, ฟังก์ชันบริสุทธิ์, ไม่มีอะไรลึกลับ ถ้าคุณรู้ 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 เป็นโอเพนซอร์สและฟรี กระโดดเข้ามา สร้างอะไรสักอย่าง และส่งมอบมันได้ทุกที่