← back to Quadrille Showroom
CEILING: replace crude 64px procedural grid (read as a wireframe) with a clean, bright, EVEN soft warm off-white gallery ceiling + two slim emissive recessed warm-light strips (no light cost, no harsh lines). Reads like a real gallery ceiling. FPS 72, errorCount 0
7dcf8466e6e625b78762d785058e01af7eabaa0c · 2026-06-27 12:25:53 -0700 · Steve
Files touched
Diff
commit 7dcf8466e6e625b78762d785058e01af7eabaa0c
Author: Steve <steve@designerwallcoverings.com>
Date: Sat Jun 27 12:25:53 2026 -0700
CEILING: replace crude 64px procedural grid (read as a wireframe) with a clean, bright, EVEN soft warm off-white gallery ceiling + two slim emissive recessed warm-light strips (no light cost, no harsh lines). Reads like a real gallery ceiling. FPS 72, errorCount 0
---
public/js/showroom.js | 28 ++++++++++++++++++++--------
1 file changed, 20 insertions(+), 8 deletions(-)
diff --git a/public/js/showroom.js b/public/js/showroom.js
index 2120e1e..aa6d00e 100644
--- a/public/js/showroom.js
+++ b/public/js/showroom.js
@@ -378,14 +378,26 @@ function buildRoom() {
}));
floorMesh.rotation.x = -Math.PI/2; floorMesh.receiveShadow = true; scene.add(floorMesh);
- // Ceiling
- const cc = document.createElement('canvas'); cc.width = 64; cc.height = 64;
- const cx = cc.getContext('2d'); cx.fillStyle = '#d5d5cd'; cx.fillRect(0,0,64,64);
- cx.strokeStyle = '#b8b8b0'; cx.lineWidth = 1;
- for (let i = 0; i <= 2; i++) { cx.beginPath(); cx.moveTo(i*32,0); cx.lineTo(i*32,64); cx.stroke(); cx.beginPath(); cx.moveTo(0,i*32); cx.lineTo(64,i*32); cx.stroke(); }
- const ct = srgb(new THREE.CanvasTexture(cc)); ct.wrapS = ct.wrapT = THREE.RepeatWrapping; ct.repeat.set(6,5);
- const ceil = new THREE.Mesh(new THREE.PlaneGeometry(W, D), new THREE.MeshLambertMaterial({ map: ct }));
- ceil.rotation.x = Math.PI/2; ceil.position.y = H; scene.add(ceil);
+ // Ceiling — clean, bright, EVEN soft warm off-white gallery ceiling. (Was a crude
+ // 64px procedural grid that read as a wireframe — see REVIEW.md.) No texture, no
+ // harsh lines: a flat matte panel in a soft warm off-white so it reads as a real
+ // gallery ceiling. Lambert keeps it cheap and reflection-free.
+ const ceil = new THREE.Mesh(
+ new THREE.PlaneGeometry(W, D),
+ new THREE.MeshLambertMaterial({ color: 0xf2eee5 }) // soft warm off-white
+ );
+ ceil.rotation.x = Math.PI/2; ceil.position.y = H; ceil.receiveShadow = false; scene.add(ceil);
+
+ // Two slim recessed warm-light strips running front→back, set just below the ceiling
+ // plane — emissive (self-lit, no light cost) so they read as soft linear coves, the
+ // calm "this is a real gallery ceiling" cue without any hard grid lines.
+ const stripMat = new THREE.MeshBasicMaterial({ color: 0xfff6e6 });
+ [-W * 0.22, W * 0.22].forEach(sx => {
+ const strip = new THREE.Mesh(new THREE.PlaneGeometry(0.10, D * 0.78), stripMat);
+ strip.rotation.x = Math.PI / 2;
+ strip.position.set(sx, H - 0.012, 0);
+ scene.add(strip);
+ });
// Walls — capture the 3 main surfaces so a focused pattern can clad them
roomWalls = [
← bb93cda WALL realism: derive subtle normal+roughness maps from wall-
·
back to Quadrille Showroom
·
CONTACT GROUNDING: soft radial-gradient contact shadows on t c49c3db →