Codels
1820 ポリゴン6.38 × 2.16 × 6.44 m
自己完結型の ES モジュールで、依存先は three のみです。ファクトリー関数を呼び出し、返された group をシーンに追加してください。
/**
 * 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;

評価とコメント

—
まだ評価はありません。最初の評価をしてみましょう。
5
0
4
0
3
0
2
0
1
0

評価やコメントをするにはログインしてください。

0 件のコメント

まだコメントはありません。このモデルの使い方や改善できる点を共有しましょう。

関連モデル

同じカテゴリまたは似たタグ