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/
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:
- AbstractLevel – base class for custom levels
- Level – main game level abstraction
- Renderer – Three.js renderer wrapper
- Camera – camera helper
- BoxMesh – basic mesh helper
- Sprite – sprite helper
- Skybox – skybox utility
- Ocean – ocean / water surface
- Billboard – camera-facing objects
- Player – player entity
- NPC – non-player character
- DynamicBody – movable physics body
- StaticBody – static physics body
- AbstractBody – base physics body
- physics – shared physics instance (powered by check2d)
- Mouse – mouse input handler
- mouse – shared mouse instance
- state – shared state container
- Events – event bus
- Loader – asset loader
- TextureUtils – texture helpers
- Debug – debug helpers
- DeviceDetector – device detection
- getQueryParams – get query params from current url
- API & architecture https://nenjack.github.io/make3d/hierarchy.html
yarn add make3dMIT