This project aims to create a game engine using WebGPU + Typescript. It should provide all the necessary abstractions and systems to build a simple 3D game.
- ✅ Modular project structure (
src/
is now cleanly organized intocore/
,render/
,scene/
, etc.) - ✅ Build tooling (Vite/Webpack) (
vite
with TypeScript + Prettier) - ✅ WebGPU adapter check (
initWebGPU.ts
&WebGPUDeviceManager
) - ✅ Debug overlay
- 🔲 Scene inspector (dev-only)
- ✅ Device and context manager (
WebGPUDeviceManager.ts
) - ✅ Buffer abstraction (uniform, vertex, index, storage) (
GPUBufferWrapper.ts
) - ✅ Texture abstraction (2D, depth, shadow) (
GPUTextureWrapper.ts
) - ✅ Pipeline abstraction (
Material.ts
) - ✅ Command encoder abstraction (
GPUCommandEncoderWrapper.ts
)
- ✅ Basic forward renderer (
Renderer.ts
+SceneObject
) - ✅ Lighting (directional) (
LightUniform
, WGSL, Lambert shading) - 🔲 Point lighting
- 🔲 Skybox or procedural background
- ✅ Depth testing and face culling (depth texture + backface culling)
- ✅ Perspective camera (
Camera.ts
) - 🔲 Orthographic camera
- ✅ First-person camera controller
- 🔲 Frustum culling
- ✅ Camera matrix uniforms (
CameraUniform.ts
)
- 🔲 Unique entities
- ✅ Basic components (Transform, Mesh, Light, etc.)
- ✅ Update and render systems (via
Scene.ts
) - 🔲 Event system or messaging
- ✅ Delta time (
Clock.ts
) - ✅ Game loop with update/render separation (
Scene.update()
+Scene.render()
) - 🔲 Pause/resume logic
- ✅ Keyboard & mouse input tracking (
Input.ts
) - 🔲 Bindable input system
- ✅ Mouse lock support
- 🔲 Configurable input mappings
- 🔲 GLTF/GLB model loader
- 🔲 Texture loading and format support
- 🔲 Material definition system (early stage)
- 🔲 Asset caching and preloading
- 🔲 Scene graph with hierarchy
- 🔲 Scene loader/saver
- ✅ Debug UI tools (custom overlay)
- 🔲 Wireframe mode, bounding boxes
- ✅ Plugin/component-based architecture (emerging via modular design)
- ✅ Shader module reuse (Lambert shading modularized)
- 🔲 Messaging/event bus
- 🔲 Hot-reload support (optional)