6 MIN LECTURA · Pedro Thomaz

Diorama: una habitación 3D hecha de primitivas, no de modelos

Nuestra nueva pieza del Lab es una habitación 3D sin archivos de modelo ni texturas en disco — cada sofá, estantería y planta está construido a partir de primitivas en código. Aquí está por qué lo procedural ganó al pipeline de assets, y cómo hicimos que las cajas parecieran un render de diseño.
Diorama: una habitación 3D hecha de primitivas, no de modelos

Acabamos de publicar una nueva pieza en el Lab — Diorama, una habitación en corte isométrico que puedes reorganizar, recolorear y revestir directamente en el navegador. Parece un render de diseño. No lo es. No hay un solo archivo de modelo ni imagen de textura detrás. Cada objeto está construido en código, y aquí está por qué lo hicimos así.

Sin pipeline de assets, a propósito

La forma habitual de poner muebles en una escena 3D es modelarlos (o comprarlos), exportar archivos .glb, cargarlos en runtime y gestionar un conjunto de texturas. Eso es un pipeline: archivos que alojar, licencias que seguir, tiempo de carga que pagar, y un acoplamiento rígido entre el arte y el código. Para un experimento pequeño y autónomo no queríamos nada de eso.

Así que cada pieza — el sofá, la estantería, el escritorio, la planta — es un THREE.Group montado a partir de primitivas de caja redondeada (RoundedBoxGeometry) más algunos cilindros e icosaedros. Un sofá es una base, dos brazos, un respaldo, cojines y cuatro patas. Una estantería es un panel trasero, laterales, baldas horizontales y unos cuantos sólidos decorativos. Es Lego, en código. Todo el catálogo son unos cientos de líneas y carga al instante porque no hay nada que descargar.

Hacer que las primitivas parezcan caras

Las cajas low-poly pueden parecer baratas, o pueden parecer un render de estudio. La diferencia es casi toda iluminación y composición.

Texturas dibujadas en runtime

Lo único que no se puede hacer con geometría es un suelo de madera o una alfombra con patrón. Tampoco enviamos imágenes para eso — se pintan en un <canvas> cuando carga la página (tablas con veta, una alfombra a cuadros) y se usan como CanvasTexture. Cambias el tono del suelo y basta con redibujar el canvas. Sin archivos, y como cada material está generado, recolorear cualquier cosa es una línea fijando el color.

La parte interactiva sale gratis

Como los muebles son código con metadatos, las funciones de edición casi salen solas. Cada pieza sabe su huella y qué materiales son pintables. Arrastrar hace raycast sobre el plano del suelo y encaja en una rejilla. Recolorear escribe en las instancias de material de la propia pieza — clonadas por colocación, para que nada se contamine entre copias. Los temas fijan paredes, suelo, alfombra y sofá en una sola llamada. La disposición persiste en localStorage, y la parte que más nos gusta: la habitación entera se codifica en un enlace compartible. Ese truco merece su propio artículo.

Pruébalo

Ve a mover algún mueble: el Diorama en vivo. Es open source — está todo en GitHub, sin build, Three.js directamente desde un CDN. Abre catalog.js y encontrarás todo el conjunto de muebles en un solo lugar.