make3d is a lightweight framework for building 3D WebGL games in JavaScript, built on top of Three.js.
It focuses on providing game-oriented primitives (levels, players, NPCs, physics helpers, input, rendering utilities), while leaving scene hierarchy and lifecycle management to Three.js itself.
- efficient, mobile-friendly rendering (Three.js)
- ready-to-use game abstractions (Level, Player, NPC)
- simple physics integration (powered by check2d)
- input, camera, rendering, and debug utilities included
- minimal structure, low abstraction overhead
π https://nenjack.github.io/make3d/demo/?fps
import { Level, Player, NPC } from 'make3d'
Level.create().then(async (level) => {
await Player.create(level)
Array.from({ length: 50 }, () => new NPC({ level, ...Player.DEFAULT_PROPS }))
})make3d relies on Three.js for scene hierarchy and object lifecycle, instead of introducing a separate entity system.
- Scene graph and transforms are managed by Three.js
- Game logic is built around Level, Player, and NPC
- Utilities are exposed as composable modules, not enforced patterns
make3d exposes a focused set of modules, grouped by responsibility:
- BaseLevel β base class for custom levels
- Level β main game level ready to use
- Renderer β Three.js renderer wrapper
- Camera β camera helper
- BoxMesh β basic 2.5D mesh
- Sprite β sprite helper
- Skybox β skybox
- Ocean β ocean / water surface
- Billboard β camera-facing objects
- Player β player entity
- NPC β non-player character
- physics β shared physics instance (powered by check2d)
- DynamicBody β movable physics body
- StaticBody β static physics body
- AbstractBody β base physics body
- mouse β shared mouse instance
- Mouse β mouse input handler
- state β shared state container
- Events β event bus
- Loader β asset loader
- TextureUtils β texture helpers
- getQueryParams β get query params from current url
- Debug β debug helpers
- DeviceDetector β device detection
- API & architecture https://nenjack.github.io/make3d/hierarchy.html
yarn add make3dMIT