Blueprint3D Modern — a full TypeScript + Three.js r181 rewrite of the abandoned blueprint3d floor planner

I’ve been working on a modern rewrite of blueprint3d
( GitHub - furnishup/blueprint3d: Build interior spaces in 3D · GitHub ), which is one of the few
open-source 3D floor planners out there but has been unmaintained
for years and relies on deprecated Three.js APIs (Geometry, Face3,
legacy WebGL1 renderer).

The rewrite targets Three.js r181 throughout:

  • All geometry migrated from Geometry/Face3 to BufferGeometry
  • WebGLRenderer replacing the legacy path
  • OBJ/MTL loading via Three.js JSM loaders
  • Raycasting for item selection, placement, and resize handles
  • Per-surface UV mapping for floor and wall textures
  • anime.js v4 for camera transition animations
  • Wrapped in a Next.js 15 demo app with local IndexedDB storage

The item system uses a Factory pattern that loads OBJ+MTL models
from URL and instantiates the correct subtype based on placement
type (FloorItem / WallItem / InWallItem / CeilingItem). Raycasting
is filtered per subtype — WallItems only respond to rays hitting
wall surfaces, FloorItems to the floor plane, etc.

GitHub: GitHub - charmlinn/blueprint3d-modern: A modern TypeScript-based rewrite of blueprint3d — faster, cleaner, and actively maintained. · GitHub
Original: GitHub - furnishup/blueprint3d: Build interior spaces in 3D · GitHub

Next on the roadmap: GLB/GLTF support alongside OBJ/MTL, and
optional WebGPURenderer path. Would love input from anyone who’s
done the r181 WebGPU migration.

5 Likes

I’ve ported that very repo to more modern threejs, but that was about 10 years ago, so this is great! :smiley:
I think for WebGPU you literally just change WebGLRenderer with WebGPURenderer and you’re WebGPU. Furnishup/blueprint is just using the regular built in materials, so you should be good out of the box?

This is really nice, feels like a much needed update to that project

Moving off Geometry and the old WebGL1 path alone already makes a huge difference, and it’s good to see everything cleaned up around BufferGeometry and modern loaders. The raycasting setup per item type is also a solid design choice, keeps interactions predictable without a bunch of hacks

The factory pattern for items makes sense here too, especially if you’re planning to expand asset support. It should make adding GLTF pretty straightforward once you plug it in

Curious how you’re handling UVs for walls and floors, especially around corners and different room shapes. That part usually gets tricky fast in planners like this

For WebGPU, the main gotcha right now is just ecosystem maturity. Basic rendering is fine but once you get into loaders, materials, and postprocessing you’ll probably end up maintaining two paths for a while. Might be worth keeping it optional like you said rather than going all in too early

Really solid work overall, nice to see this project getting a proper modern revival

1 Like