3,2 k tris12,5 × 7,50 × 12,5 m
Utiliser dans le code
Remixer dans l’éditeurjapanese-house.js · 1 575 lignes
Module ES autonome — ne dépend que de three. Appelez la fonction factory et ajoutez le groupe à votre scène.
/**
* Japanese House — Codels 3D model library
* License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
* Triangles: 3,176 · Size (W × H × D): 12.53 × 7.50 × 12.52 m
*
* Usage:
* import { createJapaneseHouse } from './japanese-house.js';
*
* const model = createJapaneseHouse();
* model.position.set(0, 0, 0);
* scene.add(model);
*/
import * as THREE from 'three';
const deg = THREE.MathUtils.degToRad;
// Deterministic vertex displacement (organic low-poly look).
function jitter(geometry, amount, seed) {
const pos = geometry.attributes.position;
const h = (a, b, c, s) => {
let x = Math.imul(a, 73856093) ^ Math.imul(b, 19349663) ^ Math.imul(c, 83492791) ^ Math.imul(s, 2654435761);
x = Math.imul(x ^ (x >>> 16), 2246822507);
x = Math.imul(x ^ (x >>> 13), 3266489909);
return ((x ^ (x >>> 16)) >>> 0) / 4294967295 - 0.5;
};
for (let i = 0; i < pos.count; i++) {
const x = pos.getX(i), y = pos.getY(i), z = pos.getZ(i);
const qx = Math.round(x * 1000), qy = Math.round(y * 1000), qz = Math.round(z * 1000);
pos.setXYZ(i, x + h(qx, qy, qz, seed) * 2 * amount, y + h(qx, qy, qz, seed + 1) * 2 * amount, z + h(qx, qy, qz, seed + 2) * 2 * amount);
}
pos.needsUpdate = true;
geometry.computeVertexNormals();
return geometry;
}
// Revolve a 2D profile [[radius, y], ...] around the Y axis.
function lathe(points, segments, phiStart = 0, phiLength = Math.PI * 2) {
return new THREE.LatheGeometry(points.map(([x, y]) => new THREE.Vector2(x, y)), segments, phiStart, phiLength);
}
// 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 createJapaneseHouse() {
const root = new THREE.Group();
root.name = 'JapaneseHouse';
// Materials
const plasterMat = new THREE.MeshStandardMaterial({ name: 'plaster', color: 0xefe8da, roughness: 0.95, flatShading: true });
const paperMat = new THREE.MeshStandardMaterial({ name: 'paper', color: 0xf7f0dc, roughness: 0.9, emissive: 0xfff1cf, emissiveIntensity: 0.12, flatShading: true });
const woodMat = new THREE.MeshStandardMaterial({ name: 'wood', color: 0x4a3428, roughness: 0.85, flatShading: true });
const deckMat = new THREE.MeshStandardMaterial({ name: 'deck', color: 0x826346, roughness: 0.85, flatShading: true });
const roofMat = new THREE.MeshStandardMaterial({ name: 'roof', color: 0x454c58, roughness: 0.75, flatShading: true });
const ridgeMat = new THREE.MeshStandardMaterial({ name: 'ridge', color: 0x343942, roughness: 0.75, flatShading: true });
const stoneMat = new THREE.MeshStandardMaterial({ name: 'stone', color: 0x8d8982, roughness: 0.95, flatShading: true });
const darkMat = new THREE.MeshStandardMaterial({ name: 'dark', color: 0x1f1b19, roughness: 1, flatShading: true });
const lampMat = new THREE.MeshStandardMaterial({ name: 'lamp', color: 0xffd889, roughness: 0.8, emissive: 0xffbf4d, flatShading: true });
// Shared geometries
const boxGeo = new THREE.BoxGeometry(0.16, 0.45, 0.16);
const boxGeo2 = new THREE.BoxGeometry(0.17, 2.75, 0.17);
const boxGeo3 = new THREE.BoxGeometry(1.708, 1.78, 0.03);
const boxGeo4 = new THREE.BoxGeometry(1.708, 0.36, 0.05);
const boxGeo5 = new THREE.BoxGeometry(0.06, 1.78, 0.05);
const boxGeo6 = new THREE.BoxGeometry(0.025, 1.4, 0.04);
const boxGeo7 = new THREE.BoxGeometry(9.44, 0.025, 0.04);
const boxGeo8 = new THREE.BoxGeometry(0.025, 0.7, 0.03);
const boxGeo9 = new THREE.BoxGeometry(1.5, 0.06, 0.06);
const boxGeo10 = new THREE.BoxGeometry(0.025, 0.6, 0.03);
const boxGeo11 = new THREE.BoxGeometry(1.58, 1.78, 0.03);
const boxGeo12 = new THREE.BoxGeometry(1.58, 0.36, 0.05);
const boxGeo13 = new THREE.BoxGeometry(3.52, 0.025, 0.04);
const boxGeo14 = new THREE.BoxGeometry(10.55, 0.01, 0.02);
const boxGeo15 = new THREE.BoxGeometry(0.12, 0.37, 0.12);
const boxGeo16 = new THREE.BoxGeometry(0.13, 2.79, 0.13);
const cylinderGeo = new THREE.CylinderGeometry(0.06, 0.06, 0.5088, 3, 1, true);
const cylinderGeo2 = new THREE.CylinderGeometry(0.06, 0.06, 1.0059, 3, 1, true);
const cylinderGeo3 = new THREE.CylinderGeometry(0.06, 0.06, 1.5031, 3, 1, true);
const cylinderGeo4 = new THREE.CylinderGeometry(0.06, 0.06, 1.9183, 3, 1, true);
const boxGeo17 = new THREE.BoxGeometry(11.625, 0.1, 0.12);
const cylinderGeo5 = new THREE.CylinderGeometry(0.06, 0.06, 0.7869, 3, 1, true);
const cylinderGeo6 = new THREE.CylinderGeometry(0.06, 0.06, 1.5077, 3, 1, true);
const cylinderGeo7 = new THREE.CylinderGeometry(0.06, 0.06, 2.2285, 3, 1, true);
const cylinderGeo8 = new THREE.CylinderGeometry(0.06, 0.06, 2.2708, 3, 1, true);
const boxGeo18 = new THREE.BoxGeometry(9.393, 0.1, 0.12);
const boxGeo19 = new THREE.BoxGeometry(0.2, 3.253, 0.2);
const boxGeo20 = new THREE.BoxGeometry(0.22, 0.3, 0.22);
const extrudeGeo = extrude([[-2.98, 0], [2.98, 0], [0, 1.9938]], 0.12);
const boxGeo21 = new THREE.BoxGeometry(0.14, 0.2, 6.06);
const boxGeo22 = new THREE.BoxGeometry(0.05, 0.8747, 0.09);
const boxGeo23 = new THREE.BoxGeometry(0.05, 1.9438, 0.09);
const boxGeo24 = new THREE.BoxGeometry(0.05, 0.08, 3.636);
const boxGeo25 = new THREE.BoxGeometry(0.08, 0.45, 0.35);
const boxGeo26 = new THREE.BoxGeometry(7.8, 0.14, 4.0848);
const cylinderGeo9 = new THREE.CylinderGeometry(0.06, 0.06, 4.0048, 3, 1, true);
const boxGeo27 = new THREE.BoxGeometry(7.84, 0.1, 0.14);
const boxGeo28 = new THREE.BoxGeometry(0.12, 0.16, 4.0848);
const boxGeo29 = new THREE.BoxGeometry(0.3, 0.7, 0.55);
const boxGeo30 = new THREE.BoxGeometry(0.2, 0.18, 0.38);
// Parts
const crawlspace = new THREE.Mesh(new THREE.BoxGeometry(9.3, 0.51, 6.9), darkMat);
crawlspace.name = 'crawlspace';
crawlspace.position.set(0, 0.255, 0);
root.add(crawlspace);
const floorBeam = new THREE.Mesh(new THREE.BoxGeometry(9.8, 0.14, 7.4), woodMat);
floorBeam.name = 'floorBeam';
floorBeam.position.set(0, 0.58, 0);
root.add(floorBeam);
const footingStone = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, -12), stoneMat);
footingStone.name = 'footingStone';
footingStone.position.set(-4.72, 0.091, 3.52);
footingStone.scale.set(1.1, 0.5, 1.1);
root.add(footingStone);
const stiltPost = new THREE.Mesh(boxGeo, woodMat);
stiltPost.name = 'stiltPost';
stiltPost.position.set(-4.72, 0.305, 3.52);
root.add(stiltPost);
const footingStone2 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, -82), stoneMat);
footingStone2.name = 'footingStone';
footingStone2.position.set(-4.72, 0.0974, -3.52);
footingStone2.scale.set(1.1, 0.5, 1.1);
root.add(footingStone2);
const stiltPost2 = new THREE.Mesh(boxGeo, woodMat);
stiltPost2.name = 'stiltPost';
stiltPost2.position.set(-4.72, 0.305, -3.52);
root.add(stiltPost2);
const footingStone3 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, 7), stoneMat);
footingStone3.name = 'footingStone';
footingStone3.position.set(-2.832, 0.0951, 3.52);
footingStone3.scale.set(1.1, 0.5, 1.1);
root.add(footingStone3);
const stiltPost3 = new THREE.Mesh(boxGeo, woodMat);
stiltPost3.name = 'stiltPost';
stiltPost3.position.set(-2.832, 0.305, 3.52);
root.add(stiltPost3);
const footingStone4 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, -64), stoneMat);
footingStone4.name = 'footingStone';
footingStone4.position.set(-2.832, 0.1008, -3.52);
footingStone4.scale.set(1.1, 0.5, 1.1);
root.add(footingStone4);
const stiltPost4 = new THREE.Mesh(boxGeo, woodMat);
stiltPost4.name = 'stiltPost';
stiltPost4.position.set(-2.832, 0.305, -3.52);
root.add(stiltPost4);
const footingStone5 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, 26), stoneMat);
footingStone5.name = 'footingStone';
footingStone5.position.set(-0.944, 0.0959, 3.52);
footingStone5.scale.set(1.1, 0.5, 1.1);
root.add(footingStone5);
const stiltPost5 = new THREE.Mesh(boxGeo, woodMat);
stiltPost5.name = 'stiltPost';
stiltPost5.position.set(-0.944, 0.305, 3.52);
root.add(stiltPost5);
const footingStone6 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, -45), stoneMat);
footingStone6.name = 'footingStone';
footingStone6.position.set(-0.944, 0.0989, -3.52);
footingStone6.scale.set(1.1, 0.5, 1.1);
root.add(footingStone6);
const stiltPost6 = new THREE.Mesh(boxGeo, woodMat);
stiltPost6.name = 'stiltPost';
stiltPost6.position.set(-0.944, 0.305, -3.52);
root.add(stiltPost6);
const footingStone7 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, 45), stoneMat);
footingStone7.name = 'footingStone';
footingStone7.position.set(0.944, 0.1083, 3.52);
footingStone7.scale.set(1.1, 0.5, 1.1);
root.add(footingStone7);
const stiltPost7 = new THREE.Mesh(boxGeo, woodMat);
stiltPost7.name = 'stiltPost';
stiltPost7.position.set(0.944, 0.305, 3.52);
root.add(stiltPost7);
const footingStone8 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, -26), stoneMat);
footingStone8.name = 'footingStone';
footingStone8.position.set(0.944, 0.1053, -3.52);
footingStone8.scale.set(1.1, 0.5, 1.1);
root.add(footingStone8);
const stiltPost8 = new THREE.Mesh(boxGeo, woodMat);
stiltPost8.name = 'stiltPost';
stiltPost8.position.set(0.944, 0.305, -3.52);
root.add(stiltPost8);
const footingStone9 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, 64), stoneMat);
footingStone9.name = 'footingStone';
footingStone9.position.set(2.832, 0.1018, 3.52);
footingStone9.scale.set(1.1, 0.5, 1.1);
root.add(footingStone9);
const stiltPost9 = new THREE.Mesh(boxGeo, woodMat);
stiltPost9.name = 'stiltPost';
stiltPost9.position.set(2.832, 0.305, 3.52);
root.add(stiltPost9);
const footingStone10 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, -7), stoneMat);
footingStone10.name = 'footingStone';
footingStone10.position.set(2.832, 0.0922, -3.52);
footingStone10.scale.set(1.1, 0.5, 1.1);
root.add(footingStone10);
const stiltPost10 = new THREE.Mesh(boxGeo, woodMat);
stiltPost10.name = 'stiltPost';
stiltPost10.position.set(2.832, 0.305, -3.52);
root.add(stiltPost10);
const footingStone11 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, 82), stoneMat);
footingStone11.name = 'footingStone';
footingStone11.position.set(4.72, 0.0982, 3.52);
footingStone11.scale.set(1.1, 0.5, 1.1);
root.add(footingStone11);
const stiltPost11 = new THREE.Mesh(boxGeo, woodMat);
stiltPost11.name = 'stiltPost';
stiltPost11.position.set(4.72, 0.305, 3.52);
root.add(stiltPost11);
const footingStone12 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, 12), stoneMat);
footingStone12.name = 'footingStone';
footingStone12.position.set(4.72, 0.0893, -3.52);
footingStone12.scale.set(1.1, 0.5, 1.1);
root.add(footingStone12);
const stiltPost12 = new THREE.Mesh(boxGeo, woodMat);
stiltPost12.name = 'stiltPost';
stiltPost12.position.set(4.72, 0.305, -3.52);
root.add(stiltPost12);
const footingStone13 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, 30), stoneMat);
footingStone13.name = 'footingStone';
footingStone13.position.set(4.72, 0.0835, -1.76);
footingStone13.scale.set(1.1, 0.5, 1.1);
root.add(footingStone13);
const stiltPost13 = new THREE.Mesh(boxGeo, woodMat);
stiltPost13.name = 'stiltPost';
stiltPost13.position.set(4.72, 0.305, -1.76);
root.add(stiltPost13);
const footingStone14 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, -65), stoneMat);
footingStone14.name = 'footingStone';
footingStone14.position.set(-4.72, 0.1028, -1.76);
footingStone14.scale.set(1.1, 0.5, 1.1);
root.add(footingStone14);
const stiltPost14 = new THREE.Mesh(boxGeo, woodMat);
stiltPost14.name = 'stiltPost';
stiltPost14.position.set(-4.72, 0.305, -1.76);
root.add(stiltPost14);
const footingStone15 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, 47), stoneMat);
footingStone15.name = 'footingStone';
footingStone15.position.set(4.72, 0.0892, 0);
footingStone15.scale.set(1.1, 0.5, 1.1);
root.add(footingStone15);
const stiltPost15 = new THREE.Mesh(boxGeo, woodMat);
stiltPost15.name = 'stiltPost';
stiltPost15.position.set(4.72, 0.305, 0);
root.add(stiltPost15);
const footingStone16 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, -47), stoneMat);
footingStone16.name = 'footingStone';
footingStone16.position.set(-4.72, 0.0956, 0);
footingStone16.scale.set(1.1, 0.5, 1.1);
root.add(footingStone16);
const stiltPost16 = new THREE.Mesh(boxGeo, woodMat);
stiltPost16.name = 'stiltPost';
stiltPost16.position.set(-4.72, 0.305, 0);
root.add(stiltPost16);
const footingStone17 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, 65), stoneMat);
footingStone17.name = 'footingStone';
footingStone17.position.set(4.72, 0.0997, 1.76);
footingStone17.scale.set(1.1, 0.5, 1.1);
root.add(footingStone17);
const stiltPost17 = new THREE.Mesh(boxGeo, woodMat);
stiltPost17.name = 'stiltPost';
stiltPost17.position.set(4.72, 0.305, 1.76);
root.add(stiltPost17);
const footingStone18 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.19, 0), 0.03, -30), stoneMat);
footingStone18.name = 'footingStone';
footingStone18.position.set(-4.72, 0.1027, 1.76);
footingStone18.scale.set(1.1, 0.5, 1.1);
root.add(footingStone18);
const stiltPost18 = new THREE.Mesh(boxGeo, woodMat);
stiltPost18.name = 'stiltPost';
stiltPost18.position.set(-4.72, 0.305, 1.76);
root.add(stiltPost18);
const walls = new THREE.Mesh(new THREE.BoxGeometry(9.6, 2.75, 7.2), plasterMat);
walls.name = 'walls';
walls.position.set(0, 2.025, 0);
root.add(walls);
const post = new THREE.Mesh(boxGeo2, woodMat);
post.name = 'post';
post.position.set(-4.72, 2.025, 3.52);
root.add(post);
const post2 = new THREE.Mesh(boxGeo2, woodMat);
post2.name = 'post';
post2.position.set(-4.72, 2.025, -3.52);
root.add(post2);
const post3 = new THREE.Mesh(boxGeo2, woodMat);
post3.name = 'post';
post3.position.set(-2.832, 2.025, 3.52);
root.add(post3);
const post4 = new THREE.Mesh(boxGeo2, woodMat);
post4.name = 'post';
post4.position.set(-2.832, 2.025, -3.52);
root.add(post4);
const post5 = new THREE.Mesh(boxGeo2, woodMat);
post5.name = 'post';
post5.position.set(-0.944, 2.025, 3.52);
root.add(post5);
const post6 = new THREE.Mesh(boxGeo2, woodMat);
post6.name = 'post';
post6.position.set(-0.944, 2.025, -3.52);
root.add(post6);
const post7 = new THREE.Mesh(boxGeo2, woodMat);
post7.name = 'post';
post7.position.set(0.944, 2.025, 3.52);
root.add(post7);
const post8 = new THREE.Mesh(boxGeo2, woodMat);
post8.name = 'post';
post8.position.set(0.944, 2.025, -3.52);
root.add(post8);
const post9 = new THREE.Mesh(boxGeo2, woodMat);
post9.name = 'post';
post9.position.set(2.832, 2.025, 3.52);
root.add(post9);
const post10 = new THREE.Mesh(boxGeo2, woodMat);
post10.name = 'post';
post10.position.set(2.832, 2.025, -3.52);
root.add(post10);
const post11 = new THREE.Mesh(boxGeo2, woodMat);
post11.name = 'post';
post11.position.set(4.72, 2.025, 3.52);
root.add(post11);
const post12 = new THREE.Mesh(boxGeo2, woodMat);
post12.name = 'post';
post12.position.set(4.72, 2.025, -3.52);
root.add(post12);
const post13 = new THREE.Mesh(boxGeo2, woodMat);
post13.name = 'post';
post13.position.set(4.72, 2.025, -1.76);
root.add(post13);
const post14 = new THREE.Mesh(boxGeo2, woodMat);
post14.name = 'post';
post14.position.set(-4.72, 2.025, -1.76);
root.add(post14);
const post15 = new THREE.Mesh(boxGeo2, woodMat);
post15.name = 'post';
post15.position.set(4.72, 2.025, 0);
root.add(post15);
const post16 = new THREE.Mesh(boxGeo2, woodMat);
post16.name = 'post';
post16.position.set(-4.72, 2.025, 0);
root.add(post16);
const post17 = new THREE.Mesh(boxGeo2, woodMat);
post17.name = 'post';
post17.position.set(4.72, 2.025, 1.76);
root.add(post17);
const post18 = new THREE.Mesh(boxGeo2, woodMat);
post18.name = 'post';
post18.position.set(-4.72, 2.025, 1.76);
root.add(post18);
const nageshi = new THREE.Mesh(new THREE.BoxGeometry(9.66, 0.16, 7.26), woodMat);
nageshi.name = 'nageshi';
nageshi.position.set(0, 2.65, 0);
root.add(nageshi);
const eaveBeam = new THREE.Mesh(new THREE.BoxGeometry(9.66, 0.22, 7.26), woodMat);
eaveBeam.name = 'eaveBeam';
eaveBeam.position.set(0, 3.29, 0);
root.add(eaveBeam);
const sill = new THREE.Mesh(new THREE.BoxGeometry(9.64, 0.12, 7.24), woodMat);
sill.name = 'sill';
sill.position.set(0, 0.71, 0);
root.add(sill);
const frontWall = new THREE.Group();
frontWall.name = 'frontWall';
frontWall.position.set(0, 0, 3.6);
root.add(frontWall);
const shoji = new THREE.Mesh(boxGeo3, paperMat);
shoji.name = 'shoji';
shoji.position.set(-3.776, 1.66, 0.02);
frontWall.add(shoji);
const koshiPanel = new THREE.Mesh(boxGeo4, woodMat);
koshiPanel.name = 'koshiPanel';
koshiPanel.position.set(-3.776, 0.95, 0.04);
frontWall.add(koshiPanel);
const shojiStile = new THREE.Mesh(boxGeo5, woodMat);
shojiStile.name = 'shojiStile';
shojiStile.position.set(-3.776, 1.66, 0.05);
frontWall.add(shojiStile);
const kumiko = new THREE.Mesh(boxGeo6, woodMat);
kumiko.name = 'kumiko';
kumiko.position.set(-4.203, 1.83, 0.05);
frontWall.add(kumiko);
const kumiko2 = new THREE.Mesh(boxGeo6, woodMat);
kumiko2.name = 'kumiko';
kumiko2.position.set(-3.349, 1.83, 0.05);
frontWall.add(kumiko2);
const shoji2 = new THREE.Mesh(boxGeo3, paperMat);
shoji2.name = 'shoji';
shoji2.position.set(-1.888, 1.66, 0.02);
frontWall.add(shoji2);
const koshiPanel2 = new THREE.Mesh(boxGeo4, woodMat);
koshiPanel2.name = 'koshiPanel';
koshiPanel2.position.set(-1.888, 0.95, 0.04);
frontWall.add(koshiPanel2);
const shojiStile2 = new THREE.Mesh(boxGeo5, woodMat);
shojiStile2.name = 'shojiStile';
shojiStile2.position.set(-1.888, 1.66, 0.05);
frontWall.add(shojiStile2);
const kumiko3 = new THREE.Mesh(boxGeo6, woodMat);
kumiko3.name = 'kumiko';
kumiko3.position.set(-2.315, 1.83, 0.05);
frontWall.add(kumiko3);
const kumiko4 = new THREE.Mesh(boxGeo6, woodMat);
kumiko4.name = 'kumiko';
kumiko4.position.set(-1.461, 1.83, 0.05);
frontWall.add(kumiko4);
const openingInterior = new THREE.Mesh(new THREE.BoxGeometry(1.708, 1.78, 0.02), darkMat);
openingInterior.name = 'openingInterior';
openingInterior.position.set(0, 1.66, 0.01);
frontWall.add(openingInterior);
const shojiSlid = new THREE.Mesh(new THREE.BoxGeometry(0.854, 1.78, 0.04), paperMat);
shojiSlid.name = 'shojiSlid';
shojiSlid.position.set(0.427, 1.66, 0.05);
frontWall.add(shojiSlid);
const shoji3 = new THREE.Mesh(boxGeo3, paperMat);
shoji3.name = 'shoji';
shoji3.position.set(1.888, 1.66, 0.02);
frontWall.add(shoji3);
const koshiPanel3 = new THREE.Mesh(boxGeo4, woodMat);
koshiPanel3.name = 'koshiPanel';
koshiPanel3.position.set(1.888, 0.95, 0.04);
frontWall.add(koshiPanel3);
const shojiStile3 = new THREE.Mesh(boxGeo5, woodMat);
shojiStile3.name = 'shojiStile';
shojiStile3.position.set(1.888, 1.66, 0.05);
frontWall.add(shojiStile3);
const kumiko5 = new THREE.Mesh(boxGeo6, woodMat);
kumiko5.name = 'kumiko';
kumiko5.position.set(1.461, 1.83, 0.05);
frontWall.add(kumiko5);
const kumiko6 = new THREE.Mesh(boxGeo6, woodMat);
kumiko6.name = 'kumiko';
kumiko6.position.set(2.315, 1.83, 0.05);
frontWall.add(kumiko6);
const shoji4 = new THREE.Mesh(boxGeo3, paperMat);
shoji4.name = 'shoji';
shoji4.position.set(3.776, 1.66, 0.02);
frontWall.add(shoji4);
const koshiPanel4 = new THREE.Mesh(boxGeo4, woodMat);
koshiPanel4.name = 'koshiPanel';
koshiPanel4.position.set(3.776, 0.95, 0.04);
frontWall.add(koshiPanel4);
const shojiStile4 = new THREE.Mesh(boxGeo5, woodMat);
shojiStile4.name = 'shojiStile';
shojiStile4.position.set(3.776, 1.66, 0.05);
frontWall.add(shojiStile4);
const kumiko7 = new THREE.Mesh(boxGeo6, woodMat);
kumiko7.name = 'kumiko';
kumiko7.position.set(3.349, 1.83, 0.05);
frontWall.add(kumiko7);
const kumiko8 = new THREE.Mesh(boxGeo6, woodMat);
kumiko8.name = 'kumiko';
kumiko8.position.set(4.203, 1.83, 0.05);
frontWall.add(kumiko8);
const kumikoRail = new THREE.Mesh(boxGeo7, woodMat);
kumikoRail.name = 'kumikoRail';
kumikoRail.position.set(0, 1.55, 0.05);
frontWall.add(kumikoRail);
const kumikoRail2 = new THREE.Mesh(boxGeo7, woodMat);
kumikoRail2.name = 'kumikoRail';
kumikoRail2.position.set(0, 2, 0.05);
frontWall.add(kumikoRail2);
const backWall = new THREE.Group();
backWall.name = 'backWall';
backWall.position.set(0, 0, -3.6);
backWall.rotation.set(0, deg(180), 0);
root.add(backWall);
const koshiita = new THREE.Mesh(new THREE.BoxGeometry(9.5, 1, 0.04), woodMat);
koshiita.name = 'koshiita';
koshiita.position.set(0, 1.27, 0.02);
backWall.add(koshiita);
const latticeWindow = new THREE.Mesh(new THREE.BoxGeometry(1.4, 0.7, 0.04), paperMat);
latticeWindow.name = 'latticeWindow';
latticeWindow.position.set(-1.2, 2.15, 0.03);
backWall.add(latticeWindow);
const lattice = new THREE.Mesh(boxGeo8, woodMat);
lattice.name = 'lattice';
lattice.position.set(-1.62, 2.15, 0.05);
backWall.add(lattice);
const lattice2 = new THREE.Mesh(boxGeo8, woodMat);
lattice2.name = 'lattice';
lattice2.position.set(-1.34, 2.15, 0.05);
backWall.add(lattice2);
const lattice3 = new THREE.Mesh(boxGeo8, woodMat);
lattice3.name = 'lattice';
lattice3.position.set(-1.06, 2.15, 0.05);
backWall.add(lattice3);
const lattice4 = new THREE.Mesh(boxGeo8, woodMat);
lattice4.name = 'lattice';
lattice4.position.set(-0.78, 2.15, 0.05);
backWall.add(lattice4);
const latticeFrame = new THREE.Mesh(boxGeo9, woodMat);
latticeFrame.name = 'latticeFrame';
latticeFrame.position.set(-1.2, 2.53, 0.05);
backWall.add(latticeFrame);
const latticeFrame2 = new THREE.Mesh(boxGeo9, woodMat);
latticeFrame2.name = 'latticeFrame';
latticeFrame2.position.set(-1.2, 1.77, 0.05);
backWall.add(latticeFrame2);
const leftWall = new THREE.Group();
leftWall.name = 'leftWall';
leftWall.position.set(-4.8, 0, 0);
leftWall.rotation.set(0, deg(-90), 0);
root.add(leftWall);
const koshiita2 = new THREE.Mesh(new THREE.BoxGeometry(7, 1, 0.04), woodMat);
koshiita2.name = 'koshiita';
koshiita2.position.set(0, 1.27, 0.02);
leftWall.add(koshiita2);
const latticeWindow2 = new THREE.Mesh(new THREE.BoxGeometry(1.6, 0.6, 0.04), paperMat);
latticeWindow2.name = 'latticeWindow';
latticeWindow2.position.set(0.6, 2.15, 0.03);
leftWall.add(latticeWindow2);
const lattice5 = new THREE.Mesh(boxGeo10, woodMat);
lattice5.name = 'lattice';
lattice5.position.set(0.07, 2.15, 0.05);
leftWall.add(lattice5);
const lattice6 = new THREE.Mesh(boxGeo10, woodMat);
lattice6.name = 'lattice';
lattice6.position.set(0.34, 2.15, 0.05);
leftWall.add(lattice6);
const lattice7 = new THREE.Mesh(boxGeo10, woodMat);
lattice7.name = 'lattice';
lattice7.position.set(0.61, 2.15, 0.05);
leftWall.add(lattice7);
const lattice8 = new THREE.Mesh(boxGeo10, woodMat);
lattice8.name = 'lattice';
lattice8.position.set(0.88, 2.15, 0.05);
leftWall.add(lattice8);
const lattice9 = new THREE.Mesh(boxGeo10, woodMat);
lattice9.name = 'lattice';
lattice9.position.set(1.15, 2.15, 0.05);
leftWall.add(lattice9);
const rightWall = new THREE.Group();
rightWall.name = 'rightWall';
rightWall.position.set(4.8, 0, 0);
rightWall.rotation.set(0, deg(90), 0);
root.add(rightWall);
const shoji5 = new THREE.Mesh(boxGeo11, paperMat);
shoji5.name = 'shoji';
shoji5.position.set(-2.64, 1.66, 0.02);
rightWall.add(shoji5);
const koshiPanel5 = new THREE.Mesh(boxGeo12, woodMat);
koshiPanel5.name = 'koshiPanel';
koshiPanel5.position.set(-2.64, 0.95, 0.04);
rightWall.add(koshiPanel5);
const shojiStile5 = new THREE.Mesh(boxGeo5, woodMat);
shojiStile5.name = 'shojiStile';
shojiStile5.position.set(-2.64, 1.66, 0.05);
rightWall.add(shojiStile5);
const kumiko9 = new THREE.Mesh(boxGeo6, woodMat);
kumiko9.name = 'kumiko';
kumiko9.position.set(-3.035, 1.83, 0.05);
rightWall.add(kumiko9);
const kumiko10 = new THREE.Mesh(boxGeo6, woodMat);
kumiko10.name = 'kumiko';
kumiko10.position.set(-2.245, 1.83, 0.05);
rightWall.add(kumiko10);
const shoji6 = new THREE.Mesh(boxGeo11, paperMat);
shoji6.name = 'shoji';
shoji6.position.set(-0.88, 1.66, 0.02);
rightWall.add(shoji6);
const koshiPanel6 = new THREE.Mesh(boxGeo12, woodMat);
koshiPanel6.name = 'koshiPanel';
koshiPanel6.position.set(-0.88, 0.95, 0.04);
rightWall.add(koshiPanel6);
const shojiStile6 = new THREE.Mesh(boxGeo5, woodMat);
shojiStile6.name = 'shojiStile';
shojiStile6.position.set(-0.88, 1.66, 0.05);
rightWall.add(shojiStile6);
const kumiko11 = new THREE.Mesh(boxGeo6, woodMat);
kumiko11.name = 'kumiko';
kumiko11.position.set(-1.275, 1.83, 0.05);
rightWall.add(kumiko11);
const kumiko12 = new THREE.Mesh(boxGeo6, woodMat);
kumiko12.name = 'kumiko';
kumiko12.position.set(-0.485, 1.83, 0.05);
rightWall.add(kumiko12);
const kumikoRail3 = new THREE.Mesh(boxGeo13, woodMat);
kumikoRail3.name = 'kumikoRail';
kumikoRail3.position.set(-1.76, 1.55, 0.05);
rightWall.add(kumikoRail3);
const kumikoRail4 = new THREE.Mesh(boxGeo13, woodMat);
kumikoRail4.name = 'kumikoRail';
kumikoRail4.position.set(-1.76, 2, 0.05);
rightWall.add(kumikoRail4);
const koshiita3 = new THREE.Mesh(new THREE.BoxGeometry(3.4, 1, 0.04), woodMat);
koshiita3.name = 'koshiita';
koshiita3.position.set(1.85, 1.27, 0.02);
rightWall.add(koshiita3);
const maruMado = new THREE.Mesh(new THREE.CylinderGeometry(0.5, 0.5, 0.04, 14), paperMat);
maruMado.name = 'maruMado';
maruMado.position.set(1.85, 2.25, 0.03);
maruMado.rotation.set(deg(90), 0, 0);
rightWall.add(maruMado);
const maruMadoFrame = new THREE.Mesh(new THREE.TorusGeometry(0.5, 0.06, 3, 12), woodMat);
maruMadoFrame.name = 'maruMadoFrame';
maruMadoFrame.position.set(1.85, 2.25, 0.05);
rightWall.add(maruMadoFrame);
const lattice10 = new THREE.Mesh(new THREE.BoxGeometry(0.025, 0.95, 0.03), woodMat);
lattice10.name = 'lattice';
lattice10.position.set(1.85, 2.25, 0.06);
rightWall.add(lattice10);
const lattice11 = new THREE.Mesh(new THREE.BoxGeometry(0.95, 0.025, 0.03), woodMat);
lattice11.name = 'lattice';
lattice11.position.set(1.85, 2.25, 0.06);
rightWall.add(lattice11);
const engawaFront = new THREE.Mesh(new THREE.BoxGeometry(10.55, 0.08, 0.95), deckMat);
engawaFront.name = 'engawaFront';
engawaFront.position.set(0.475, 0.57, 4.075);
root.add(engawaFront);
const engawaSide = new THREE.Mesh(new THREE.BoxGeometry(0.95, 0.08, 7.2), deckMat);
engawaSide.name = 'engawaSide';
engawaSide.position.set(5.275, 0.57, 0);
root.add(engawaSide);
const deckSeam = new THREE.Mesh(boxGeo14, woodMat);
deckSeam.name = 'deckSeam';
deckSeam.position.set(0.475, 0.615, 3.8375);
root.add(deckSeam);
const deckSeam2 = new THREE.Mesh(boxGeo14, woodMat);
deckSeam2.name = 'deckSeam';
deckSeam2.position.set(0.475, 0.615, 4.075);
root.add(deckSeam2);
const deckSeam3 = new THREE.Mesh(boxGeo14, woodMat);
deckSeam3.name = 'deckSeam';
deckSeam3.position.set(0.475, 0.615, 4.3125);
root.add(deckSeam3);
const engawaEdge = new THREE.Mesh(new THREE.BoxGeometry(10.59, 0.1, 0.08), woodMat);
engawaEdge.name = 'engawaEdge';
engawaEdge.position.set(0.475, 0.48, 4.55);
root.add(engawaEdge);
const engawaEdge2 = new THREE.Mesh(new THREE.BoxGeometry(0.08, 0.1, 8.15), woodMat);
engawaEdge2.name = 'engawaEdge';
engawaEdge2.position.set(5.75, 0.48, 0.475);
root.add(engawaEdge2);
const footingStone19 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.17, 0), 0.03, -92), stoneMat);
footingStone19.name = 'footingStone';
footingStone19.position.set(-4.72, 0.0702, 4.45);
footingStone19.scale.set(1.1, 0.5, 1.1);
root.add(footingStone19);
const deckPost = new THREE.Mesh(boxGeo15, woodMat);
deckPost.name = 'deckPost';
deckPost.position.set(-4.72, 0.245, 4.45);
root.add(deckPost);
const footingStone20 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.17, 0), 0.03, -73), stoneMat);
footingStone20.name = 'footingStone';
footingStone20.position.set(-2.832, 0.073, 4.45);
footingStone20.scale.set(1.1, 0.5, 1.1);
root.add(footingStone20);
const deckPost2 = new THREE.Mesh(boxGeo15, woodMat);
deckPost2.name = 'deckPost';
deckPost2.position.set(-2.832, 0.245, 4.45);
root.add(deckPost2);
const footingStone21 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.17, 0), 0.03, -54), stoneMat);
footingStone21.name = 'footingStone';
footingStone21.position.set(-0.944, 0.0916, 4.45);
footingStone21.scale.set(1.1, 0.5, 1.1);
root.add(footingStone21);
const deckPost3 = new THREE.Mesh(boxGeo15, woodMat);
deckPost3.name = 'deckPost';
deckPost3.position.set(-0.944, 0.245, 4.45);
root.add(deckPost3);
const footingStone22 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.17, 0), 0.03, -35), stoneMat);
footingStone22.name = 'footingStone';
footingStone22.position.set(0.944, 0.0896, 4.45);
footingStone22.scale.set(1.1, 0.5, 1.1);
root.add(footingStone22);
const deckPost4 = new THREE.Mesh(boxGeo15, woodMat);
deckPost4.name = 'deckPost';
deckPost4.position.set(0.944, 0.245, 4.45);
root.add(deckPost4);
const footingStone23 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.17, 0), 0.03, -16), stoneMat);
footingStone23.name = 'footingStone';
footingStone23.position.set(2.832, 0.0763, 4.45);
footingStone23.scale.set(1.1, 0.5, 1.1);
root.add(footingStone23);
const deckPost5 = new THREE.Mesh(boxGeo15, woodMat);
deckPost5.name = 'deckPost';
deckPost5.position.set(2.832, 0.245, 4.45);
root.add(deckPost5);
const footingStone24 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.17, 0), 0.03, 3), stoneMat);
footingStone24.name = 'footingStone';
footingStone24.position.set(4.72, 0.0985, 4.45);
footingStone24.scale.set(1.1, 0.5, 1.1);
root.add(footingStone24);
const deckPost6 = new THREE.Mesh(boxGeo15, woodMat);
deckPost6.name = 'deckPost';
deckPost6.position.set(4.72, 0.245, 4.45);
root.add(deckPost6);
const footingStone25 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.17, 0), 0.03, 12), stoneMat);
footingStone25.name = 'footingStone';
footingStone25.position.set(5.65, 0.089, 4.45);
footingStone25.scale.set(1.1, 0.5, 1.1);
root.add(footingStone25);
const deckPost7 = new THREE.Mesh(boxGeo15, woodMat);
deckPost7.name = 'deckPost';
deckPost7.position.set(5.65, 0.245, 4.45);
root.add(deckPost7);
const footingStone26 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.17, 0), 0.03, 92), stoneMat);
footingStone26.name = 'footingStone';
footingStone26.position.set(5.65, 0.0824, -3.52);
footingStone26.scale.set(1.1, 0.5, 1.1);
root.add(footingStone26);
const deckPost8 = new THREE.Mesh(boxGeo15, woodMat);
deckPost8.name = 'deckPost';
deckPost8.position.set(5.65, 0.245, -3.52);
root.add(deckPost8);
const footingStone27 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.17, 0), 0.03, 74), stoneMat);
footingStone27.name = 'footingStone';
footingStone27.position.set(5.65, 0.0857, -1.76);
footingStone27.scale.set(1.1, 0.5, 1.1);
root.add(footingStone27);
const deckPost9 = new THREE.Mesh(boxGeo15, woodMat);
deckPost9.name = 'deckPost';
deckPost9.position.set(5.65, 0.245, -1.76);
root.add(deckPost9);
const footingStone28 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.17, 0), 0.03, 57), stoneMat);
footingStone28.name = 'footingStone';
footingStone28.position.set(5.65, 0.0764, 0);
footingStone28.scale.set(1.1, 0.5, 1.1);
root.add(footingStone28);
const deckPost10 = new THREE.Mesh(boxGeo15, woodMat);
deckPost10.name = 'deckPost';
deckPost10.position.set(5.65, 0.245, 0);
root.add(deckPost10);
const footingStone29 = new THREE.Mesh(jitter(new THREE.OctahedronGeometry(0.17, 0), 0.03, 39), stoneMat);
footingStone29.name = 'footingStone';
footingStone29.position.set(5.65, 0.0832, 1.76);
footingStone29.scale.set(1.1, 0.5, 1.1);
root.add(footingStone29);
const deckPost11 = new THREE.Mesh(boxGeo15, woodMat);
deckPost11.name = 'deckPost';
deckPost11.position.set(5.65, 0.245, 1.76);
root.add(deckPost11);
const eavePost = new THREE.Mesh(boxGeo16, woodMat);
eavePost.name = 'eavePost';
eavePost.position.set(-4.72, 2.005, 4.45);
root.add(eavePost);
const eavePost2 = new THREE.Mesh(boxGeo16, woodMat);
eavePost2.name = 'eavePost';
eavePost2.position.set(0, 2.005, 4.45);
root.add(eavePost2);
const eavePost3 = new THREE.Mesh(boxGeo16, woodMat);
eavePost3.name = 'eavePost';
eavePost3.position.set(5.65, 2.005, 4.45);
root.add(eavePost3);
const eavePost4 = new THREE.Mesh(boxGeo16, woodMat);
eavePost4.name = 'eavePost';
eavePost4.position.set(5.65, 2.005, -3.5);
root.add(eavePost4);
const steppingStone = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.5, 0), 0.04, 5), stoneMat);
steppingStone.name = 'steppingStone';
steppingStone.position.set(0.6, 0.1994, 5);
steppingStone.scale.set(1.4, 0.4, 0.9);
root.add(steppingStone);
const soffit = new THREE.Mesh(new THREE.BoxGeometry(12.5, 0.06, 10.1), woodMat);
soffit.name = 'soffit';
soffit.position.set(0, 3.43, 0);
root.add(soffit);
const hipSkirt = new THREE.Mesh(lathe([[1.4142, 0], [1.4142, 0.18], [1.3152, 0.3], [0.8485, 1.25]], 4, Math.PI / 4, Math.PI * 2), roofMat);
hipSkirt.name = 'hipSkirt';
hipSkirt.position.set(0, 3.4, 0);
hipSkirt.scale.set(6.25, 1, 5.05);
root.add(hipSkirt);
const skirtCap = new THREE.Mesh(new THREE.BoxGeometry(7.55, 0.05, 6.11), roofMat);
skirtCap.name = 'skirtCap';
skirtCap.position.set(0, 4.615, 0);
root.add(skirtCap);
const skirtTiles = new THREE.Group();
skirtTiles.name = 'skirtTiles';
root.add(skirtTiles);
const tileRib = new THREE.Mesh(cylinderGeo, roofMat);
tileRib.name = 'tileRib';
tileRib.position.set(-5.078, 3.866, 4.4755);
tileRib.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib);
const tileRib2 = new THREE.Mesh(cylinderGeo2, roofMat);
tileRib2.name = 'tileRib';
tileRib2.position.set(-4.5435, 3.9891, 4.2596);
tileRib2.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib2);
const tileRib3 = new THREE.Mesh(cylinderGeo3, roofMat);
tileRib3.name = 'tileRib';
tileRib3.position.set(-4.0089, 4.1122, 4.0436);
tileRib3.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib3);
const tileRib4 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib4.name = 'tileRib';
tileRib4.position.set(-3.4744, 4.215, 3.8633);
tileRib4.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib4);
const tileRib5 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib5.name = 'tileRib';
tileRib5.position.set(-2.9399, 4.215, 3.8633);
tileRib5.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib5);
const tileRib6 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib6.name = 'tileRib';
tileRib6.position.set(-2.4054, 4.215, 3.8633);
tileRib6.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib6);
const tileRib7 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib7.name = 'tileRib';
tileRib7.position.set(-1.8708, 4.215, 3.8633);
tileRib7.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib7);
const tileRib8 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib8.name = 'tileRib';
tileRib8.position.set(-1.3363, 4.215, 3.8633);
tileRib8.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib8);
const tileRib9 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib9.name = 'tileRib';
tileRib9.position.set(-0.8018, 4.215, 3.8633);
tileRib9.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib9);
const tileRib10 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib10.name = 'tileRib';
tileRib10.position.set(-0.2673, 4.215, 3.8633);
tileRib10.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib10);
const tileRib11 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib11.name = 'tileRib';
tileRib11.position.set(0.2673, 4.215, 3.8633);
tileRib11.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib11);
const tileRib12 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib12.name = 'tileRib';
tileRib12.position.set(0.8018, 4.215, 3.8633);
tileRib12.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib12);
const tileRib13 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib13.name = 'tileRib';
tileRib13.position.set(1.3363, 4.215, 3.8633);
tileRib13.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib13);
const tileRib14 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib14.name = 'tileRib';
tileRib14.position.set(1.8708, 4.215, 3.8633);
tileRib14.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib14);
const tileRib15 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib15.name = 'tileRib';
tileRib15.position.set(2.4054, 4.215, 3.8633);
tileRib15.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib15);
const tileRib16 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib16.name = 'tileRib';
tileRib16.position.set(2.9399, 4.215, 3.8633);
tileRib16.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib16);
const tileRib17 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib17.name = 'tileRib';
tileRib17.position.set(3.4744, 4.215, 3.8633);
tileRib17.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib17);
const tileRib18 = new THREE.Mesh(cylinderGeo3, roofMat);
tileRib18.name = 'tileRib';
tileRib18.position.set(4.0089, 4.1122, 4.0436);
tileRib18.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib18);
const tileRib19 = new THREE.Mesh(cylinderGeo2, roofMat);
tileRib19.name = 'tileRib';
tileRib19.position.set(4.5435, 3.9891, 4.2596);
tileRib19.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib19);
const tileRib20 = new THREE.Mesh(cylinderGeo, roofMat);
tileRib20.name = 'tileRib';
tileRib20.position.set(5.078, 3.866, 4.4755);
tileRib20.rotation.set(deg(-60.3144), 0, 0);
skirtTiles.add(tileRib20);
const eaveTiles = new THREE.Mesh(boxGeo17, ridgeMat);
eaveTiles.name = 'eaveTiles';
eaveTiles.position.set(0, 3.72, 4.7975);
skirtTiles.add(eaveTiles);
const skirtTiles2 = new THREE.Group();
skirtTiles2.name = 'skirtTiles';
skirtTiles2.rotation.set(0, deg(90), 0);
root.add(skirtTiles2);
const tileRib21 = new THREE.Mesh(cylinderGeo5, roofMat);
tileRib21.name = 'tileRib';
tileRib21.position.set(-3.9675, 3.9046, 5.4551);
tileRib21.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib21);
const tileRib22 = new THREE.Mesh(cylinderGeo6, roofMat);
tileRib22.name = 'tileRib';
tileRib22.position.set(-3.4385, 4.0554, 5.1278);
tileRib22.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib22);
const tileRib23 = new THREE.Mesh(cylinderGeo7, roofMat);
tileRib23.name = 'tileRib';
tileRib23.position.set(-2.9095, 4.2062, 4.8004);
tileRib23.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib23);
const tileRib24 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib24.name = 'tileRib';
tileRib24.position.set(-2.3805, 4.215, 4.7813);
tileRib24.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib24);
const tileRib25 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib25.name = 'tileRib';
tileRib25.position.set(-1.8515, 4.215, 4.7813);
tileRib25.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib25);
const tileRib26 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib26.name = 'tileRib';
tileRib26.position.set(-1.3225, 4.215, 4.7813);
tileRib26.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib26);
const tileRib27 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib27.name = 'tileRib';
tileRib27.position.set(-0.7935, 4.215, 4.7813);
tileRib27.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib27);
const tileRib28 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib28.name = 'tileRib';
tileRib28.position.set(-0.2645, 4.215, 4.7813);
tileRib28.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib28);
const tileRib29 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib29.name = 'tileRib';
tileRib29.position.set(0.2645, 4.215, 4.7813);
tileRib29.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib29);
const tileRib30 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib30.name = 'tileRib';
tileRib30.position.set(0.7935, 4.215, 4.7813);
tileRib30.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib30);
const tileRib31 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib31.name = 'tileRib';
tileRib31.position.set(1.3225, 4.215, 4.7813);
tileRib31.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib31);
const tileRib32 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib32.name = 'tileRib';
tileRib32.position.set(1.8515, 4.215, 4.7813);
tileRib32.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib32);
const tileRib33 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib33.name = 'tileRib';
tileRib33.position.set(2.3805, 4.215, 4.7813);
tileRib33.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib33);
const tileRib34 = new THREE.Mesh(cylinderGeo7, roofMat);
tileRib34.name = 'tileRib';
tileRib34.position.set(2.9095, 4.2062, 4.8004);
tileRib34.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib34);
const tileRib35 = new THREE.Mesh(cylinderGeo6, roofMat);
tileRib35.name = 'tileRib';
tileRib35.position.set(3.4385, 4.0554, 5.1278);
tileRib35.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib35);
const tileRib36 = new THREE.Mesh(cylinderGeo5, roofMat);
tileRib36.name = 'tileRib';
tileRib36.position.set(3.9675, 3.9046, 5.4551);
tileRib36.rotation.set(deg(-65.2689), 0, 0);
skirtTiles2.add(tileRib36);
const eaveTiles2 = new THREE.Mesh(boxGeo18, ridgeMat);
eaveTiles2.name = 'eaveTiles';
eaveTiles2.position.set(0, 3.72, 5.9375);
skirtTiles2.add(eaveTiles2);
const skirtTiles3 = new THREE.Group();
skirtTiles3.name = 'skirtTiles';
skirtTiles3.rotation.set(0, deg(180), 0);
root.add(skirtTiles3);
const tileRib37 = new THREE.Mesh(cylinderGeo, roofMat);
tileRib37.name = 'tileRib';
tileRib37.position.set(-5.078, 3.866, 4.4755);
tileRib37.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib37);
const tileRib38 = new THREE.Mesh(cylinderGeo2, roofMat);
tileRib38.name = 'tileRib';
tileRib38.position.set(-4.5435, 3.9891, 4.2596);
tileRib38.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib38);
const tileRib39 = new THREE.Mesh(cylinderGeo3, roofMat);
tileRib39.name = 'tileRib';
tileRib39.position.set(-4.0089, 4.1122, 4.0436);
tileRib39.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib39);
const tileRib40 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib40.name = 'tileRib';
tileRib40.position.set(-3.4744, 4.215, 3.8633);
tileRib40.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib40);
const tileRib41 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib41.name = 'tileRib';
tileRib41.position.set(-2.9399, 4.215, 3.8633);
tileRib41.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib41);
const tileRib42 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib42.name = 'tileRib';
tileRib42.position.set(-2.4054, 4.215, 3.8633);
tileRib42.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib42);
const tileRib43 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib43.name = 'tileRib';
tileRib43.position.set(-1.8708, 4.215, 3.8633);
tileRib43.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib43);
const tileRib44 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib44.name = 'tileRib';
tileRib44.position.set(-1.3363, 4.215, 3.8633);
tileRib44.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib44);
const tileRib45 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib45.name = 'tileRib';
tileRib45.position.set(-0.8018, 4.215, 3.8633);
tileRib45.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib45);
const tileRib46 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib46.name = 'tileRib';
tileRib46.position.set(-0.2673, 4.215, 3.8633);
tileRib46.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib46);
const tileRib47 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib47.name = 'tileRib';
tileRib47.position.set(0.2673, 4.215, 3.8633);
tileRib47.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib47);
const tileRib48 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib48.name = 'tileRib';
tileRib48.position.set(0.8018, 4.215, 3.8633);
tileRib48.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib48);
const tileRib49 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib49.name = 'tileRib';
tileRib49.position.set(1.3363, 4.215, 3.8633);
tileRib49.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib49);
const tileRib50 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib50.name = 'tileRib';
tileRib50.position.set(1.8708, 4.215, 3.8633);
tileRib50.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib50);
const tileRib51 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib51.name = 'tileRib';
tileRib51.position.set(2.4054, 4.215, 3.8633);
tileRib51.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib51);
const tileRib52 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib52.name = 'tileRib';
tileRib52.position.set(2.9399, 4.215, 3.8633);
tileRib52.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib52);
const tileRib53 = new THREE.Mesh(cylinderGeo4, roofMat);
tileRib53.name = 'tileRib';
tileRib53.position.set(3.4744, 4.215, 3.8633);
tileRib53.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib53);
const tileRib54 = new THREE.Mesh(cylinderGeo3, roofMat);
tileRib54.name = 'tileRib';
tileRib54.position.set(4.0089, 4.1122, 4.0436);
tileRib54.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib54);
const tileRib55 = new THREE.Mesh(cylinderGeo2, roofMat);
tileRib55.name = 'tileRib';
tileRib55.position.set(4.5435, 3.9891, 4.2596);
tileRib55.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib55);
const tileRib56 = new THREE.Mesh(cylinderGeo, roofMat);
tileRib56.name = 'tileRib';
tileRib56.position.set(5.078, 3.866, 4.4755);
tileRib56.rotation.set(deg(-60.3144), 0, 0);
skirtTiles3.add(tileRib56);
const eaveTiles3 = new THREE.Mesh(boxGeo17, ridgeMat);
eaveTiles3.name = 'eaveTiles';
eaveTiles3.position.set(0, 3.72, 4.7975);
skirtTiles3.add(eaveTiles3);
const skirtTiles4 = new THREE.Group();
skirtTiles4.name = 'skirtTiles';
skirtTiles4.rotation.set(0, deg(270), 0);
root.add(skirtTiles4);
const tileRib57 = new THREE.Mesh(cylinderGeo5, roofMat);
tileRib57.name = 'tileRib';
tileRib57.position.set(-3.9675, 3.9046, 5.4551);
tileRib57.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib57);
const tileRib58 = new THREE.Mesh(cylinderGeo6, roofMat);
tileRib58.name = 'tileRib';
tileRib58.position.set(-3.4385, 4.0554, 5.1278);
tileRib58.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib58);
const tileRib59 = new THREE.Mesh(cylinderGeo7, roofMat);
tileRib59.name = 'tileRib';
tileRib59.position.set(-2.9095, 4.2062, 4.8004);
tileRib59.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib59);
const tileRib60 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib60.name = 'tileRib';
tileRib60.position.set(-2.3805, 4.215, 4.7813);
tileRib60.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib60);
const tileRib61 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib61.name = 'tileRib';
tileRib61.position.set(-1.8515, 4.215, 4.7813);
tileRib61.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib61);
const tileRib62 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib62.name = 'tileRib';
tileRib62.position.set(-1.3225, 4.215, 4.7813);
tileRib62.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib62);
const tileRib63 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib63.name = 'tileRib';
tileRib63.position.set(-0.7935, 4.215, 4.7813);
tileRib63.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib63);
const tileRib64 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib64.name = 'tileRib';
tileRib64.position.set(-0.2645, 4.215, 4.7813);
tileRib64.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib64);
const tileRib65 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib65.name = 'tileRib';
tileRib65.position.set(0.2645, 4.215, 4.7813);
tileRib65.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib65);
const tileRib66 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib66.name = 'tileRib';
tileRib66.position.set(0.7935, 4.215, 4.7813);
tileRib66.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib66);
const tileRib67 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib67.name = 'tileRib';
tileRib67.position.set(1.3225, 4.215, 4.7813);
tileRib67.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib67);
const tileRib68 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib68.name = 'tileRib';
tileRib68.position.set(1.8515, 4.215, 4.7813);
tileRib68.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib68);
const tileRib69 = new THREE.Mesh(cylinderGeo8, roofMat);
tileRib69.name = 'tileRib';
tileRib69.position.set(2.3805, 4.215, 4.7813);
tileRib69.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib69);
const tileRib70 = new THREE.Mesh(cylinderGeo7, roofMat);
tileRib70.name = 'tileRib';
tileRib70.position.set(2.9095, 4.2062, 4.8004);
tileRib70.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib70);
const tileRib71 = new THREE.Mesh(cylinderGeo6, roofMat);
tileRib71.name = 'tileRib';
tileRib71.position.set(3.4385, 4.0554, 5.1278);
tileRib71.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib71);
const tileRib72 = new THREE.Mesh(cylinderGeo5, roofMat);
tileRib72.name = 'tileRib';
tileRib72.position.set(3.9675, 3.9046, 5.4551);
tileRib72.rotation.set(deg(-65.2689), 0, 0);
skirtTiles4.add(tileRib72);
const eaveTiles4 = new THREE.Mesh(boxGeo18, ridgeMat);
eaveTiles4.name = 'eaveTiles';
eaveTiles4.position.set(0, 3.72, 5.9375);
skirtTiles4.add(eaveTiles4);
const hipRidge = new THREE.Mesh(boxGeo19, ridgeMat);
hipRidge.name = 'hipRidge';
hipRidge.position.set(-4.9062, 4.255, -3.9642);
hipRidge.rotation.set(deg(72.7993), deg(11.0235), deg(-48.3496));
root.add(hipRidge);
const hipEndTile = new THREE.Mesh(boxGeo20, ridgeMat);
hipEndTile.name = 'hipEndTile';
hipEndTile.position.set(-6.0625, 3.77, -4.8985);
hipEndTile.rotation.set(deg(45), deg(35.2644), deg(-30));
root.add(hipEndTile);
const hipRidge2 = new THREE.Mesh(boxGeo19, ridgeMat);
hipRidge2.name = 'hipRidge';
hipRidge2.position.set(-4.9062, 4.255, 3.9643);
hipRidge2.rotation.set(deg(7.549), deg(40.7169), deg(-75.3877));
root.add(hipRidge2);
const hipEndTile2 = new THREE.Mesh(boxGeo20, ridgeMat);
hipEndTile2.name = 'hipEndTile';
hipEndTile2.position.set(-6.0625, 3.77, 4.8985);
hipEndTile2.rotation.set(0, deg(45), deg(-35.2644));
root.add(hipEndTile2);
const hipRidge3 = new THREE.Mesh(boxGeo19, ridgeMat);
hipRidge3.name = 'hipRidge';
hipRidge3.position.set(4.9063, 4.255, -3.9642);
hipRidge3.rotation.set(deg(-7.549), deg(40.7169), deg(75.3877));
root.add(hipRidge3);
const hipEndTile3 = new THREE.Mesh(boxGeo20, ridgeMat);
hipEndTile3.name = 'hipEndTile';
hipEndTile3.position.set(6.0625, 3.77, -4.8985);
hipEndTile3.rotation.set(0, deg(45), deg(35.2644));
root.add(hipEndTile3);
const hipRidge4 = new THREE.Mesh(boxGeo19, ridgeMat);
hipRidge4.name = 'hipRidge';
hipRidge4.position.set(4.9063, 4.255, 3.9643);
hipRidge4.rotation.set(deg(-72.7993), deg(11.0235), deg(48.3496));
root.add(hipRidge4);
const hipEndTile4 = new THREE.Mesh(boxGeo20, ridgeMat);
hipEndTile4.name = 'hipEndTile';
hipEndTile4.position.set(6.0625, 3.77, 4.8985);
hipEndTile4.rotation.set(deg(-45), deg(35.2644), deg(30));
root.add(hipEndTile4);
const gableWall = new THREE.Mesh(extrudeGeo, plasterMat);
gableWall.name = 'gableWall';
gableWall.position.set(-3.5, 4.63, 0);
gableWall.rotation.set(0, deg(90), 0);
root.add(gableWall);
const gableBeam = new THREE.Mesh(boxGeo21, woodMat);
gableBeam.name = 'gableBeam';
gableBeam.position.set(-3.56, 4.73, 0);
root.add(gableBeam);
const gableBatten = new THREE.Mesh(boxGeo22, woodMat);
gableBatten.name = 'gableBatten';
gableBatten.position.set(-3.57, 5.0874, -1.6665);
root.add(gableBatten);
const gableBatten2 = new THREE.Mesh(boxGeo23, woodMat);
gableBatten2.name = 'gableBatten';
gableBatten2.position.set(-3.57, 5.6219, 0);
root.add(gableBatten2);
const gableBatten3 = new THREE.Mesh(boxGeo22, woodMat);
gableBatten3.name = 'gableBatten';
gableBatten3.position.set(-3.57, 5.0874, 1.6665);
root.add(gableBatten3);
const gableBatten4 = new THREE.Mesh(boxGeo24, woodMat);
gableBatten4.name = 'gableBatten';
gableBatten4.position.set(-3.57, 5.5697, 0);
root.add(gableBatten4);
const gegyo = new THREE.Mesh(boxGeo25, woodMat);
gegyo.name = 'gegyo';
gegyo.position.set(-3.58, 6.2438, 0);
root.add(gegyo);
const gableWall2 = new THREE.Mesh(extrudeGeo, plasterMat);
gableWall2.name = 'gableWall';
gableWall2.position.set(3.5, 4.63, 0);
gableWall2.rotation.set(0, deg(90), 0);
root.add(gableWall2);
const gableBeam2 = new THREE.Mesh(boxGeo21, woodMat);
gableBeam2.name = 'gableBeam';
gableBeam2.position.set(3.56, 4.73, 0);
root.add(gableBeam2);
const gableBatten5 = new THREE.Mesh(boxGeo22, woodMat);
gableBatten5.name = 'gableBatten';
gableBatten5.position.set(3.57, 5.0874, -1.6665);
root.add(gableBatten5);
const gableBatten6 = new THREE.Mesh(boxGeo23, woodMat);
gableBatten6.name = 'gableBatten';
gableBatten6.position.set(3.57, 5.6219, 0);
root.add(gableBatten6);
const gableBatten7 = new THREE.Mesh(boxGeo22, woodMat);
gableBatten7.name = 'gableBatten';
gableBatten7.position.set(3.57, 5.0874, 1.6665);
root.add(gableBatten7);
const gableBatten8 = new THREE.Mesh(boxGeo24, woodMat);
gableBatten8.name = 'gableBatten';
gableBatten8.position.set(3.57, 5.5697, 0);
root.add(gableBatten8);
const gegyo2 = new THREE.Mesh(boxGeo25, woodMat);
gegyo2.name = 'gegyo';
gegyo2.position.set(3.58, 6.2438, 0);
root.add(gegyo2);
const gableRoof = new THREE.Group();
gableRoof.name = 'gableRoof';
gableRoof.position.set(0, 5.6265, -1.7075);
gableRoof.rotation.set(deg(-34), 0, 0);
root.add(gableRoof);
const gableSlab = new THREE.Mesh(boxGeo26, roofMat);
gableSlab.name = 'gableSlab';
gableRoof.add(gableSlab);
const tileRib73 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib73.name = 'tileRib';
tileRib73.position.set(-3.75, 0.09, 0.02);
tileRib73.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib73);
const tileRib74 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib74.name = 'tileRib';
tileRib74.position.set(-3.3333, 0.09, 0.02);
tileRib74.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib74);
const tileRib75 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib75.name = 'tileRib';
tileRib75.position.set(-2.9167, 0.09, 0.02);
tileRib75.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib75);
const tileRib76 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib76.name = 'tileRib';
tileRib76.position.set(-2.5, 0.09, 0.02);
tileRib76.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib76);
const tileRib77 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib77.name = 'tileRib';
tileRib77.position.set(-2.0833, 0.09, 0.02);
tileRib77.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib77);
const tileRib78 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib78.name = 'tileRib';
tileRib78.position.set(-1.6667, 0.09, 0.02);
tileRib78.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib78);
const tileRib79 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib79.name = 'tileRib';
tileRib79.position.set(-1.25, 0.09, 0.02);
tileRib79.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib79);
const tileRib80 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib80.name = 'tileRib';
tileRib80.position.set(-0.8333, 0.09, 0.02);
tileRib80.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib80);
const tileRib81 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib81.name = 'tileRib';
tileRib81.position.set(-0.4167, 0.09, 0.02);
tileRib81.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib81);
const tileRib82 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib82.name = 'tileRib';
tileRib82.position.set(0, 0.09, 0.02);
tileRib82.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib82);
const tileRib83 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib83.name = 'tileRib';
tileRib83.position.set(0.4167, 0.09, 0.02);
tileRib83.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib83);
const tileRib84 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib84.name = 'tileRib';
tileRib84.position.set(0.8333, 0.09, 0.02);
tileRib84.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib84);
const tileRib85 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib85.name = 'tileRib';
tileRib85.position.set(1.25, 0.09, 0.02);
tileRib85.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib85);
const tileRib86 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib86.name = 'tileRib';
tileRib86.position.set(1.6667, 0.09, 0.02);
tileRib86.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib86);
const tileRib87 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib87.name = 'tileRib';
tileRib87.position.set(2.0833, 0.09, 0.02);
tileRib87.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib87);
const tileRib88 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib88.name = 'tileRib';
tileRib88.position.set(2.5, 0.09, 0.02);
tileRib88.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib88);
const tileRib89 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib89.name = 'tileRib';
tileRib89.position.set(2.9167, 0.09, 0.02);
tileRib89.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib89);
const tileRib90 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib90.name = 'tileRib';
tileRib90.position.set(3.3333, 0.09, 0.02);
tileRib90.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib90);
const tileRib91 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib91.name = 'tileRib';
tileRib91.position.set(3.75, 0.09, 0.02);
tileRib91.rotation.set(deg(-90), 0, 0);
gableRoof.add(tileRib91);
const eaveTiles5 = new THREE.Mesh(boxGeo27, ridgeMat);
eaveTiles5.name = 'eaveTiles';
eaveTiles5.position.set(0, 0.07, 1.9824);
gableRoof.add(eaveTiles5);
const vergeTiles = new THREE.Mesh(boxGeo28, ridgeMat);
vergeTiles.name = 'vergeTiles';
vergeTiles.position.set(-3.92, 0.07, 0);
gableRoof.add(vergeTiles);
const vergeTiles2 = new THREE.Mesh(boxGeo28, ridgeMat);
vergeTiles2.name = 'vergeTiles';
vergeTiles2.position.set(3.92, 0.07, 0);
gableRoof.add(vergeTiles2);
const gableRoof2 = new THREE.Group();
gableRoof2.name = 'gableRoof';
gableRoof2.position.set(0, 5.6265, 1.7075);
gableRoof2.rotation.set(deg(34), 0, 0);
root.add(gableRoof2);
const gableSlab2 = new THREE.Mesh(boxGeo26, roofMat);
gableSlab2.name = 'gableSlab';
gableRoof2.add(gableSlab2);
const tileRib92 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib92.name = 'tileRib';
tileRib92.position.set(-3.75, 0.09, 0.02);
tileRib92.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib92);
const tileRib93 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib93.name = 'tileRib';
tileRib93.position.set(-3.3333, 0.09, 0.02);
tileRib93.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib93);
const tileRib94 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib94.name = 'tileRib';
tileRib94.position.set(-2.9167, 0.09, 0.02);
tileRib94.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib94);
const tileRib95 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib95.name = 'tileRib';
tileRib95.position.set(-2.5, 0.09, 0.02);
tileRib95.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib95);
const tileRib96 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib96.name = 'tileRib';
tileRib96.position.set(-2.0833, 0.09, 0.02);
tileRib96.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib96);
const tileRib97 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib97.name = 'tileRib';
tileRib97.position.set(-1.6667, 0.09, 0.02);
tileRib97.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib97);
const tileRib98 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib98.name = 'tileRib';
tileRib98.position.set(-1.25, 0.09, 0.02);
tileRib98.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib98);
const tileRib99 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib99.name = 'tileRib';
tileRib99.position.set(-0.8333, 0.09, 0.02);
tileRib99.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib99);
const tileRib100 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib100.name = 'tileRib';
tileRib100.position.set(-0.4167, 0.09, 0.02);
tileRib100.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib100);
const tileRib101 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib101.name = 'tileRib';
tileRib101.position.set(0, 0.09, 0.02);
tileRib101.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib101);
const tileRib102 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib102.name = 'tileRib';
tileRib102.position.set(0.4167, 0.09, 0.02);
tileRib102.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib102);
const tileRib103 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib103.name = 'tileRib';
tileRib103.position.set(0.8333, 0.09, 0.02);
tileRib103.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib103);
const tileRib104 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib104.name = 'tileRib';
tileRib104.position.set(1.25, 0.09, 0.02);
tileRib104.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib104);
const tileRib105 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib105.name = 'tileRib';
tileRib105.position.set(1.6667, 0.09, 0.02);
tileRib105.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib105);
const tileRib106 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib106.name = 'tileRib';
tileRib106.position.set(2.0833, 0.09, 0.02);
tileRib106.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib106);
const tileRib107 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib107.name = 'tileRib';
tileRib107.position.set(2.5, 0.09, 0.02);
tileRib107.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib107);
const tileRib108 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib108.name = 'tileRib';
tileRib108.position.set(2.9167, 0.09, 0.02);
tileRib108.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib108);
const tileRib109 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib109.name = 'tileRib';
tileRib109.position.set(3.3333, 0.09, 0.02);
tileRib109.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib109);
const tileRib110 = new THREE.Mesh(cylinderGeo9, roofMat);
tileRib110.name = 'tileRib';
tileRib110.position.set(3.75, 0.09, 0.02);
tileRib110.rotation.set(deg(-90), 0, 0);
gableRoof2.add(tileRib110);
const eaveTiles6 = new THREE.Mesh(boxGeo27, ridgeMat);
eaveTiles6.name = 'eaveTiles';
eaveTiles6.position.set(0, 0.07, 1.9824);
gableRoof2.add(eaveTiles6);
const vergeTiles3 = new THREE.Mesh(boxGeo28, ridgeMat);
vergeTiles3.name = 'vergeTiles';
vergeTiles3.position.set(-3.92, 0.07, 0);
gableRoof2.add(vergeTiles3);
const vergeTiles4 = new THREE.Mesh(boxGeo28, ridgeMat);
vergeTiles4.name = 'vergeTiles';
vergeTiles4.position.set(3.92, 0.07, 0);
gableRoof2.add(vergeTiles4);
const noshiStripe = new THREE.Mesh(new THREE.BoxGeometry(7.9, 0.18, 0.5), plasterMat);
noshiStripe.name = 'noshiStripe';
noshiStripe.position.set(0, 6.8729, 0);
root.add(noshiStripe);
const ridgeCap = new THREE.Mesh(new THREE.BoxGeometry(7.94, 0.3, 0.42), ridgeMat);
ridgeCap.name = 'ridgeCap';
ridgeCap.position.set(0, 7.0729, 0);
root.add(ridgeCap);
const oniGawara = new THREE.Mesh(boxGeo29, ridgeMat);
oniGawara.name = 'oniGawara';
oniGawara.position.set(-4.02, 7.1529, 0);
root.add(oniGawara);
const oniGawara2 = new THREE.Mesh(boxGeo29, ridgeMat);
oniGawara2.name = 'oniGawara';
oniGawara2.position.set(4.02, 7.1529, 0);
root.add(oniGawara2);
const stoneLantern = new THREE.Group();
stoneLantern.name = 'stoneLantern';
stoneLantern.position.set(-5.2, 0, 6.25);
root.add(stoneLantern);
const lanternBase = new THREE.Mesh(new THREE.BoxGeometry(0.6, 0.14, 0.6), stoneMat);
lanternBase.name = 'lanternBase';
lanternBase.position.set(0, 0.07, 0);
stoneLantern.add(lanternBase);
const lanternPost = new THREE.Mesh(new THREE.CylinderGeometry(0.11, 0.13, 0.75, 6), stoneMat);
lanternPost.name = 'lanternPost';
lanternPost.position.set(0, 0.515, 0);
stoneLantern.add(lanternPost);
const lanternTable = new THREE.Mesh(new THREE.BoxGeometry(0.52, 0.1, 0.52), stoneMat);
lanternTable.name = 'lanternTable';
lanternTable.position.set(0, 0.94, 0);
stoneLantern.add(lanternTable);
const fireBox = new THREE.Mesh(new THREE.BoxGeometry(0.36, 0.34, 0.36), stoneMat);
fireBox.name = 'fireBox';
fireBox.position.set(0, 1.16, 0);
stoneLantern.add(fireBox);
const lanternLight = new THREE.Mesh(boxGeo30, lampMat);
lanternLight.name = 'lanternLight';
lanternLight.position.set(0, 1.16, 0);
stoneLantern.add(lanternLight);
const lanternLight2 = new THREE.Mesh(boxGeo30, lampMat);
lanternLight2.name = 'lanternLight';
lanternLight2.position.set(0, 1.16, 0);
lanternLight2.rotation.set(0, deg(90), 0);
stoneLantern.add(lanternLight2);
const lanternRoof = new THREE.Mesh(new THREE.ConeGeometry(0.48, 0.3, 4, 1, false, Math.PI / 4), stoneMat);
lanternRoof.name = 'lanternRoof';
lanternRoof.position.set(0, 1.48, 0);
stoneLantern.add(lanternRoof);
const lanternKnob = new THREE.Mesh(new THREE.SphereGeometry(0.08, 6, 4), stoneMat);
lanternKnob.name = 'lanternKnob';
lanternKnob.position.set(0, 1.7, 0);
stoneLantern.add(lanternKnob);
const gardenStone = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2638, 0), 0.04, 60), stoneMat);
gardenStone.name = 'gardenStone';
gardenStone.position.set(-4.3571, 0.1096, 5.4067);
gardenStone.scale.set(1, 0.55, 1);
root.add(gardenStone);
const gardenStone2 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.3386, 0), 0.04, 61), stoneMat);
gardenStone2.name = 'gardenStone';
gardenStone2.position.set(-4.6629, 0.1772, 7.1255);
gardenStone2.scale.set(1, 0.55, 1);
root.add(gardenStone2);
const gardenStone3 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2715, 0), 0.04, 62), stoneMat);
gardenStone3.name = 'gardenStone';
gardenStone3.position.set(-4.1933, 0.1321, 5.4023);
gardenStone3.scale.set(1, 0.55, 1);
root.add(gardenStone3);
const gardenStone4 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.3159, 0), 0.04, 63), stoneMat);
gardenStone4.name = 'gardenStone';
gardenStone4.position.set(-4.7248, 0.1394, 7.0849);
gardenStone4.scale.set(1, 0.55, 1);
root.add(gardenStone4);
root.traverse((o) => {
if (o.isMesh) {
o.castShadow = true;
o.receiveShadow = true;
}
});
return root;
}
export default createJapaneseHouse;
Notes et commentaires
0 commentaire
Aucun commentaire pour l’instant. Dites comment vous avez utilisé ce modèle ou ce qui pourrait être amélioré.
Modèles similaires
Même catégorie ou étiquettes proches









