เกมเอนจินโอเพนซอร์ส
เกมเนทีฟที่สร้างด้วย TypeScript
เขียน TypeScript ส่งมอบเกมเนทีฟ ไม่ต้องใช้เบราว์เซอร์ ไม่ต้องใช้ C++ Bloom คอมไพล์เกมของคุณแบบ ahead-of-time และรันบน Metal, DirectX 12, Vulkan และ WebGPU — โค้ดเบสเดียว หกแพลตฟอร์มเป้าหมาย พร้อมการเรนเดอร์ 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 ไม่มีรันไทม์ของเบราว์เซอร์ โค้ดของคุณถูกคอมไพล์แบบ 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 สำหรับเว็บ
อะไรใหม่
Bloom กำลังพัฒนาอย่างต่อเนื่อง — กว่า 300 commit ในไม่กี่สัปดาห์ที่ผ่านมา ไฮไลต์ล่าสุด:
Auto-DRS และ CAS sharpen
Dynamic render scale ปรับอัตโนมัติให้ตรงกับ FPS เป้าหมายของคุณ พร้อม upscale และ RCAS sharpen pass เพื่อให้ภาพคมชัดที่ความละเอียดเศษส่วน
Planar reflection พร้อม texture array
การสะท้อนแบบกระจกบนระนาบด้วย oblique-clip และ IBL เป็นทางสำรอง พื้นผิวภูมิประเทศแบบ splat-mapped ผ่านการผูก texture-array พร้อม mips
Imposter baker CLI
Atlas แบบ octahedral สำหรับ LOD ระยะไกล — ส่งมอบป่าหนาทึบและฝูงชนได้โดยไม่ทำให้งบ draw-call ล้น
Post pass ที่ซ้อนได้
ACES / AgX tone mapping, auto-exposure, bloom, DoF, motion blur, SSGI, SSAO, TAA — ประกอบผ่าน ping-pong render target
HiDPI ข้ามแพลตฟอร์ม
Windows, Linux และเว็บใช้การจัดการ HiDPI แบบเดียวกับที่ macOS และ iOS มีอยู่แล้ว UI ของคุณยังคมชัดบนทุกจอแสดงผล
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 เป็นโอเพนซอร์สและฟรี กระโดดเข้ามา สร้างอะไรสักอย่าง และส่งมอบมันได้ทุกที่