Codels
2.6K tris11.1 × 8.11 × 9.85 m

Use it in code

Remix in the editor
Self-contained ES module — only depends on three. Call the factory and add the group to your scene.
/**
 * Corner Shop — Codels 3D model library
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 2,612 · Size (W × H × D): 11.10 × 8.11 × 9.85 m
 *
 * Usage:
 *   import { createShop } from './shop.js';
 *   
 *   const model = createShop();
 *   model.position.set(0, 0, 0);
 *   scene.add(model);
 */
import * as THREE from 'three';

const deg = THREE.MathUtils.degToRad;

// Extrude a 2D outline along Z (centered). bevel = [thickness, size, segments].
function extrude(outline, depth, holes = [], bevel = null) {
  const shape = new THREE.Shape(outline.map(([x, y]) => new THREE.Vector2(x, y)));
  for (const hole of holes) shape.holes.push(new THREE.Path(hole.map(([x, y]) => new THREE.Vector2(x, y))));
  const options = bevel
    ? { depth, bevelEnabled: true, bevelThickness: bevel[0], bevelSize: bevel[1], bevelSegments: bevel[2] }
    : { depth, bevelEnabled: false };
  return new THREE.ExtrudeGeometry(shape, options).translate(0, 0, -depth / 2);
}

export function createShop() {
  const root = new THREE.Group();
  root.name = 'Shop';

  // Materials
  const brickMat = new THREE.MeshStandardMaterial({ name: 'brick', color: 0xb9785a, roughness: 0.95, flatShading: true });
  const brickDarkMat = new THREE.MeshStandardMaterial({ name: 'brickDark', color: 0x98624a, roughness: 0.95, flatShading: true });
  const trimMat = new THREE.MeshStandardMaterial({ name: 'trim', color: 0x2e3a3a, roughness: 0.7, flatShading: true });
  const glassMat = new THREE.MeshStandardMaterial({ name: 'glass', color: 0x9cc4d6, roughness: 0.2, metalness: 0.1, flatShading: true });
  const creamMat = new THREE.MeshStandardMaterial({ name: 'cream', color: 0xf1ebdd, roughness: 0.85, flatShading: true });
  const awningMat = new THREE.MeshStandardMaterial({ name: 'awning', color: 0x2f7d5b, roughness: 0.9, flatShading: true });
  const signMat = new THREE.MeshStandardMaterial({ name: 'sign', color: 0xc2443a, roughness: 0.6, flatShading: true });
  const concreteMat = new THREE.MeshStandardMaterial({ name: 'concrete', color: 0xbdb8af, roughness: 0.95, flatShading: true });
  const fruitMat = new THREE.MeshStandardMaterial({ name: 'fruit', color: 0xe88f2c, roughness: 0.7, flatShading: true });
  const lampMat = new THREE.MeshStandardMaterial({ name: 'lamp', color: 0xffe7a8, roughness: 0.8, emissive: 0xffcf6a, flatShading: true });

  // Shared geometries
  const boxGeo = new THREE.BoxGeometry(0.5, 7, 0.5);
  const boxGeo2 = new THREE.BoxGeometry(8.4, 0.5, 0.25);
  const boxGeo3 = new THREE.BoxGeometry(0.25, 0.5, 6.7);
  const boxGeo4 = new THREE.BoxGeometry(8.6, 0.12, 0.45);
  const boxGeo5 = new THREE.BoxGeometry(0.45, 0.12, 6.95);
  const boxGeo6 = new THREE.BoxGeometry(2.85, 0.55, 0.12);
  const boxGeo7 = new THREE.BoxGeometry(3.05, 2.25, 0.08);
  const boxGeo8 = new THREE.BoxGeometry(2.81, 2.05, 0.05);
  const boxGeo9 = new THREE.BoxGeometry(3.15, 0.08, 0.22);
  const boxGeo10 = new THREE.BoxGeometry(0.08, 2.05, 0.1);
  const boxGeo11 = new THREE.BoxGeometry(2.81, 0.06, 0.1);
  const boxGeo12 = new THREE.BoxGeometry(0.05, 0.05, 0.5);
  const coneGeo = new THREE.ConeGeometry(0.16, 0.16, 8);
  const sphereGeo = new THREE.SphereGeometry(0.07, 6, 4);
  const boxGeo13 = new THREE.BoxGeometry(0.502, 0.04, 1.5692);
  const boxGeo14 = new THREE.BoxGeometry(0.502, 0.3, 0.03);
  const extrudeGeo = extrude([[0, 0], [0, -0.6], [1.45, -0.6]], 0.03);
  const boxGeo15 = new THREE.BoxGeometry(0.04, 0.04, 1.45);
  const boxGeo16 = new THREE.BoxGeometry(1.18, 1.63, 0.06);
  const boxGeo17 = new THREE.BoxGeometry(1, 1.45, 0.04);
  const boxGeo18 = new THREE.BoxGeometry(1, 0.06, 0.08);
  const boxGeo19 = new THREE.BoxGeometry(1.36, 0.08, 0.2);
  const boxGeo20 = new THREE.BoxGeometry(1.36, 0.2, 0.08);
  const boxGeo21 = new THREE.BoxGeometry(0.477, 0.04, 1.5692);
  const boxGeo22 = new THREE.BoxGeometry(0.477, 0.3, 0.03);
  const boxGeo23 = new THREE.BoxGeometry(0.95, 0.28, 0.65);
  const icosahedronGeo = new THREE.IcosahedronGeometry(0.11, 0);
  const boxGeo24 = new THREE.BoxGeometry(0.62, 1, 0.04);
  const boxGeo25 = new THREE.BoxGeometry(0.5, 0.7, 0.02);

  // Parts
  const sidewalk = new THREE.Mesh(new THREE.BoxGeometry(11, 0.15, 9.8), concreteMat);
  sidewalk.name = 'sidewalk';
  sidewalk.position.set(1, 0.075, 1);
  root.add(sidewalk);
  const curb = new THREE.Mesh(new THREE.BoxGeometry(11.1, 0.17, 0.25), brickDarkMat);
  curb.name = 'curb';
  curb.position.set(1, 0.085, 5.78);
  root.add(curb);
  const walls = new THREE.Mesh(new THREE.BoxGeometry(8.4, 7, 7.2), brickMat);
  walls.name = 'walls';
  walls.position.set(0, 3.65, 0);
  root.add(walls);
  const pilaster = new THREE.Mesh(boxGeo, brickDarkMat);
  pilaster.name = 'pilaster';
  pilaster.position.set(-3.98, 3.65, -3.38);
  root.add(pilaster);
  const pilaster2 = new THREE.Mesh(boxGeo, brickDarkMat);
  pilaster2.name = 'pilaster';
  pilaster2.position.set(-3.98, 3.65, 3.38);
  root.add(pilaster2);
  const pilaster3 = new THREE.Mesh(boxGeo, brickDarkMat);
  pilaster3.name = 'pilaster';
  pilaster3.position.set(3.98, 3.65, -3.38);
  root.add(pilaster3);
  const pilaster4 = new THREE.Mesh(boxGeo, brickDarkMat);
  pilaster4.name = 'pilaster';
  pilaster4.position.set(3.98, 3.65, 3.38);
  root.add(pilaster4);
  const cornice = new THREE.Mesh(new THREE.BoxGeometry(8.64, 0.22, 7.44), brickDarkMat);
  cornice.name = 'cornice';
  cornice.position.set(0, 4.04, 0);
  root.add(cornice);
  const topCornice = new THREE.Mesh(new THREE.BoxGeometry(8.7, 0.3, 7.5), brickDarkMat);
  topCornice.name = 'topCornice';
  topCornice.position.set(0, 7, 0);
  root.add(topCornice);
  const parapet = new THREE.Mesh(boxGeo2, brickMat);
  parapet.name = 'parapet';
  parapet.position.set(0, 7.4, -3.475);
  root.add(parapet);
  const parapet2 = new THREE.Mesh(boxGeo3, brickMat);
  parapet2.name = 'parapet';
  parapet2.position.set(-4.075, 7.4, 0);
  root.add(parapet2);
  const parapetCap = new THREE.Mesh(boxGeo4, creamMat);
  parapetCap.name = 'parapetCap';
  parapetCap.position.set(0, 7.71, -3.475);
  root.add(parapetCap);
  const parapetCap2 = new THREE.Mesh(boxGeo5, creamMat);
  parapetCap2.name = 'parapetCap';
  parapetCap2.position.set(-4.075, 7.71, 0);
  root.add(parapetCap2);
  const parapet3 = new THREE.Mesh(boxGeo2, brickMat);
  parapet3.name = 'parapet';
  parapet3.position.set(0, 7.4, 3.475);
  root.add(parapet3);
  const parapet4 = new THREE.Mesh(boxGeo3, brickMat);
  parapet4.name = 'parapet';
  parapet4.position.set(4.075, 7.4, 0);
  root.add(parapet4);
  const parapetCap3 = new THREE.Mesh(boxGeo4, creamMat);
  parapetCap3.name = 'parapetCap';
  parapetCap3.position.set(0, 7.71, 3.475);
  root.add(parapetCap3);
  const parapetCap4 = new THREE.Mesh(boxGeo5, creamMat);
  parapetCap4.name = 'parapetCap';
  parapetCap4.position.set(4.075, 7.71, 0);
  root.add(parapetCap4);
  const plinth = new THREE.Mesh(new THREE.BoxGeometry(8.5, 0.35, 7.3), brickDarkMat);
  plinth.name = 'plinth';
  plinth.position.set(0, 0.325, 0);
  root.add(plinth);
  const frontStore = new THREE.Group();
  frontStore.name = 'frontStore';
  frontStore.position.set(0, 0.15, 3.6);
  root.add(frontStore);
  const kickplate = new THREE.Mesh(boxGeo6, trimMat);
  kickplate.name = 'kickplate';
  kickplate.position.set(-2.22, 0.625, 0.06);
  frontStore.add(kickplate);
  const windowFrame = new THREE.Mesh(boxGeo7, trimMat);
  windowFrame.name = 'windowFrame';
  windowFrame.position.set(-2.22, 2.025, 0.04);
  frontStore.add(windowFrame);
  const displayGlass = new THREE.Mesh(boxGeo8, glassMat);
  displayGlass.name = 'displayGlass';
  displayGlass.position.set(-2.22, 2.005, 0.09);
  frontStore.add(displayGlass);
  const windowSill = new THREE.Mesh(boxGeo9, creamMat);
  windowSill.name = 'windowSill';
  windowSill.position.set(-2.22, 0.92, 0.11);
  frontStore.add(windowSill);
  const mullion = new THREE.Mesh(boxGeo10, trimMat);
  mullion.name = 'mullion';
  mullion.position.set(-2.22, 2.005, 0.1);
  frontStore.add(mullion);
  const transomBar = new THREE.Mesh(boxGeo11, trimMat);
  transomBar.name = 'transomBar';
  transomBar.position.set(-2.22, 2.48, 0.1);
  frontStore.add(transomBar);
  const kickplate2 = new THREE.Mesh(boxGeo6, trimMat);
  kickplate2.name = 'kickplate';
  kickplate2.position.set(2.22, 0.625, 0.06);
  frontStore.add(kickplate2);
  const windowFrame2 = new THREE.Mesh(boxGeo7, trimMat);
  windowFrame2.name = 'windowFrame';
  windowFrame2.position.set(2.22, 2.025, 0.04);
  frontStore.add(windowFrame2);
  const displayGlass2 = new THREE.Mesh(boxGeo8, glassMat);
  displayGlass2.name = 'displayGlass';
  displayGlass2.position.set(2.22, 2.005, 0.09);
  frontStore.add(displayGlass2);
  const windowSill2 = new THREE.Mesh(boxGeo9, creamMat);
  windowSill2.name = 'windowSill';
  windowSill2.position.set(2.22, 0.92, 0.11);
  frontStore.add(windowSill2);
  const mullion2 = new THREE.Mesh(boxGeo10, trimMat);
  mullion2.name = 'mullion';
  mullion2.position.set(2.22, 2.005, 0.1);
  frontStore.add(mullion2);
  const transomBar2 = new THREE.Mesh(boxGeo11, trimMat);
  transomBar2.name = 'transomBar';
  transomBar2.position.set(2.22, 2.48, 0.1);
  frontStore.add(transomBar2);
  const doorFrame = new THREE.Mesh(new THREE.BoxGeometry(1.39, 2.45, 0.08), trimMat);
  doorFrame.name = 'doorFrame';
  doorFrame.position.set(0, 1.375, 0.04);
  frontStore.add(doorFrame);
  const doorGlass = new THREE.Mesh(new THREE.BoxGeometry(0.95, 1.6, 0.05), glassMat);
  doorGlass.name = 'doorGlass';
  doorGlass.position.set(0, 1.35, 0.09);
  frontStore.add(doorGlass);
  const doorTransom = new THREE.Mesh(new THREE.BoxGeometry(1.05, 0.42, 0.05), glassMat);
  doorTransom.name = 'doorTransom';
  doorTransom.position.set(0, 2.51, 0.07);
  frontStore.add(doorTransom);
  const doorHead = new THREE.Mesh(new THREE.BoxGeometry(1.05, 0.08, 0.1), trimMat);
  doorHead.name = 'doorHead';
  doorHead.position.set(0, 2.24, 0.08);
  frontStore.add(doorHead);
  const pushBar = new THREE.Mesh(new THREE.BoxGeometry(0.5, 0.05, 0.06), creamMat);
  pushBar.name = 'pushBar';
  pushBar.position.set(0, 1.25, 0.13);
  frontStore.add(pushBar);
  const doorStep = new THREE.Mesh(new THREE.BoxGeometry(1.75, 0.15, 0.4), concreteMat);
  doorStep.name = 'doorStep';
  doorStep.position.set(0, 0.075, 0.2);
  frontStore.add(doorStep);
  const openSign = new THREE.Mesh(new THREE.BoxGeometry(0.62, 0.24, 0.03), lampMat);
  openSign.name = 'openSign';
  openSign.position.set(-2.22, 2.05, 0.12);
  frontStore.add(openSign);
  const signBorder = new THREE.Mesh(new THREE.BoxGeometry(7.38, 0.88, 0.08), creamMat);
  signBorder.name = 'signBorder';
  signBorder.position.set(0, 3.39, 0.04);
  frontStore.add(signBorder);
  const signBoard = new THREE.Mesh(new THREE.BoxGeometry(7.2, 0.72, 0.1), signMat);
  signBoard.name = 'signBoard';
  signBoard.position.set(0, 3.39, 0.06);
  frontStore.add(signBoard);
  const signLetter = new THREE.Mesh(new THREE.BoxGeometry(0.3104, 0.38, 0.03), creamMat);
  signLetter.name = 'signLetter';
  signLetter.position.set(-1.7448, 3.39, 0.12);
  frontStore.add(signLetter);
  const signLetter2 = new THREE.Mesh(new THREE.BoxGeometry(0.3236, 0.38, 0.03), creamMat);
  signLetter2.name = 'signLetter';
  signLetter2.position.set(-1.3478, 3.39, 0.12);
  frontStore.add(signLetter2);
  const signLetter3 = new THREE.Mesh(new THREE.BoxGeometry(0.2352, 0.38, 0.03), creamMat);
  signLetter3.name = 'signLetter';
  signLetter3.position.set(-0.9884, 3.39, 0.12);
  frontStore.add(signLetter3);
  const signLetter4 = new THREE.Mesh(new THREE.BoxGeometry(0.2997, 0.38, 0.03), creamMat);
  signLetter4.name = 'signLetter';
  signLetter4.position.set(-0.641, 3.39, 0.12);
  frontStore.add(signLetter4);
  const signLetter5 = new THREE.Mesh(new THREE.BoxGeometry(0.2136, 0.38, 0.03), creamMat);
  signLetter5.name = 'signLetter';
  signLetter5.position.set(-0.0243, 3.39, 0.12);
  frontStore.add(signLetter5);
  const signLetter6 = new THREE.Mesh(new THREE.BoxGeometry(0.2947, 0.38, 0.03), creamMat);
  signLetter6.name = 'signLetter';
  signLetter6.position.set(0.3099, 3.39, 0.12);
  frontStore.add(signLetter6);
  const signLetter7 = new THREE.Mesh(new THREE.BoxGeometry(0.3152, 0.38, 0.03), creamMat);
  signLetter7.name = 'signLetter';
  signLetter7.position.set(0.6949, 3.39, 0.12);
  frontStore.add(signLetter7);
  const signLetter8 = new THREE.Mesh(new THREE.BoxGeometry(0.2733, 0.38, 0.03), creamMat);
  signLetter8.name = 'signLetter';
  signLetter8.position.set(1.0691, 3.39, 0.12);
  frontStore.add(signLetter8);
  const signLetter9 = new THREE.Mesh(new THREE.BoxGeometry(0.3449, 0.38, 0.03), creamMat);
  signLetter9.name = 'signLetter';
  signLetter9.position.set(1.4582, 3.39, 0.12);
  frontStore.add(signLetter9);
  const lampArm = new THREE.Mesh(boxGeo12, trimMat);
  lampArm.name = 'lampArm';
  lampArm.position.set(-2.4, 3.95, 0.25);
  frontStore.add(lampArm);
  const lampShade = new THREE.Mesh(coneGeo, trimMat);
  lampShade.name = 'lampShade';
  lampShade.position.set(-2.4, 3.9, 0.52);
  lampShade.rotation.set(deg(180), 0, 0);
  frontStore.add(lampShade);
  const lampBulb = new THREE.Mesh(sphereGeo, lampMat);
  lampBulb.name = 'lampBulb';
  lampBulb.position.set(-2.4, 3.8, 0.52);
  frontStore.add(lampBulb);
  const lampArm2 = new THREE.Mesh(boxGeo12, trimMat);
  lampArm2.name = 'lampArm';
  lampArm2.position.set(2.4, 3.95, 0.25);
  frontStore.add(lampArm2);
  const lampShade2 = new THREE.Mesh(coneGeo, trimMat);
  lampShade2.name = 'lampShade';
  lampShade2.position.set(2.4, 3.9, 0.52);
  lampShade2.rotation.set(deg(180), 0, 0);
  frontStore.add(lampShade2);
  const lampBulb2 = new THREE.Mesh(sphereGeo, lampMat);
  lampBulb2.name = 'lampBulb';
  lampBulb2.position.set(2.4, 3.8, 0.52);
  frontStore.add(lampBulb2);
  const frontAwning = new THREE.Group();
  frontAwning.name = 'frontAwning';
  frontAwning.position.set(0, 2.9, 0.08);
  frontStore.add(frontAwning);
  const awningStripe = new THREE.Mesh(boxGeo13, awningMat);
  awningStripe.name = 'awningStripe';
  awningStripe.position.set(-3.5, -0.3, 0.725);
  awningStripe.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe);
  const valance = new THREE.Mesh(boxGeo14, awningMat);
  valance.name = 'valance';
  valance.position.set(-3.5, -0.73, 1.46);
  frontAwning.add(valance);
  const awningStripe2 = new THREE.Mesh(boxGeo13, creamMat);
  awningStripe2.name = 'awningStripe';
  awningStripe2.position.set(-3, -0.3, 0.725);
  awningStripe2.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe2);
  const valance2 = new THREE.Mesh(boxGeo14, creamMat);
  valance2.name = 'valance';
  valance2.position.set(-3, -0.73, 1.46);
  frontAwning.add(valance2);
  const awningStripe3 = new THREE.Mesh(boxGeo13, awningMat);
  awningStripe3.name = 'awningStripe';
  awningStripe3.position.set(-2.5, -0.3, 0.725);
  awningStripe3.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe3);
  const valance3 = new THREE.Mesh(boxGeo14, awningMat);
  valance3.name = 'valance';
  valance3.position.set(-2.5, -0.73, 1.46);
  frontAwning.add(valance3);
  const awningStripe4 = new THREE.Mesh(boxGeo13, creamMat);
  awningStripe4.name = 'awningStripe';
  awningStripe4.position.set(-2, -0.3, 0.725);
  awningStripe4.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe4);
  const valance4 = new THREE.Mesh(boxGeo14, creamMat);
  valance4.name = 'valance';
  valance4.position.set(-2, -0.73, 1.46);
  frontAwning.add(valance4);
  const awningStripe5 = new THREE.Mesh(boxGeo13, awningMat);
  awningStripe5.name = 'awningStripe';
  awningStripe5.position.set(-1.5, -0.3, 0.725);
  awningStripe5.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe5);
  const valance5 = new THREE.Mesh(boxGeo14, awningMat);
  valance5.name = 'valance';
  valance5.position.set(-1.5, -0.73, 1.46);
  frontAwning.add(valance5);
  const awningStripe6 = new THREE.Mesh(boxGeo13, creamMat);
  awningStripe6.name = 'awningStripe';
  awningStripe6.position.set(-1, -0.3, 0.725);
  awningStripe6.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe6);
  const valance6 = new THREE.Mesh(boxGeo14, creamMat);
  valance6.name = 'valance';
  valance6.position.set(-1, -0.73, 1.46);
  frontAwning.add(valance6);
  const awningStripe7 = new THREE.Mesh(boxGeo13, awningMat);
  awningStripe7.name = 'awningStripe';
  awningStripe7.position.set(-0.5, -0.3, 0.725);
  awningStripe7.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe7);
  const valance7 = new THREE.Mesh(boxGeo14, awningMat);
  valance7.name = 'valance';
  valance7.position.set(-0.5, -0.73, 1.46);
  frontAwning.add(valance7);
  const awningStripe8 = new THREE.Mesh(boxGeo13, creamMat);
  awningStripe8.name = 'awningStripe';
  awningStripe8.position.set(0, -0.3, 0.725);
  awningStripe8.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe8);
  const valance8 = new THREE.Mesh(boxGeo14, creamMat);
  valance8.name = 'valance';
  valance8.position.set(0, -0.73, 1.46);
  frontAwning.add(valance8);
  const awningStripe9 = new THREE.Mesh(boxGeo13, awningMat);
  awningStripe9.name = 'awningStripe';
  awningStripe9.position.set(0.5, -0.3, 0.725);
  awningStripe9.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe9);
  const valance9 = new THREE.Mesh(boxGeo14, awningMat);
  valance9.name = 'valance';
  valance9.position.set(0.5, -0.73, 1.46);
  frontAwning.add(valance9);
  const awningStripe10 = new THREE.Mesh(boxGeo13, creamMat);
  awningStripe10.name = 'awningStripe';
  awningStripe10.position.set(1, -0.3, 0.725);
  awningStripe10.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe10);
  const valance10 = new THREE.Mesh(boxGeo14, creamMat);
  valance10.name = 'valance';
  valance10.position.set(1, -0.73, 1.46);
  frontAwning.add(valance10);
  const awningStripe11 = new THREE.Mesh(boxGeo13, awningMat);
  awningStripe11.name = 'awningStripe';
  awningStripe11.position.set(1.5, -0.3, 0.725);
  awningStripe11.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe11);
  const valance11 = new THREE.Mesh(boxGeo14, awningMat);
  valance11.name = 'valance';
  valance11.position.set(1.5, -0.73, 1.46);
  frontAwning.add(valance11);
  const awningStripe12 = new THREE.Mesh(boxGeo13, creamMat);
  awningStripe12.name = 'awningStripe';
  awningStripe12.position.set(2, -0.3, 0.725);
  awningStripe12.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe12);
  const valance12 = new THREE.Mesh(boxGeo14, creamMat);
  valance12.name = 'valance';
  valance12.position.set(2, -0.73, 1.46);
  frontAwning.add(valance12);
  const awningStripe13 = new THREE.Mesh(boxGeo13, awningMat);
  awningStripe13.name = 'awningStripe';
  awningStripe13.position.set(2.5, -0.3, 0.725);
  awningStripe13.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe13);
  const valance13 = new THREE.Mesh(boxGeo14, awningMat);
  valance13.name = 'valance';
  valance13.position.set(2.5, -0.73, 1.46);
  frontAwning.add(valance13);
  const awningStripe14 = new THREE.Mesh(boxGeo13, creamMat);
  awningStripe14.name = 'awningStripe';
  awningStripe14.position.set(3, -0.3, 0.725);
  awningStripe14.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe14);
  const valance14 = new THREE.Mesh(boxGeo14, creamMat);
  valance14.name = 'valance';
  valance14.position.set(3, -0.73, 1.46);
  frontAwning.add(valance14);
  const awningStripe15 = new THREE.Mesh(boxGeo13, awningMat);
  awningStripe15.name = 'awningStripe';
  awningStripe15.position.set(3.5, -0.3, 0.725);
  awningStripe15.rotation.set(deg(22.4794), 0, 0);
  frontAwning.add(awningStripe15);
  const valance15 = new THREE.Mesh(boxGeo14, awningMat);
  valance15.name = 'valance';
  valance15.position.set(3.5, -0.73, 1.46);
  frontAwning.add(valance15);
  const awningCheek = new THREE.Mesh(extrudeGeo, awningMat);
  awningCheek.name = 'awningCheek';
  awningCheek.position.set(-3.765, 0.01, 0);
  awningCheek.rotation.set(0, deg(-90), 0);
  frontAwning.add(awningCheek);
  const awningArm = new THREE.Mesh(boxGeo15, trimMat);
  awningArm.name = 'awningArm';
  awningArm.position.set(-3.65, -0.62, 0.725);
  frontAwning.add(awningArm);
  const awningCheek2 = new THREE.Mesh(extrudeGeo, awningMat);
  awningCheek2.name = 'awningCheek';
  awningCheek2.position.set(3.765, 0.01, 0);
  awningCheek2.rotation.set(0, deg(-90), 0);
  frontAwning.add(awningCheek2);
  const awningArm2 = new THREE.Mesh(boxGeo15, trimMat);
  awningArm2.name = 'awningArm';
  awningArm2.position.set(3.65, -0.62, 0.725);
  frontAwning.add(awningArm2);
  const awningRail = new THREE.Mesh(new THREE.BoxGeometry(7.6, 0.1, 0.1), trimMat);
  awningRail.name = 'awningRail';
  awningRail.position.set(0, 0.02, 0.05);
  frontAwning.add(awningRail);
  const upperFrame = new THREE.Mesh(boxGeo16, creamMat);
  upperFrame.name = 'upperFrame';
  upperFrame.position.set(-2.7, 5.45, 0.03);
  frontStore.add(upperFrame);
  const upperGlass = new THREE.Mesh(boxGeo17, glassMat);
  upperGlass.name = 'upperGlass';
  upperGlass.position.set(-2.7, 5.45, 0.06);
  frontStore.add(upperGlass);
  const sashRail = new THREE.Mesh(boxGeo18, creamMat);
  sashRail.name = 'sashRail';
  sashRail.position.set(-2.7, 5.5, 0.06);
  frontStore.add(sashRail);
  const upperSill = new THREE.Mesh(boxGeo19, concreteMat);
  upperSill.name = 'upperSill';
  upperSill.position.set(-2.7, 4.595, 0.1);
  frontStore.add(upperSill);
  const lintel = new THREE.Mesh(boxGeo20, brickDarkMat);
  lintel.name = 'lintel';
  lintel.position.set(-2.7, 6.375, 0.04);
  frontStore.add(lintel);
  const upperFrame2 = new THREE.Mesh(boxGeo16, creamMat);
  upperFrame2.name = 'upperFrame';
  upperFrame2.position.set(0, 5.45, 0.03);
  frontStore.add(upperFrame2);
  const upperGlass2 = new THREE.Mesh(boxGeo17, glassMat);
  upperGlass2.name = 'upperGlass';
  upperGlass2.position.set(0, 5.45, 0.06);
  frontStore.add(upperGlass2);
  const sashRail2 = new THREE.Mesh(boxGeo18, creamMat);
  sashRail2.name = 'sashRail';
  sashRail2.position.set(0, 5.5, 0.06);
  frontStore.add(sashRail2);
  const upperSill2 = new THREE.Mesh(boxGeo19, concreteMat);
  upperSill2.name = 'upperSill';
  upperSill2.position.set(0, 4.595, 0.1);
  frontStore.add(upperSill2);
  const lintel2 = new THREE.Mesh(boxGeo20, brickDarkMat);
  lintel2.name = 'lintel';
  lintel2.position.set(0, 6.375, 0.04);
  frontStore.add(lintel2);
  const upperFrame3 = new THREE.Mesh(boxGeo16, creamMat);
  upperFrame3.name = 'upperFrame';
  upperFrame3.position.set(2.7, 5.45, 0.03);
  frontStore.add(upperFrame3);
  const upperGlass3 = new THREE.Mesh(boxGeo17, glassMat);
  upperGlass3.name = 'upperGlass';
  upperGlass3.position.set(2.7, 5.45, 0.06);
  frontStore.add(upperGlass3);
  const sashRail3 = new THREE.Mesh(boxGeo18, creamMat);
  sashRail3.name = 'sashRail';
  sashRail3.position.set(2.7, 5.5, 0.06);
  frontStore.add(sashRail3);
  const upperSill3 = new THREE.Mesh(boxGeo19, concreteMat);
  upperSill3.name = 'upperSill';
  upperSill3.position.set(2.7, 4.595, 0.1);
  frontStore.add(upperSill3);
  const lintel3 = new THREE.Mesh(boxGeo20, brickDarkMat);
  lintel3.name = 'lintel';
  lintel3.position.set(2.7, 6.375, 0.04);
  frontStore.add(lintel3);
  const sideStore = new THREE.Group();
  sideStore.name = 'sideStore';
  sideStore.position.set(4.2, 0.15, 0);
  sideStore.rotation.set(0, deg(90), 0);
  root.add(sideStore);
  const kickplate3 = new THREE.Mesh(new THREE.BoxGeometry(3.4, 0.55, 0.12), trimMat);
  kickplate3.name = 'kickplate';
  kickplate3.position.set(1.3, 0.625, 0.06);
  sideStore.add(kickplate3);
  const windowFrame3 = new THREE.Mesh(new THREE.BoxGeometry(3.6, 2.25, 0.08), trimMat);
  windowFrame3.name = 'windowFrame';
  windowFrame3.position.set(1.3, 2.025, 0.04);
  sideStore.add(windowFrame3);
  const displayGlass3 = new THREE.Mesh(new THREE.BoxGeometry(3.36, 2.05, 0.05), glassMat);
  displayGlass3.name = 'displayGlass';
  displayGlass3.position.set(1.3, 2.005, 0.09);
  sideStore.add(displayGlass3);
  const windowSill3 = new THREE.Mesh(new THREE.BoxGeometry(3.7, 0.08, 0.22), creamMat);
  windowSill3.name = 'windowSill';
  windowSill3.position.set(1.3, 0.92, 0.11);
  sideStore.add(windowSill3);
  const mullion3 = new THREE.Mesh(boxGeo10, trimMat);
  mullion3.name = 'mullion';
  mullion3.position.set(1.3, 2.005, 0.1);
  sideStore.add(mullion3);
  const transomBar3 = new THREE.Mesh(new THREE.BoxGeometry(3.36, 0.06, 0.1), trimMat);
  transomBar3.name = 'transomBar';
  transomBar3.position.set(1.3, 2.48, 0.1);
  sideStore.add(transomBar3);
  const sideSign = new THREE.Mesh(new THREE.BoxGeometry(3.9, 0.6, 0.1), signMat);
  sideSign.name = 'sideSign';
  sideSign.position.set(1.3, 3.25, 0.06);
  sideStore.add(sideSign);
  const sideAwning = new THREE.Group();
  sideAwning.name = 'sideAwning';
  sideAwning.position.set(1.3, 2.9, 0.08);
  sideStore.add(sideAwning);
  const awningStripe16 = new THREE.Mesh(boxGeo21, awningMat);
  awningStripe16.name = 'awningStripe';
  awningStripe16.position.set(-1.6625, -0.3, 0.725);
  awningStripe16.rotation.set(deg(22.4794), 0, 0);
  sideAwning.add(awningStripe16);
  const valance16 = new THREE.Mesh(boxGeo22, awningMat);
  valance16.name = 'valance';
  valance16.position.set(-1.6625, -0.73, 1.46);
  sideAwning.add(valance16);
  const awningStripe17 = new THREE.Mesh(boxGeo21, creamMat);
  awningStripe17.name = 'awningStripe';
  awningStripe17.position.set(-1.1875, -0.3, 0.725);
  awningStripe17.rotation.set(deg(22.4794), 0, 0);
  sideAwning.add(awningStripe17);
  const valance17 = new THREE.Mesh(boxGeo22, creamMat);
  valance17.name = 'valance';
  valance17.position.set(-1.1875, -0.73, 1.46);
  sideAwning.add(valance17);
  const awningStripe18 = new THREE.Mesh(boxGeo21, awningMat);
  awningStripe18.name = 'awningStripe';
  awningStripe18.position.set(-0.7125, -0.3, 0.725);
  awningStripe18.rotation.set(deg(22.4794), 0, 0);
  sideAwning.add(awningStripe18);
  const valance18 = new THREE.Mesh(boxGeo22, awningMat);
  valance18.name = 'valance';
  valance18.position.set(-0.7125, -0.73, 1.46);
  sideAwning.add(valance18);
  const awningStripe19 = new THREE.Mesh(boxGeo21, creamMat);
  awningStripe19.name = 'awningStripe';
  awningStripe19.position.set(-0.2375, -0.3, 0.725);
  awningStripe19.rotation.set(deg(22.4794), 0, 0);
  sideAwning.add(awningStripe19);
  const valance19 = new THREE.Mesh(boxGeo22, creamMat);
  valance19.name = 'valance';
  valance19.position.set(-0.2375, -0.73, 1.46);
  sideAwning.add(valance19);
  const awningStripe20 = new THREE.Mesh(boxGeo21, awningMat);
  awningStripe20.name = 'awningStripe';
  awningStripe20.position.set(0.2375, -0.3, 0.725);
  awningStripe20.rotation.set(deg(22.4794), 0, 0);
  sideAwning.add(awningStripe20);
  const valance20 = new THREE.Mesh(boxGeo22, awningMat);
  valance20.name = 'valance';
  valance20.position.set(0.2375, -0.73, 1.46);
  sideAwning.add(valance20);
  const awningStripe21 = new THREE.Mesh(boxGeo21, creamMat);
  awningStripe21.name = 'awningStripe';
  awningStripe21.position.set(0.7125, -0.3, 0.725);
  awningStripe21.rotation.set(deg(22.4794), 0, 0);
  sideAwning.add(awningStripe21);
  const valance21 = new THREE.Mesh(boxGeo22, creamMat);
  valance21.name = 'valance';
  valance21.position.set(0.7125, -0.73, 1.46);
  sideAwning.add(valance21);
  const awningStripe22 = new THREE.Mesh(boxGeo21, awningMat);
  awningStripe22.name = 'awningStripe';
  awningStripe22.position.set(1.1875, -0.3, 0.725);
  awningStripe22.rotation.set(deg(22.4794), 0, 0);
  sideAwning.add(awningStripe22);
  const valance22 = new THREE.Mesh(boxGeo22, awningMat);
  valance22.name = 'valance';
  valance22.position.set(1.1875, -0.73, 1.46);
  sideAwning.add(valance22);
  const awningStripe23 = new THREE.Mesh(boxGeo21, creamMat);
  awningStripe23.name = 'awningStripe';
  awningStripe23.position.set(1.6625, -0.3, 0.725);
  awningStripe23.rotation.set(deg(22.4794), 0, 0);
  sideAwning.add(awningStripe23);
  const valance23 = new THREE.Mesh(boxGeo22, creamMat);
  valance23.name = 'valance';
  valance23.position.set(1.6625, -0.73, 1.46);
  sideAwning.add(valance23);
  const awningCheek3 = new THREE.Mesh(extrudeGeo, awningMat);
  awningCheek3.name = 'awningCheek';
  awningCheek3.position.set(-1.915, 0.01, 0);
  awningCheek3.rotation.set(0, deg(-90), 0);
  sideAwning.add(awningCheek3);
  const awningArm3 = new THREE.Mesh(boxGeo15, trimMat);
  awningArm3.name = 'awningArm';
  awningArm3.position.set(-1.8, -0.62, 0.725);
  sideAwning.add(awningArm3);
  const awningCheek4 = new THREE.Mesh(extrudeGeo, awningMat);
  awningCheek4.name = 'awningCheek';
  awningCheek4.position.set(1.915, 0.01, 0);
  awningCheek4.rotation.set(0, deg(-90), 0);
  sideAwning.add(awningCheek4);
  const awningArm4 = new THREE.Mesh(boxGeo15, trimMat);
  awningArm4.name = 'awningArm';
  awningArm4.position.set(1.8, -0.62, 0.725);
  sideAwning.add(awningArm4);
  const awningRail2 = new THREE.Mesh(new THREE.BoxGeometry(3.9, 0.1, 0.1), trimMat);
  awningRail2.name = 'awningRail';
  awningRail2.position.set(0, 0.02, 0.05);
  sideAwning.add(awningRail2);
  const upperFrame4 = new THREE.Mesh(boxGeo16, creamMat);
  upperFrame4.name = 'upperFrame';
  upperFrame4.position.set(-1.6, 5.45, 0.03);
  sideStore.add(upperFrame4);
  const upperGlass4 = new THREE.Mesh(boxGeo17, glassMat);
  upperGlass4.name = 'upperGlass';
  upperGlass4.position.set(-1.6, 5.45, 0.06);
  sideStore.add(upperGlass4);
  const sashRail4 = new THREE.Mesh(boxGeo18, creamMat);
  sashRail4.name = 'sashRail';
  sashRail4.position.set(-1.6, 5.5, 0.06);
  sideStore.add(sashRail4);
  const upperSill4 = new THREE.Mesh(boxGeo19, concreteMat);
  upperSill4.name = 'upperSill';
  upperSill4.position.set(-1.6, 4.595, 0.1);
  sideStore.add(upperSill4);
  const lintel4 = new THREE.Mesh(boxGeo20, brickDarkMat);
  lintel4.name = 'lintel';
  lintel4.position.set(-1.6, 6.375, 0.04);
  sideStore.add(lintel4);
  const upperFrame5 = new THREE.Mesh(boxGeo16, creamMat);
  upperFrame5.name = 'upperFrame';
  upperFrame5.position.set(1.6, 5.45, 0.03);
  sideStore.add(upperFrame5);
  const upperGlass5 = new THREE.Mesh(boxGeo17, glassMat);
  upperGlass5.name = 'upperGlass';
  upperGlass5.position.set(1.6, 5.45, 0.06);
  sideStore.add(upperGlass5);
  const sashRail5 = new THREE.Mesh(boxGeo18, creamMat);
  sashRail5.name = 'sashRail';
  sashRail5.position.set(1.6, 5.5, 0.06);
  sideStore.add(sashRail5);
  const upperSill5 = new THREE.Mesh(boxGeo19, concreteMat);
  upperSill5.name = 'upperSill';
  upperSill5.position.set(1.6, 4.595, 0.1);
  sideStore.add(upperSill5);
  const lintel5 = new THREE.Mesh(boxGeo20, brickDarkMat);
  lintel5.name = 'lintel';
  lintel5.position.set(1.6, 6.375, 0.04);
  sideStore.add(lintel5);
  const backWall = new THREE.Group();
  backWall.name = 'backWall';
  backWall.position.set(0, 0.15, -3.6);
  backWall.rotation.set(0, deg(180), 0);
  root.add(backWall);
  const backDoor = new THREE.Mesh(new THREE.BoxGeometry(1.1, 2.15, 0.08), trimMat);
  backDoor.name = 'backDoor';
  backDoor.position.set(1.6, 1.425, 0.04);
  backWall.add(backDoor);
  const backDoorHood = new THREE.Mesh(new THREE.BoxGeometry(1.4, 0.08, 0.35), trimMat);
  backDoorHood.name = 'backDoorHood';
  backDoorHood.position.set(1.6, 2.69, 0.17);
  backWall.add(backDoorHood);
  const upperFrame6 = new THREE.Mesh(boxGeo16, creamMat);
  upperFrame6.name = 'upperFrame';
  upperFrame6.position.set(-1.6, 1.9, 0.03);
  backWall.add(upperFrame6);
  const upperGlass6 = new THREE.Mesh(boxGeo17, glassMat);
  upperGlass6.name = 'upperGlass';
  upperGlass6.position.set(-1.6, 1.9, 0.06);
  backWall.add(upperGlass6);
  const sashRail6 = new THREE.Mesh(boxGeo18, creamMat);
  sashRail6.name = 'sashRail';
  sashRail6.position.set(-1.6, 1.95, 0.06);
  backWall.add(sashRail6);
  const upperSill6 = new THREE.Mesh(boxGeo19, concreteMat);
  upperSill6.name = 'upperSill';
  upperSill6.position.set(-1.6, 1.045, 0.1);
  backWall.add(upperSill6);
  const lintel6 = new THREE.Mesh(boxGeo20, brickDarkMat);
  lintel6.name = 'lintel';
  lintel6.position.set(-1.6, 2.825, 0.04);
  backWall.add(lintel6);
  const upperFrame7 = new THREE.Mesh(boxGeo16, creamMat);
  upperFrame7.name = 'upperFrame';
  upperFrame7.position.set(-2.2, 5.45, 0.03);
  backWall.add(upperFrame7);
  const upperGlass7 = new THREE.Mesh(boxGeo17, glassMat);
  upperGlass7.name = 'upperGlass';
  upperGlass7.position.set(-2.2, 5.45, 0.06);
  backWall.add(upperGlass7);
  const sashRail7 = new THREE.Mesh(boxGeo18, creamMat);
  sashRail7.name = 'sashRail';
  sashRail7.position.set(-2.2, 5.5, 0.06);
  backWall.add(sashRail7);
  const upperSill7 = new THREE.Mesh(boxGeo19, concreteMat);
  upperSill7.name = 'upperSill';
  upperSill7.position.set(-2.2, 4.595, 0.1);
  backWall.add(upperSill7);
  const lintel7 = new THREE.Mesh(boxGeo20, brickDarkMat);
  lintel7.name = 'lintel';
  lintel7.position.set(-2.2, 6.375, 0.04);
  backWall.add(lintel7);
  const upperFrame8 = new THREE.Mesh(boxGeo16, creamMat);
  upperFrame8.name = 'upperFrame';
  upperFrame8.position.set(1.6, 5.45, 0.03);
  backWall.add(upperFrame8);
  const upperGlass8 = new THREE.Mesh(boxGeo17, glassMat);
  upperGlass8.name = 'upperGlass';
  upperGlass8.position.set(1.6, 5.45, 0.06);
  backWall.add(upperGlass8);
  const sashRail8 = new THREE.Mesh(boxGeo18, creamMat);
  sashRail8.name = 'sashRail';
  sashRail8.position.set(1.6, 5.5, 0.06);
  backWall.add(sashRail8);
  const upperSill8 = new THREE.Mesh(boxGeo19, concreteMat);
  upperSill8.name = 'upperSill';
  upperSill8.position.set(1.6, 4.595, 0.1);
  backWall.add(upperSill8);
  const lintel8 = new THREE.Mesh(boxGeo20, brickDarkMat);
  lintel8.name = 'lintel';
  lintel8.position.set(1.6, 6.375, 0.04);
  backWall.add(lintel8);
  const leftWall = new THREE.Group();
  leftWall.name = 'leftWall';
  leftWall.position.set(-4.2, 0.15, 0);
  leftWall.rotation.set(0, deg(-90), 0);
  root.add(leftWall);
  const muralPanel = new THREE.Mesh(new THREE.BoxGeometry(3.6, 1.6, 0.04), creamMat);
  muralPanel.name = 'muralPanel';
  muralPanel.position.set(0, 2, 0.02);
  leftWall.add(muralPanel);
  const muralPaint = new THREE.Mesh(new THREE.BoxGeometry(3.2, 1.25, 0.03), awningMat);
  muralPaint.name = 'muralPaint';
  muralPaint.position.set(0, 2, 0.045);
  leftWall.add(muralPaint);
  const upperFrame9 = new THREE.Mesh(boxGeo16, creamMat);
  upperFrame9.name = 'upperFrame';
  upperFrame9.position.set(-1.5, 5.45, 0.03);
  leftWall.add(upperFrame9);
  const upperGlass9 = new THREE.Mesh(boxGeo17, glassMat);
  upperGlass9.name = 'upperGlass';
  upperGlass9.position.set(-1.5, 5.45, 0.06);
  leftWall.add(upperGlass9);
  const sashRail9 = new THREE.Mesh(boxGeo18, creamMat);
  sashRail9.name = 'sashRail';
  sashRail9.position.set(-1.5, 5.5, 0.06);
  leftWall.add(sashRail9);
  const upperSill9 = new THREE.Mesh(boxGeo19, concreteMat);
  upperSill9.name = 'upperSill';
  upperSill9.position.set(-1.5, 4.595, 0.1);
  leftWall.add(upperSill9);
  const lintel9 = new THREE.Mesh(boxGeo20, brickDarkMat);
  lintel9.name = 'lintel';
  lintel9.position.set(-1.5, 6.375, 0.04);
  leftWall.add(lintel9);
  const upperFrame10 = new THREE.Mesh(boxGeo16, creamMat);
  upperFrame10.name = 'upperFrame';
  upperFrame10.position.set(1.5, 5.45, 0.03);
  leftWall.add(upperFrame10);
  const upperGlass10 = new THREE.Mesh(boxGeo17, glassMat);
  upperGlass10.name = 'upperGlass';
  upperGlass10.position.set(1.5, 5.45, 0.06);
  leftWall.add(upperGlass10);
  const sashRail10 = new THREE.Mesh(boxGeo18, creamMat);
  sashRail10.name = 'sashRail';
  sashRail10.position.set(1.5, 5.5, 0.06);
  leftWall.add(sashRail10);
  const upperSill10 = new THREE.Mesh(boxGeo19, concreteMat);
  upperSill10.name = 'upperSill';
  upperSill10.position.set(1.5, 4.595, 0.1);
  leftWall.add(upperSill10);
  const lintel10 = new THREE.Mesh(boxGeo20, brickDarkMat);
  lintel10.name = 'lintel';
  lintel10.position.set(1.5, 6.375, 0.04);
  leftWall.add(lintel10);
  const bladeSign = new THREE.Group();
  bladeSign.name = 'bladeSign';
  bladeSign.position.set(3.85, 5.35, 3.6);
  root.add(bladeSign);
  const bladeArm = new THREE.Mesh(new THREE.BoxGeometry(0.08, 0.08, 1.2), trimMat);
  bladeArm.name = 'bladeArm';
  bladeArm.position.set(0, 0.62, 0.6);
  bladeSign.add(bladeArm);
  const bladeDisc = new THREE.Mesh(new THREE.CylinderGeometry(0.5, 0.5, 0.1, 12), signMat);
  bladeDisc.name = 'bladeDisc';
  bladeDisc.position.set(0, 0, 0.75);
  bladeDisc.rotation.set(0, 0, deg(90));
  bladeSign.add(bladeDisc);
  const bladeFace = new THREE.Mesh(new THREE.CylinderGeometry(0.36, 0.36, 0.12, 12), creamMat);
  bladeFace.name = 'bladeFace';
  bladeFace.position.set(0, 0, 0.75);
  bladeFace.rotation.set(0, 0, deg(90));
  bladeSign.add(bladeFace);
  const roofDeck = new THREE.Mesh(new THREE.BoxGeometry(8, 0.04, 6.8), trimMat);
  roofDeck.name = 'roofDeck';
  roofDeck.position.set(0, 7.17, 0);
  root.add(roofDeck);
  const acUnit = new THREE.Mesh(new THREE.BoxGeometry(1.6, 0.9, 1.2), concreteMat);
  acUnit.name = 'acUnit';
  acUnit.position.set(-1.6, 7.6, -1.2);
  root.add(acUnit);
  const acFan = new THREE.Mesh(new THREE.CylinderGeometry(0.4, 0.4, 0.06, 10), trimMat);
  acFan.name = 'acFan';
  acFan.position.set(-1.6, 8.08, -1.2);
  root.add(acFan);
  const ventPipe = new THREE.Mesh(new THREE.CylinderGeometry(0.12, 0.12, 0.8, 6), trimMat);
  ventPipe.name = 'ventPipe';
  ventPipe.position.set(1.8, 7.55, -2);
  root.add(ventPipe);
  const standTable = new THREE.Mesh(new THREE.BoxGeometry(2.2, 0.7, 0.8), trimMat);
  standTable.name = 'standTable';
  standTable.position.set(-2.3, 0.5, 4.35);
  root.add(standTable);
  const fruitCrate = new THREE.Mesh(boxGeo23, creamMat);
  fruitCrate.name = 'fruitCrate';
  fruitCrate.position.set(-2.85, 0.99, 4.35);
  root.add(fruitCrate);
  const fruit = new THREE.Mesh(icosahedronGeo, fruitMat);
  fruit.name = 'fruit';
  fruit.position.set(-3.1662, 1.1612, 4.2);
  root.add(fruit);
  const fruit2 = new THREE.Mesh(icosahedronGeo, fruitMat);
  fruit2.name = 'fruit';
  fruit2.position.set(-2.8356, 1.1564, 4.2);
  root.add(fruit2);
  const fruit3 = new THREE.Mesh(icosahedronGeo, fruitMat);
  fruit3.name = 'fruit';
  fruit3.position.set(-2.5792, 1.1486, 4.2);
  root.add(fruit3);
  const fruit4 = new THREE.Mesh(icosahedronGeo, fruitMat);
  fruit4.name = 'fruit';
  fruit4.position.set(-3.162, 1.1659, 4.5);
  root.add(fruit4);
  const fruit5 = new THREE.Mesh(icosahedronGeo, fruitMat);
  fruit5.name = 'fruit';
  fruit5.position.set(-2.8627, 1.1602, 4.5);
  root.add(fruit5);
  const fruit6 = new THREE.Mesh(icosahedronGeo, fruitMat);
  fruit6.name = 'fruit';
  fruit6.position.set(-2.5366, 1.1401, 4.5);
  root.add(fruit6);
  const fruitCrate2 = new THREE.Mesh(boxGeo23, creamMat);
  fruitCrate2.name = 'fruitCrate';
  fruitCrate2.position.set(-1.75, 0.99, 4.35);
  root.add(fruitCrate2);
  const fruit7 = new THREE.Mesh(icosahedronGeo, signMat);
  fruit7.name = 'fruit';
  fruit7.position.set(-2.0789, 1.1617, 4.2);
  root.add(fruit7);
  const fruit8 = new THREE.Mesh(icosahedronGeo, signMat);
  fruit8.name = 'fruit';
  fruit8.position.set(-1.7675, 1.1409, 4.2);
  root.add(fruit8);
  const fruit9 = new THREE.Mesh(icosahedronGeo, signMat);
  fruit9.name = 'fruit';
  fruit9.position.set(-1.4726, 1.1488, 4.2);
  root.add(fruit9);
  const fruit10 = new THREE.Mesh(icosahedronGeo, signMat);
  fruit10.name = 'fruit';
  fruit10.position.set(-2.0205, 1.1398, 4.5);
  root.add(fruit10);
  const fruit11 = new THREE.Mesh(icosahedronGeo, signMat);
  fruit11.name = 'fruit';
  fruit11.position.set(-1.7751, 1.1639, 4.5);
  root.add(fruit11);
  const fruit12 = new THREE.Mesh(icosahedronGeo, signMat);
  fruit12.name = 'fruit';
  fruit12.position.set(-1.461, 1.1463, 4.5);
  root.add(fruit12);
  const chalkboard = new THREE.Group();
  chalkboard.name = 'chalkboard';
  chalkboard.position.set(1.7, 0.15, 4.95);
  chalkboard.rotation.set(0, deg(90), 0);
  root.add(chalkboard);
  const boardLeaf = new THREE.Mesh(boxGeo24, trimMat);
  boardLeaf.name = 'boardLeaf';
  boardLeaf.position.set(0, 0.48, -0.17);
  boardLeaf.rotation.set(deg(12), 0, 0);
  chalkboard.add(boardLeaf);
  const boardText = new THREE.Mesh(boxGeo25, creamMat);
  boardText.name = 'boardText';
  boardText.position.set(0, 0.52, -0.2);
  boardText.rotation.set(deg(12), 0, 0);
  chalkboard.add(boardText);
  const boardLeaf2 = new THREE.Mesh(boxGeo24, trimMat);
  boardLeaf2.name = 'boardLeaf';
  boardLeaf2.position.set(0, 0.48, 0.17);
  boardLeaf2.rotation.set(deg(-12), 0, 0);
  chalkboard.add(boardLeaf2);
  const boardText2 = new THREE.Mesh(boxGeo25, creamMat);
  boardText2.name = 'boardText';
  boardText2.position.set(0, 0.52, 0.2);
  boardText2.rotation.set(deg(-12), 0, 0);
  chalkboard.add(boardText2);

  root.traverse((o) => {
    if (o.isMesh) {
      o.castShadow = true;
      o.receiveShadow = true;
    }
  });
  return root;
}

export default createShop;

Ratings & comments

—
No ratings yet — be the first.
5
0
4
0
3
0
2
0
1
0

Sign in to rate and comment.

0 comments

No comments yet. Share how you used this model or what could be better.

Related models

Same category or similar tags