1.8K tris6.38 × 2.16 × 6.44 m
Use it in code
Remix in the editorigloo.js · 529 lines
Self-contained ES module — only depends on three. Call the factory and add the group to your scene.
/**
* Igloo — Codels 3D model library
* License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
* Triangles: 1,820 · Size (W × H × D): 6.38 × 2.16 × 6.44 m
*
* Usage:
* import { createIgloo } from './igloo.js';
*
* const model = createIgloo();
* 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;
}
export function createIgloo() {
const root = new THREE.Group();
root.name = 'Igloo';
// Materials
const snowMat = new THREE.MeshStandardMaterial({ name: 'snow', color: 0xeef3f7, roughness: 0.9, flatShading: true });
const snowAltMat = new THREE.MeshStandardMaterial({ name: 'snowAlt', color: 0xd4e2ee, roughness: 0.9, flatShading: true });
const mortarMat = new THREE.MeshStandardMaterial({ name: 'mortar', color: 0xafc0cf, roughness: 0.95, flatShading: true });
const groundMat = new THREE.MeshStandardMaterial({ name: 'ground', color: 0xe7eef4, roughness: 0.95, flatShading: true });
const doorMat = new THREE.MeshStandardMaterial({ name: 'door', color: 0xffc173, roughness: 0.8, emissive: 0xff9a3c, emissiveIntensity: 0.9, flatShading: true });
const iceMat = new THREE.MeshStandardMaterial({ name: 'ice', color: 0xa9dcef, roughness: 0.15, metalness: 0.1, emissive: 0x6cc0e4, emissiveIntensity: 0.45, flatShading: true });
// Parts
const snowPatch = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(3.2, 1), 0.04, 4), groundMat);
snowPatch.name = 'snowPatch';
snowPatch.position.set(0, 0.0902, 0.4);
snowPatch.scale.set(1, 0.028, 1);
root.add(snowPatch);
const mortarDome = new THREE.Mesh(new THREE.SphereGeometry(1.924, 12, 6, 0, Math.PI * 2, 0, Math.PI / 2), mortarMat);
mortarDome.name = 'mortarDome';
mortarDome.position.set(0, 0.08, 0);
root.add(mortarDome);
const snowBlock = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.641, 0.3972, 0.32), 0.02, 102), snowMat);
snowBlock.name = 'snowBlock';
snowBlock.position.set(1.3182, 0.3004, 1.4156);
snowBlock.rotation.set(deg(-8.8489), deg(42.6168), deg(6.0174));
root.add(snowBlock);
const snowBlock2 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6607, 0.3862, 0.32), 0.02, 103), snowAltMat);
snowBlock2.name = 'snowBlock';
snowBlock2.position.set(1.7417, 0.3013, 0.8591);
snowBlock2.rotation.set(deg(-14.4426), deg(63.0068), deg(12.9251));
root.add(snowBlock2);
const snowBlock3 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6425, 0.3962, 0.32), 0.02, 104), snowAltMat);
snowBlock3.name = 'snowBlock';
snowBlock3.position.set(1.9129, 0.2987, 0.163);
snowBlock3.rotation.set(deg(-53.2999), deg(81.8832), deg(53.0231));
root.add(snowBlock3);
const snowBlock4 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6606, 0.4095, 0.32), 0.02, 105), snowMat);
snowBlock4.name = 'snowBlock';
snowBlock4.position.set(1.8332, 0.2974, -0.5282);
snowBlock4.rotation.set(deg(-157.631), deg(72.6951), deg(158.5497));
root.add(snowBlock4);
const snowBlock5 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6471, 0.3788, 0.32), 0.02, 106), snowMat);
snowBlock5.name = 'snowBlock';
snowBlock5.position.set(1.5202, 0.2975, -1.1546);
snowBlock5.rotation.set(deg(-169.3321), deg(52.3002), deg(171.5228));
root.add(snowBlock5);
const snowBlock6 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6312, 0.3832, 0.32), 0.02, 107), snowAltMat);
snowBlock6.name = 'snowBlock';
snowBlock6.position.set(1.0014, 0.2998, -1.6484);
snowBlock6.rotation.set(deg(-172.4067), deg(31.0539), deg(176.0661));
root.add(snowBlock6);
const snowBlock7 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6506, 0.3942, 0.32), 0.02, 108), snowMat);
snowBlock7.name = 'snowBlock';
snowBlock7.position.set(0.3571, 0.301, -1.9067);
snowBlock7.rotation.set(deg(-173.3879), deg(10.5403), deg(178.7853));
root.add(snowBlock7);
const snowBlock8 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.669, 0.3861, 0.32), 0.02, 109), snowMat);
snowBlock8.name = 'snowBlock';
snowBlock8.position.set(-0.329, 0.2999, -1.9015);
snowBlock8.rotation.set(deg(-173.4043), deg(-9.7534), deg(-178.8778));
root.add(snowBlock8);
const snowBlock9 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6784, 0.4104, 0.32), 0.02, 110), snowMat);
snowBlock9.name = 'snowBlock';
snowBlock9.position.set(-0.9963, 0.2987, -1.6409);
snowBlock9.rotation.set(deg(-172.4076), deg(-31.042), deg(-176.068));
root.add(snowBlock9);
const snowBlock10 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6488, 0.3793, 0.32), 0.02, 111), snowAltMat);
snowBlock10.name = 'snowBlock';
snowBlock10.position.set(-1.521, 0.2986, -1.17);
snowBlock10.rotation.set(deg(-169.415), deg(-51.9565), deg(-171.6278));
root.add(snowBlock10);
const snowBlock11 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6909, 0.3798, 0.32), 0.02, 112), snowAltMat);
snowBlock11.name = 'snowBlock';
snowBlock11.position.set(-1.8642, 0.3005, -0.5195);
snowBlock11.rotation.set(deg(-157.0021), deg(-73.1572), deg(-157.8918));
root.add(snowBlock11);
const snowBlock12 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6385, 0.3807, 0.32), 0.02, 113), snowMat);
snowBlock12.name = 'snowBlock';
snowBlock12.position.set(-1.9372, 0.3016, 0.1755);
snowBlock12.rotation.set(deg(-51.6288), deg(-81.698), deg(-51.3347));
root.add(snowBlock12);
const snowBlock13 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.67, 0.412, 0.32), 0.02, 114), snowMat);
snowBlock13.name = 'snowBlock';
snowBlock13.position.set(-1.7284, 0.2995, 0.8516);
snowBlock13.rotation.set(deg(-14.455), deg(-63.0314), deg(-12.9391));
root.add(snowBlock13);
const snowBlock14 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6479, 0.4043, 0.32), 0.02, 115), snowMat);
snowBlock14.name = 'snowBlock';
snowBlock14.position.set(-1.3007, 0.3016, 1.4458);
snowBlock14.rotation.set(deg(-8.7132), deg(-41.645), deg(-5.815));
root.add(snowBlock14);
const snowBlock15 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6721, 0.4126, 0.32), 0.02, 151), snowMat);
snowBlock15.name = 'snowBlock';
snowBlock15.position.set(1.0088, 0.7342, 1.5477);
snowBlock15.rotation.set(deg(-22.9141), deg(30.9807), deg(12.2755));
root.add(snowBlock15);
const snowBlock16 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6743, 0.3891, 0.32), 0.02, 152), snowAltMat);
snowBlock16.name = 'snowBlock';
snowBlock16.position.set(1.5178, 0.7254, 1.009);
snowBlock16.rotation.set(deg(-32.6051), deg(51.7214), deg(26.6627));
root.add(snowBlock16);
const snowBlock17 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6908, 0.4039, 0.32), 0.02, 153), snowAltMat);
snowBlock17.name = 'snowBlock';
snowBlock17.position.set(1.7895, 0.7269, 0.3674);
snowBlock17.rotation.set(deg(-60.4067), deg(67.4256), deg(58.4065));
root.add(snowBlock17);
const snowBlock18 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6709, 0.3881, 0.32), 0.02, 154), snowMat);
snowBlock18.name = 'snowBlock';
snowBlock18.position.set(1.7868, 0.7267, -0.3772);
snowBlock18.rotation.set(deg(-120.2551), deg(67.2666), deg(122.3106));
root.add(snowBlock18);
const snowBlock19 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.687, 0.4122, 0.32), 0.02, 155), snowMat);
snowBlock19.name = 'snowBlock';
snowBlock19.position.set(1.5087, 0.7251, -1.021);
snowBlock19.rotation.set(deg(-147.7142), deg(51.3223), deg(153.7452));
root.add(snowBlock19);
const snowBlock20 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6432, 0.4149, 0.32), 0.02, 156), snowMat);
snowBlock20.name = 'snowBlock';
snowBlock20.position.set(1.0239, 0.7319, -1.5299);
snowBlock20.rotation.set(deg(-156.9209), deg(31.6199), deg(167.4069));
root.add(snowBlock20);
const snowBlock21 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6494, 0.3927, 0.32), 0.02, 157), snowMat);
snowBlock21.name = 'snowBlock';
snowBlock21.position.set(0.3469, 0.7303, -1.8032);
snowBlock21.rotation.set(deg(-160.1701), deg(10.2584), deg(176.3255));
root.add(snowBlock21);
const snowBlock22 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6483, 0.4013, 0.32), 0.02, 158), snowAltMat);
snowBlock22.name = 'snowBlock';
snowBlock22.position.set(-0.3638, 0.7254, -1.7858);
snowBlock22.rotation.set(deg(-160.1305), deg(-10.8471), deg(-176.1093));
root.add(snowBlock22);
const snowBlock23 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6607, 0.3816, 0.32), 0.02, 159), snowAltMat);
snowBlock23.name = 'snowBlock';
snowBlock23.position.set(-1.0141, 0.7315, -1.535);
snowBlock23.rotation.set(deg(-157.0025), deg(-31.3064), deg(-167.5633));
root.add(snowBlock23);
const snowBlock24 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6837, 0.4015, 0.32), 0.02, 160), snowAltMat);
snowBlock24.name = 'snowBlock';
snowBlock24.position.set(-1.5012, 0.721, -1.0116);
snowBlock24.rotation.set(deg(-147.6378), deg(-51.4188), deg(-153.6474));
root.add(snowBlock24);
const snowBlock25 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6748, 0.3957, 0.32), 0.02, 161), snowMat);
snowBlock25.name = 'snowBlock';
snowBlock25.position.set(-1.787, 0.7237, -0.3328);
snowBlock25.rotation.set(deg(-117.3373), deg(-67.9278), deg(-119.1548));
root.add(snowBlock25);
const snowBlock26 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6818, 0.3879, 0.32), 0.02, 162), snowMat);
snowBlock26.name = 'snowBlock';
snowBlock26.position.set(-1.8059, 0.7303, 0.3338);
snowBlock26.rotation.set(deg(-62.83), deg(-67.9628), deg(-61.0257));
root.add(snowBlock26);
const snowBlock27 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6492, 0.4157, 0.32), 0.02, 163), snowMat);
snowBlock27.name = 'snowBlock';
snowBlock27.position.set(-1.5107, 0.7213, 0.9987);
snowBlock27.rotation.set(deg(-32.7051), deg(-51.8444), deg(-26.79));
root.add(snowBlock27);
const snowBlock28 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6459, 0.3986, 0.32), 0.02, 164), snowMat);
snowBlock28.name = 'snowBlock';
snowBlock28.position.set(-0.9867, 0.7231, 1.5246);
snowBlock28.rotation.set(deg(-22.8705), deg(-30.8078), deg(-12.1905));
root.add(snowBlock28);
const snowBlock29 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6956, 0.3921, 0.32), 0.02, 200), snowMat);
snowBlock29.name = 'snowBlock';
snowBlock29.position.set(-0.0032, 1.1206, 1.6334);
snowBlock29.rotation.set(deg(-32.5001), deg(-0.0951), deg(-0.0606));
root.add(snowBlock29);
const snowBlock30 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6826, 0.4005, 0.32), 0.02, 201), snowMat);
snowBlock30.name = 'snowBlock';
snowBlock30.position.set(0.7248, 1.1186, 1.4604);
snowBlock30.rotation.set(deg(-35.4208), deg(22.0198), deg(14.9306));
root.add(snowBlock30);
const snowBlock31 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.671, 0.3882, 0.32), 0.02, 202), snowMat);
snowBlock31.name = 'snowBlock';
snowBlock31.position.set(1.275, 1.1167, 1.0112);
snowBlock31.rotation.set(deg(-45.7137), deg(41.3606), deg(34.1164));
root.add(snowBlock31);
const iceWindow = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6603, 0.4039, 0.336), 0.02, 203), iceMat);
iceWindow.name = 'iceWindow';
iceWindow.position.set(1.5878, 1.1164, 0.3539);
iceWindow.rotation.set(deg(-71.1444), deg(55.4053), deg(67.4682));
root.add(iceWindow);
const snowBlock32 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6702, 0.378, 0.32), 0.02, 204), snowMat);
snowBlock32.name = 'snowBlock';
snowBlock32.position.set(1.5848, 1.1143, -0.3524);
snowBlock32.rotation.set(deg(-108.8167), deg(55.4144), deg(112.4846));
root.add(snowBlock32);
const snowBlock33 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6747, 0.4046, 0.32), 0.02, 205), snowAltMat);
snowBlock33.name = 'snowBlock';
snowBlock33.position.set(1.2876, 1.122, -1.0085);
snowBlock33.rotation.set(deg(-134.065), deg(41.6038), deg(145.5496));
root.add(snowBlock33);
const snowBlock34 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6593, 0.4107, 0.32), 0.02, 206), snowMat);
snowBlock34.name = 'snowBlock';
snowBlock34.position.set(0.6952, 1.1211, -1.4789);
snowBlock34.rotation.set(deg(-144.8562), deg(21.0273), deg(165.8243));
root.add(snowBlock34);
const snowBlock35 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6795, 0.3822, 0.32), 0.02, 207), snowMat);
snowBlock35.name = 'snowBlock';
snowBlock35.position.set(-0.0168, 1.1308, -1.6494);
snowBlock35.rotation.set(deg(-147.4986), deg(-0.4934), deg(-179.6856));
root.add(snowBlock35);
const snowBlock36 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6754, 0.398, 0.32), 0.02, 208), snowAltMat);
snowBlock36.name = 'snowBlock';
snowBlock36.position.set(-0.7191, 1.1161, -1.4587);
snowBlock36.rotation.set(deg(-144.6145), deg(-21.8964), deg(-165.1639));
root.add(snowBlock36);
const snowBlock37 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.7064, 0.4058, 0.32), 0.02, 209), snowMat);
snowBlock37.name = 'snowBlock';
snowBlock37.position.set(-1.2885, 1.1301, -1.028);
snowBlock37.rotation.set(deg(-134.3914), deg(-41.2437), deg(-146.0429));
root.add(snowBlock37);
const snowBlock38 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6834, 0.4032, 0.32), 0.02, 210), snowAltMat);
snowBlock38.name = 'snowBlock';
snowBlock38.position.set(-1.5795, 1.1153, -0.382);
snowBlock38.rotation.set(deg(-110.2556), deg(-55.06), deg(-114.2359));
root.add(snowBlock38);
const snowBlock39 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6919, 0.4095, 0.32), 0.02, 211), snowAltMat);
snowBlock39.name = 'snowBlock';
snowBlock39.position.set(-1.6, 1.1292, 0.3901);
snowBlock39.rotation.set(deg(-69.6043), deg(-55.0237), deg(-65.593));
root.add(snowBlock39);
const snowBlock40 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6793, 0.4111, 0.32), 0.02, 212), snowAltMat);
snowBlock40.name = 'snowBlock';
snowBlock40.position.set(-1.2723, 1.1192, 1.0208);
snowBlock40.rotation.set(deg(-45.5105), deg(-41.1338), deg(-33.8081));
root.add(snowBlock40);
const snowBlock41 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6915, 0.3894, 0.32), 0.02, 213), snowAltMat);
snowBlock41.name = 'snowBlock';
snowBlock41.position.set(-0.723, 1.1318, 1.4842);
snowBlock41.rotation.set(deg(-35.3231), deg(-21.6766), deg(-14.6681));
root.add(snowBlock41);
const snowBlock42 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6303, 0.3797, 0.32), 0.02, 250), snowMat);
snowBlock42.name = 'snowBlock';
snowBlock42.position.set(0.3372, 1.4599, 1.3134);
snowBlock42.rotation.set(deg(-46.4141), deg(10.0392), deg(10.3785));
root.add(snowBlock42);
const snowBlock43 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6873, 0.3948, 0.32), 0.02, 251), snowAltMat);
snowBlock43.name = 'snowBlock';
snowBlock43.position.set(0.9771, 1.4767, 0.9639);
snowBlock43.rotation.set(deg(-55.389), deg(29.932), deg(35.8671));
root.add(snowBlock43);
const snowBlock44 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6382, 0.3782, 0.32), 0.02, 252), snowMat);
snowBlock44.name = 'snowBlock';
snowBlock44.position.set(1.3035, 1.4572, 0.3642);
snowBlock44.rotation.set(deg(-75.1882), deg(42.4586), deg(68.6089));
root.add(snowBlock44);
const snowBlock45 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6765, 0.4078, 0.32), 0.02, 253), snowAltMat);
snowBlock45.name = 'snowBlock';
snowBlock45.position.set(1.3159, 1.4657, -0.3501);
snowBlock45.rotation.set(deg(-104.1796), deg(42.6366), deg(110.4562));
root.add(snowBlock45);
const snowBlock46 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6633, 0.3939, 0.32), 0.02, 254), snowMat);
snowBlock46.name = 'snowBlock';
snowBlock46.position.set(0.9736, 1.4685, -0.956);
snowBlock46.rotation.set(deg(-124.5476), deg(30.0078), deg(144.006));
root.add(snowBlock46);
const snowBlock47 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.651, 0.3885, 0.32), 0.02, 255), snowMat);
snowBlock47.name = 'snowBlock';
snowBlock47.position.set(0.353, 1.4616, -1.311);
snowBlock47.rotation.set(deg(-133.498), deg(10.5003), deg(169.1285));
root.add(snowBlock47);
const snowBlock48 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6642, 0.3981, 0.32), 0.02, 256), snowMat);
snowBlock48.name = 'snowBlock';
snowBlock48.position.set(-0.3504, 1.4571, -1.3071);
snowBlock48.rotation.set(deg(-133.5064), deg(-10.4573), deg(-169.1746));
root.add(snowBlock48);
const snowBlock49 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6293, 0.3822, 0.32), 0.02, 257), snowAltMat);
snowBlock49.name = 'snowBlock';
snowBlock49.position.set(-0.9525, 1.4533, -0.9561);
snowBlock49.rotation.set(deg(-124.8449), deg(-29.6488), deg(-144.6036));
root.add(snowBlock49);
const snowBlock50 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6575, 0.3963, 0.32), 0.02, 258), snowMat);
snowBlock50.name = 'snowBlock';
snowBlock50.position.set(-1.3188, 1.4743, -0.3717);
snowBlock50.rotation.set(deg(-104.927), deg(-42.4251), deg(-111.5619));
root.add(snowBlock50);
const snowBlock51 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6536, 0.3854, 0.32), 0.02, 259), snowAltMat);
snowBlock51.name = 'snowBlock';
snowBlock51.position.set(-1.298, 1.4511, 0.3613);
snowBlock51.rotation.set(deg(-75.2387), deg(-42.4731), deg(-68.6836));
root.add(snowBlock51);
const snowBlock52 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.693, 0.4061, 0.32), 0.02, 260), snowAltMat);
snowBlock52.name = 'snowBlock';
snowBlock52.position.set(-0.9516, 1.4521, 0.9553);
snowBlock52.rotation.set(deg(-55.1541), deg(-29.6476), deg(-35.3944));
root.add(snowBlock52);
const snowBlock53 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6823, 0.3972, 0.32), 0.02, 261), snowMat);
snowBlock53.name = 'snowBlock';
snowBlock53.position.set(-0.3406, 1.4651, 1.3178);
snowBlock53.rotation.set(deg(-46.4256), deg(-10.1009), deg(-10.4443));
root.add(snowBlock53);
const snowBlock54 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6291, 0.3868, 0.32), 0.02, 300), snowAltMat);
snowBlock54.name = 'snowBlock';
snowBlock54.position.set(-0.0127, 1.7203, 1.0051);
snowBlock54.rotation.set(deg(-58.502), deg(-0.3789), deg(-0.6184));
root.add(snowBlock54);
const snowBlock55 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6895, 0.3772, 0.32), 0.02, 301), snowMat);
snowBlock55.name = 'snowBlock';
snowBlock55.position.set(0.6563, 1.7362, 0.7742);
snowBlock55.rotation.set(deg(-64.9469), deg(19.7473), deg(35.8602));
root.add(snowBlock55);
const snowBlock56 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.68, 0.3976, 0.32), 0.02, 302), snowMat);
snowBlock56.name = 'snowBlock';
snowBlock56.position.set(0.9929, 1.7268, 0.1801);
snowBlock56.rotation.set(deg(-83.7597), deg(30.9382), deg(77.9927));
root.add(snowBlock56);
const snowBlock57 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6427, 0.3969, 0.32), 0.02, 303), snowAltMat);
snowBlock57.name = 'snowBlock';
snowBlock57.position.set(0.8791, 1.7495, -0.5233);
snowBlock57.rotation.set(deg(-107.4034), deg(26.6779), deg(124.9204));
root.add(snowBlock57);
const snowBlock58 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6626, 0.4084, 0.32), 0.02, 304), snowMat);
snowBlock58.name = 'snowBlock';
snowBlock58.position.set(0.3355, 1.7404, -0.9606);
snowBlock58.rotation.set(deg(-120.0508), deg(9.9203), deg(163.4173));
root.add(snowBlock58);
const snowBlock59 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6614, 0.4036, 0.32), 0.02, 305), snowMat);
snowBlock59.name = 'snowBlock';
snowBlock59.position.set(-0.3483, 1.7427, -0.9575);
snowBlock59.rotation.set(deg(-119.9369), deg(-10.2892), deg(-162.7681));
root.add(snowBlock59);
const snowBlock60 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.69, 0.4067, 0.32), 0.02, 306), snowMat);
snowBlock60.name = 'snowBlock';
snowBlock60.position.set(-0.887, 1.75, -0.5105);
snowBlock60.rotation.set(deg(-106.9967), deg(-26.9271), deg(-124.0184));
root.add(snowBlock60);
const snowBlock61 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6821, 0.3917, 0.32), 0.02, 307), snowAltMat);
snowBlock61.name = 'snowBlock';
snowBlock61.position.set(-1.001, 1.7398, 0.1806);
snowBlock61.rotation.set(deg(-83.7911), deg(-30.9439), deg(-78.0537));
root.add(snowBlock61);
const snowBlock62 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.6524, 0.3898, 0.32), 0.02, 308), snowMat);
snowBlock62.name = 'snowBlock';
snowBlock62.position.set(-0.661, 1.7471, 0.779);
snowBlock62.rotation.set(deg(-64.9551), deg(-19.758), deg(-35.8844));
root.add(snowBlock62);
const snowBlock63 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.7459, 0.4037, 0.32), 0.02, 350), snowMat);
snowBlock63.name = 'snowBlock';
snowBlock63.position.set(0.3677, 1.9242, 0.4955);
snowBlock63.rotation.set(deg(-74.9603), deg(10.8997), deg(35.1357));
root.add(snowBlock63);
const snowBlock64 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.7184, 0.3872, 0.32), 0.02, 351), snowMat);
snowBlock64.name = 'snowBlock';
snowBlock64.position.set(0.5922, 1.9373, -0.1882);
snowBlock64.rotation.set(deg(-95.7876), deg(17.6016), deg(108.5302));
root.add(snowBlock64);
const snowBlock65 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.7349, 0.3837, 0.32), 0.02, 352), snowAltMat);
snowBlock65.name = 'snowBlock';
snowBlock65.position.set(-0.005, 1.9288, -0.6186);
snowBlock65.rotation.set(deg(-108.4994), deg(-0.1479), deg(-179.5579));
root.add(snowBlock65);
const snowBlock66 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.7173, 0.3792, 0.32), 0.02, 353), snowMat);
snowBlock66.name = 'snowBlock';
snowBlock66.position.set(-0.5882, 1.9214, -0.1833);
snowBlock66.rotation.set(deg(-95.6848), deg(-17.6341), deg(-108.1905));
root.add(snowBlock66);
const snowBlock67 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.7137, 0.3939, 0.32), 0.02, 354), snowMat);
snowBlock67.name = 'snowBlock';
snowBlock67.position.set(-0.3572, 1.9264, 0.5041);
snowBlock67.rotation.set(deg(-74.7306), deg(-10.5717), deg(-33.9031));
root.add(snowBlock67);
const capstone = new THREE.Mesh(jitter(new THREE.SphereGeometry(2.06, 8, 2, 0, Math.PI * 2, 0, Math.PI / 12), 0.015, 7), snowMat);
capstone.name = 'capstone';
capstone.position.set(0, 0.08, 0);
root.add(capstone);
const tunnelBlock = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.4636, 0.6226, 0.32), 0.02, 500), snowAltMat);
tunnelBlock.name = 'tunnelBlock';
tunnelBlock.position.set(0.7466, 0.3226, 1.8565);
tunnelBlock.rotation.set(deg(-90), deg(72), deg(-180));
root.add(tunnelBlock);
const tunnelBlock2 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.4636, 0.6226, 0.32), 0.02, 501), snowMat);
tunnelBlock2.name = 'tunnelBlock';
tunnelBlock2.position.set(0.4614, 0.7151, 1.8565);
tunnelBlock2.rotation.set(deg(-90), deg(36), deg(180));
root.add(tunnelBlock2);
const tunnelBlock3 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.4636, 0.6226, 0.32), 0.02, 502), snowMat);
tunnelBlock3.name = 'tunnelBlock';
tunnelBlock3.position.set(0, 0.865, 1.8565);
tunnelBlock3.rotation.set(deg(-90), 0, deg(180));
root.add(tunnelBlock3);
const tunnelBlock4 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.4636, 0.6226, 0.32), 0.02, 503), snowMat);
tunnelBlock4.name = 'tunnelBlock';
tunnelBlock4.position.set(-0.4614, 0.7151, 1.8565);
tunnelBlock4.rotation.set(deg(-90), deg(-36), deg(-180));
root.add(tunnelBlock4);
const tunnelBlock5 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.4636, 0.6226, 0.32), 0.02, 504), snowMat);
tunnelBlock5.name = 'tunnelBlock';
tunnelBlock5.position.set(-0.7466, 0.3226, 1.8565);
tunnelBlock5.rotation.set(deg(-90), deg(-72), deg(180));
root.add(tunnelBlock5);
const tunnelBlock6 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.4915, 0.6226, 0.3392), 0.02, 510), snowMat);
tunnelBlock6.name = 'tunnelBlock';
tunnelBlock6.position.set(0.7914, 0.3371, 2.5188);
tunnelBlock6.rotation.set(deg(-90), deg(72), deg(-180));
root.add(tunnelBlock6);
const tunnelBlock7 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.4915, 0.6226, 0.3392), 0.02, 511), snowMat);
tunnelBlock7.name = 'tunnelBlock';
tunnelBlock7.position.set(0.4891, 0.7532, 2.5188);
tunnelBlock7.rotation.set(deg(-90), deg(36), deg(180));
root.add(tunnelBlock7);
const tunnelBlock8 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.4915, 0.6226, 0.3392), 0.02, 512), snowAltMat);
tunnelBlock8.name = 'tunnelBlock';
tunnelBlock8.position.set(0, 0.9121, 2.5188);
tunnelBlock8.rotation.set(deg(-90), 0, deg(180));
root.add(tunnelBlock8);
const tunnelBlock9 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.4915, 0.6226, 0.3392), 0.02, 513), snowAltMat);
tunnelBlock9.name = 'tunnelBlock';
tunnelBlock9.position.set(-0.4891, 0.7532, 2.5188);
tunnelBlock9.rotation.set(deg(-90), deg(-36), deg(-180));
root.add(tunnelBlock9);
const tunnelBlock10 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.4915, 0.6226, 0.3392), 0.02, 514), snowAltMat);
tunnelBlock10.name = 'tunnelBlock';
tunnelBlock10.position.set(-0.7914, 0.3371, 2.5188);
tunnelBlock10.rotation.set(deg(-90), deg(-72), deg(180));
root.add(tunnelBlock10);
const doorOpening = new THREE.Mesh(new THREE.CylinderGeometry(0.665, 0.665, 0.04, 10, 1, false, Math.PI / 2, Math.PI), doorMat);
doorOpening.name = 'doorOpening';
doorOpening.position.set(0, 0.08, 1.954);
doorOpening.rotation.set(deg(90), 0, 0);
root.add(doorOpening);
const tunnelFloorInterior = new THREE.Mesh(new THREE.BoxGeometry(1.25, 0.03, 1.3246), mortarMat);
tunnelFloorInterior.name = 'tunnelFloorInterior';
tunnelFloorInterior.position.set(0, 0.075, 2.1877);
root.add(tunnelFloorInterior);
const snowDrift = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.3486, 1), 0.06, 900), snowMat);
snowDrift.name = 'snowDrift';
snowDrift.position.set(1.8264, 0.1688, 1.2383);
snowDrift.rotation.set(0, deg(55.8624), 0);
snowDrift.scale.set(1.4, 0.55, 1);
root.add(snowDrift);
const snowDrift2 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.4541, 1), 0.06, 901), snowMat);
snowDrift2.name = 'snowDrift';
snowDrift2.position.set(2.201, 0.2433, -0.4855);
snowDrift2.rotation.set(0, deg(102.4381), 0);
snowDrift2.scale.set(1.4, 0.55, 1);
root.add(snowDrift2);
const snowDrift3 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.4599, 1), 0.06, 902), snowMat);
snowDrift3.name = 'snowDrift';
snowDrift3.position.set(1.6193, 0.263, -1.7467);
snowDrift3.rotation.set(0, deg(137.1674), 0);
snowDrift3.scale.set(1.4, 0.55, 1);
root.add(snowDrift3);
const snowDrift4 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.4129, 1), 0.06, 903), snowMat);
snowDrift4.name = 'snowDrift';
snowDrift4.position.set(0.4488, 0.2535, -2.1741);
snowDrift4.rotation.set(0, deg(168.3371), 0);
snowDrift4.scale.set(1.4, 0.55, 1);
root.add(snowDrift4);
const snowDrift5 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.3502, 1), 0.06, 904), snowMat);
snowDrift5.name = 'snowDrift';
snowDrift5.position.set(-0.8797, 0.1815, -2.1208);
snowDrift5.rotation.set(0, deg(202.5275), 0);
snowDrift5.scale.set(1.4, 0.55, 1);
root.add(snowDrift5);
const snowDrift6 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.3934, 1), 0.06, 905), snowMat);
snowDrift6.name = 'snowDrift';
snowDrift6.position.set(-2.0067, 0.2474, -1.2116);
snowDrift6.rotation.set(0, deg(238.8769), 0);
snowDrift6.scale.set(1.4, 0.55, 1);
root.add(snowDrift6);
const snowDrift7 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.3196, 1), 0.06, 906), snowMat);
snowDrift7.name = 'snowDrift';
snowDrift7.position.set(-2.2911, 0.1779, 0.3545);
snowDrift7.rotation.set(0, deg(278.7955), 0);
snowDrift7.scale.set(1.4, 0.55, 1);
root.add(snowDrift7);
const looseBlock = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.62, 0.3, 0.36), 0.02, 167), snowMat);
looseBlock.name = 'looseBlock';
looseBlock.position.set(1.645, 0.17, 2.7);
looseBlock.rotation.set(0, deg(20), 0);
root.add(looseBlock);
const looseBlock2 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.62, 0.3, 0.36), 0.02, 182), snowMat);
looseBlock2.name = 'looseBlock';
looseBlock2.position.set(1.795, 0.17, 2.25);
looseBlock2.rotation.set(0, deg(-15), 0);
root.add(looseBlock2);
const looseBlock3 = new THREE.Mesh(jitter(new THREE.BoxGeometry(0.62, 0.3, 0.36), 0.02, 175), snowAltMat);
looseBlock3.name = 'looseBlock';
looseBlock3.position.set(1.725, 0.47, 2.5);
looseBlock3.rotation.set(0, deg(5), 0);
root.add(looseBlock3);
root.traverse((o) => {
if (o.isMesh) {
o.castShadow = true;
o.receiveShadow = true;
}
});
return root;
}
export default createIgloo;
Ratings & comments
0 comments
No comments yet. Share how you used this model or what could be better.
Related models
Same category or similar tags









