[object Object]

← back to Quadrille Showroom

furniture: art-direction fixes — concrete-grey Brutalist, warm-wood Transitional, visible walnut Traditional

0a7d7ab263d3ce9014392108195a9e0626ceffa9 · 2026-07-02 09:53:18 -0700 · Steve

- Brutalist recolored to raw béton-brut concrete grey (dark bases that read ~#8a8a86 on
  camera under the bright showroom light) + board-form groove lines; no longer white foam
- Contemporary table now crisp white lacquer + steel blade legs (was warm oak)
- Transitional table warm honey-oak + soft rounded barrel-back upholstered chair, so it
  reads clearly distinct from Contemporary (material + silhouette)
- Traditional chair reworked: matte no-env walnut frame + tall curved upholstered back +
  crown rail so the walnut tone and curved back read from the default camera
- Added mattMat() + buildBoardFormLines() helpers

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Files touched

Diff

commit 0a7d7ab263d3ce9014392108195a9e0626ceffa9
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu Jul 2 09:53:18 2026 -0700

    furniture: art-direction fixes — concrete-grey Brutalist, warm-wood Transitional, visible walnut Traditional
    
    - Brutalist recolored to raw béton-brut concrete grey (dark bases that read ~#8a8a86 on
      camera under the bright showroom light) + board-form groove lines; no longer white foam
    - Contemporary table now crisp white lacquer + steel blade legs (was warm oak)
    - Transitional table warm honey-oak + soft rounded barrel-back upholstered chair, so it
      reads clearly distinct from Contemporary (material + silhouette)
    - Traditional chair reworked: matte no-env walnut frame + tall curved upholstered back +
      crown rail so the walnut tone and curved back read from the default camera
    - Added mattMat() + buildBoardFormLines() helpers
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
 public/js/showroom.js | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/public/js/showroom.js b/public/js/showroom.js
index 3cf49c4..e97ace6 100644
--- a/public/js/showroom.js
+++ b/public/js/showroom.js
@@ -1003,6 +1003,12 @@ function fmat(color, rough, metal) {
   return new THREE.MeshStandardMaterial({ color, roughness: rough == null ? 0.6 : rough, metalness: metal || 0.0, envMapIntensity: 0.3 });
 }
 
+// Matte material with NO environment pickup — for dark woods (walnut) that otherwise wash
+// out to blonde because the bright showroom env floods a normal 0.3-envMap standard material.
+function mattMat(color, rough) {
+  return new THREE.MeshStandardMaterial({ color, roughness: rough == null ? 0.9 : rough, metalness: 0.0, envMapIntensity: 0.0 });
+}
+
 // Local contact shadow parented to the furniture group (LOCAL coords) so teardown
 // disposes it with the set. The map is the SHARED contact texture (__shared) — never disposed.
 function furnitureShadow(parent, lx, lz, w, d, opacity) {
@@ -1099,11 +1105,12 @@ const FURNITURE_STYLES = {
   traditional: {
     label: 'Traditional',
     buildTable(g) {
-      const walnut = fmat(0x3a2712, 0.45, 0.0);
+      // Matte, no-env walnut so it reads warm brown instead of washing to blonde.
+      const walnut = mattMat(0x2e1808, 0.92);
       const top = new THREE.Mesh(new THREE.BoxGeometry(1.06, 0.06, 0.70), walnut);
       top.position.set(0, 0.74, 0); top.castShadow = true; top.receiveShadow = true; g.add(top);
       // a subtle apron under the top for weight
-      const apron = new THREE.Mesh(new THREE.BoxGeometry(0.96, 0.07, 0.60), fmat(0x2f1f0e, 0.5, 0.0));
+      const apron = new THREE.Mesh(new THREE.BoxGeometry(0.96, 0.07, 0.60), mattMat(0x241304, 0.92));
       apron.position.set(0, 0.685, 0); apron.castShadow = true; g.add(apron);
       [[-0.44, -0.28], [0.44, -0.28], [-0.44, 0.28], [0.44, 0.28]].forEach(([lx, lz]) =>
         buildTurnedLeg(g, lx, lz, walnut, 0.72));
@@ -1112,9 +1119,9 @@ const FURNITURE_STYLES = {
     buildChair(g) {
       // Warm WALNUT frame + a tall curved upholstered back that both read clearly from the
       // default camera (was reading as just a plain cream seat).
-      // Dark walnut base — the bright showroom lifts it to a rich mid-walnut on camera
-      // (a lighter base washes out to blonde oak and loses the "warm walnut" read).
-      const walnut = fmat(0x30200f, 0.45, 0.0), damask = fmat(0xd8c49b, 0.8, 0.0);
+      // Matte, no-env walnut so it reads warm brown instead of washing to blonde under the
+      // bright showroom env; cream damask cushion sits proud so the walnut frames it.
+      const walnut = mattMat(0x2e1808, 0.92), damask = fmat(0xd8c49b, 0.8, 0.0);
       const c = new THREE.Group(); c.position.set(0, 0, 0.70);
       // walnut seat rail (frame) with the damask cushion sitting proud on top → walnut shows
       const rail = new THREE.Mesh(new THREE.BoxGeometry(0.52, 0.09, 0.50), walnut);

← 646f4b9 auto-save: 2026-07-02T09:46:55 (1 files) — public/js/showroo  ·  back to Quadrille Showroom  ·  furniture FIX 1: onload = clean empty room + table+chair onl 6bdf2b5 →